Saltar al contenido

Envío de argumentos de línea de comando al script npm

Indagamos en distintos espacios para así regalarte la respuesta a tu inquietud, si continúas con preguntas puedes dejarnos tu inquietud y respondemos sin falta, porque estamos para ayudarte.

Solución:

npm 2 y posteriores

Es posible pasar argumentos a npm run desde npm 2 (2014). La sintaxis es la siguiente:

npm run [-- ]

Nota la -- separador, utilizado para separar los parámetros pasados ​​a npm comando en sí mismo, y los parámetros pasados ​​​​a su secuencia de comandos.

con el ejemplo package.json:

  "scripts": 
    "grunt": "grunt",
    "server": "node server.js"
  

aquí se explica cómo pasar los parámetros a esos scripts:

npm run grunt -- task:target  // invokes `grunt task:target`
npm run server -- --port=1337 // invokes `node server.js --port=1337`

Nota: Si su parámetro no comienza con - o --entonces teniendo un explícito -- no se necesita separador; pero es mejor hacerlo de todos modos para mayor claridad.

npm run grunt task:target     // invokes `grunt task:target`

Tenga en cuenta a continuación la diferencia en el comportamiento (test.js posee console.log(process.argv)): los parámetros que comienzan con - o --se pasan a npm y no al guiony son tragados en silencio allí.

$ npm run test foobar
['C:\Program Files\nodejs\node.exe', 'C:\git\myrepo\test.js',  'foobar']

$ npm run test -foobar
['C:\Program Files\nodejs\node.exe', 'C:\git\myrepo\test.js']

$ npm run test --foobar
['C:\Program Files\nodejs\node.exe', 'C:\git\myrepo\test.js']

$ npm run test -- foobar
['C:\Program Files\nodejs\node.exe', 'C:\git\myrepo\test.js', 'foobar']

$ npm run test -- -foobar
['C:\Program Files\nodejs\node.exe', 'C:\git\myrepo\test.js', '-foobar']

$ npm run test -- --foobar
['C:\Program Files\nodejs\node.exe', 'C:\git\myrepo\test.js', '--foobar']

La diferencia es más clara cuando usas un parámetro realmente utilizado por npm:

$ npm test --help      // this is disguised `npm --help test`
npm test [-- ]

aliases: tst, t

Para obtener el valor del parámetro, consulte esta pregunta. Para leer parámetros con nombre, probablemente sea mejor usar una biblioteca de análisis como yargs o minimist; nodejs expone process.argv globalmente, que contiene valores de parámetros de línea de comando, pero esta es una API de bajo nivel (separados por espacios en blanco array de cadenas, según lo proporcionado por el sistema operativo al ejecutable del nodo).


Editar 2013.10.03: Actualmente no es posible directamente. Pero hay un problema de GitHub relacionado abierto en npm para implementar el comportamiento que estás pidiendo. Parece que el consenso es tener esto implementado, pero depende de que otro problema se resuelva antes.


Respuesta original (2013.01): Como una especie de solución alternativa (aunque no muy útil), puede hacer lo siguiente:

Di el nombre de tu paquete de package.json es myPackage y tu tambien tienes

"scripts": 
    "start": "node ./script.js server"

Luego agrega package.json:

"config": 
    "myPort": "8080"

y en tu script.js:

// defaulting to 8080 in case if script invoked not via "npm run-script" but directly
var port = process.env.npm_package_config_myPort || 8080

De esa manera, por defecto npm start usará 8080. Sin embargo, puede configurarlo (el valor será almacenado por npm en su almacenamiento interno):

npm config set myPackage:myPort 9090

Entonces, al invocar npm startse utilizará 9090 (el valor predeterminado de package.json se anula).

Usted pidió ser capaz de ejecutar algo me gustanpm start 8080. Esto es posible sin necesidad de modificar script.js o archivos de configuración de la siguiente manera.

Por ejemplo, en su "scripts" Valor JSON, incluir–

"start": "node ./script.js server $PORT"

Y luego desde la línea de comandos:

$ PORT=8080 npm start

He confirmado que esto funciona usando bash y npm 1.4.23. Tenga en cuenta que esta solución alternativa no requiere que se resuelva el problema npm de GitHub #3494.

También podrías hacer eso:

En package.json:

"scripts": 
    "cool": "./cool.js"

En cool.js:

 console.log( myVar: process.env.npm_config_myVar );

En CLI:

npm --myVar=something run-script cool

Debería salir:

 myVar: 'something' 

Actualización: al usar npm 3.10.3, parece que pone en minúsculas el process.env.npm_config_ variables? yo también estoy usando better-npm-runpor lo que no estoy seguro de si este es el comportamiento predeterminado de Vanilla o no, pero esta respuesta es trabajando. En lugar de process.env.npm_config_myVartratar process.env.npm_config_myvar

Si te ha resultado de utilidad nuestro artículo, te agradeceríamos que lo compartas con el resto juniors y nos ayudes a extender nuestra información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *