Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

376
Views
¿Cómo ejecutar node.js cli con experimental-specifier-solution=node?

Nuestro equipo ha construido una pequeña CLI utilizada para el mantenimiento. El paquete.json especifica una ruta con la propiedad bin , y todo funciona muy bien; "bin": { "eddy": "./dist/src/cli/entry.js"}

El autocompletado se logra usando yargs@17.0.1 . Sin embargo , recientemente convertimos el proyecto para usar módulos es6, debido a una migración a Sveltekit, es decir, el paquete.json ahora contiene el type: module . Debido a esto, la CLI ahora solo funciona si ejecutamos con:

que funciona

 node --experimental-specifier-resolution=node ./dist/src/cli/entry.js help

Sin embargo, si ejecutamos esto sin la bandera, obtenemos un error "módulo no encontrado":

 Error [ERR_MODULE_NOT_FOUND]: Cannot find module...

entonces la pregunta es

¿Podemos de alguna manera agregar "siempre" el experimental-specifier-resolution=node a la CLI, para que podamos continuar usando la abreviatura eddy y utilizar la finalización automática?

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Hay dos soluciones probables aquí.

Solución 1

Su archivo entry.js debe comenzar con un shebang como #!/usr/bin/env node . No puede especificar la bandera directamente aquí, sin embargo, si pudiera proporcionar la ruta absoluta al nodo directamente en el shebang, puede especificar la bandera.

Suponiendo que tiene un nodo instalado en /usr/bin/node , puede escribir el shebang en entry.js como:

 #!/usr/bin/node --experimental-specifier-resolution=node

(Use which node para encontrar la ruta absoluta)

Sin embargo, esta no es una solución muy portátil. No siempre puede asumir que todos tienen un nodo instalado en la misma ruta. Además, algunos pueden usar nvm para administrar versiones y pueden tener varias versiones en diferentes rutas. Esta es la razón por la que usamos /usr/bin/env para encontrar la instalación del nodo requerido en primer lugar. Esto lleva a la segunda solución.

Solución 2

Puede crear un script de shell que llamaría internamente al punto de entrada de cli con las banderas requeridas. Este script de shell se puede especificar en la sección bin de package.json .

El script de shell ( entry.sh ) debería verse así:

 #!/usr/bin/env bash /usr/bin/env node --experimental-specifier-resolution=node ./entry.js "$@"

Luego, en su package.json , reemplace bin con:

 "bin": { "eddy": "./dist/src/cli/entry.sh"}

Entonces, cuando ejecute eddy , ejecutará entry.js usando el node con el indicador requerido. El "$@" en el comando será reemplazado por cualquier argumento que le pases a eddy .

Así que eddy help de Eddy se traducirá a /usr/bin/env node --experimental-specifier-resolution=node ./entry.js help

over 4 years ago · Santiago Trujillo Report

0

Simplemente agregue un script a su paquete.json:
Suponiendo que index.js es su punto de entrada y package.json está en el mismo directorio

 { "scripts": { "start": "node --experimental-specifier-resolution=node index.js" } }

Entonces puedes ejecutar en tu consola:

 npm start
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!