Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

375
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda