880 votos

Cómo pasar argumentos de línea de comandos Node.js?

Esto es probablemente sólo un JavaScript que se trate. Tengo un servidor web escrito en Node.js que me gustaría iniciar con una carpeta específica. No estoy seguro de cómo acceder a los argumentos en JavaScript. Estoy corriendo nodo como este

$ node server.js folder

Donde server.js es mi código. Node.js ayuda dice que esto es posible:

$ node -h
Usage: node [options] script.js [arguments]

¿Cómo puedo acceder a esos argumentos en JavaScript? De alguna manera, yo no era capaz de encontrar esta información en la web.

1145voto

MooGoo Puntos 11094

Método estándar (no librería)

Los argumentos que se almacenan en process.argv

Aquí está la especificación de la forma http://nodejs.org/docs/latest/api/process.html#process_process_argv

process.argv es una matriz que contiene los argumentos de línea de comandos. El primer elemento será el 'nodo', el segundo elemento será el nombre del archivo JavaScript. El próximo elementos adicionales argumentos de línea de comandos.

// print process.argv
process.argv.forEach(function (val, index, array) {
  console.log(index + ': ' + val);
});

Esto va a generar:

$ node process-2.js one two=three four
0: node
1: /Users/mjr/work/node/process-2.js
2: one
3: two=three
4: four

211voto

Mauvis Ledford Puntos 12424

Para normalizar los argumentos como una función de javascript recibiría, puedo hacer esto en mi node.js los scripts de shell:

var arguments = process.argv.slice(2);

Tenga en cuenta que el primer argumento es generalmente la ruta de acceso a nodejs, y el segundo argumento es la ubicación del script que estamos ejecutando.

Edit: Psst, utilizando el "Modo Estricto" en JavaScript? Lo que quiero hacer:

var args = process.argv.slice(2);

95voto

gor Puntos 6313

Optimista (nodo-optimista)

Echa un vistazo optimista de la biblioteca, es mucho mejor que el análisis de opciones de línea de comandos a mano.

51voto

balupton Puntos 17805

Commander.js

Funciona muy bien para definir sus opciones, las acciones y los argumentos. También genera las páginas de ayuda para usted.

De inmediato

Las grandes obras para obtener la entrada del usuario, si te gusta la devolución de enfoque.

Co-Símbolo Del Sistema

Las grandes obras para obtener la entrada del usuario, si te gusta el generador de enfoque.

27voto

sgmonda Puntos 849

Biblioteca Stdio

La forma más sencilla de analizar argumentos de línea de comandos en NodeJS es el uso de la stdio módulo. Inspirado en UNIX getopt de la utilidad, es tan trivial como sigue:

var stdio = require('stdio');
var ops = stdio.getopt({
    'check': {key: 'c', args: 2, description: 'What this option means'},
    'map': {key: 'm', description: 'Another description'},
    'kaka': {args: 1, mandatory: true},
    'ooo': {key: 'o'}
});

Si se ejecuta el código anterior con este comando:

node <your_script.js> -c 23 45 --map -k 23 file1 file2

A continuación, ops objeto será el siguiente:

{ check: [ '23', '45' ],
  args: [ 'file1', 'file2' ],
  map: true,
  kaka: '23' }

Así que usted puede utilizarlo como quiera. Por ejemplo:

if (ops.kaka && ops.check) {
    console.log(ops.kaka + ops.check[0]);
}

Opciones agrupadas también son compatibles, así que usted puede escribir -om en lugar de -o -m.

Además, stdio puede generar un uso/ayuda de salida automáticamente. Si usted llame ops.printHelp() obtendrá las siguientes:

USAGE: node something.js [--check <ARG1> <ARG2>] [--kaka] [--ooo] [--map]
  -c, --check <ARG1> <ARG2>   What this option means (mandatory)
  -k, --kaka                  (mandatory)
  --map                       Another description
  -o, --ooo

El mensaje anterior se muestra también si una opción obligatoria no es dado (precedido por el mensaje de error) o si es mispecified (por ejemplo, si se especifica un único arg por una opción y necesidades 2).

Puede instalar stdio módulo de uso de la NGP:

npm install stdio

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X