¿Cómo puedo pasar argumentos de línea de comandos a un programa Node.js?

Tengo un servidor web escrito en Node.js y me gustaría lanzar con una carpeta específica. No estoy seguro de cómo acceder a los argumentos en JavaScript. Yo'estoy ejecutando node así:

$ node server.js folder

aquí server.js es mi código de servidor. La ayuda de Node.js dice que esto es posible:

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

¿Cómo puedo acceder a esos argumentos en JavaScript? Por alguna razón no he podido encontrar esta información en la web.

Solución

Método estándar (sin biblioteca)

Los argumentos se almacenan en process.argv.

Aquí están los documentos del nodo sobre el manejo de los argumentos de la línea de comandos:

El process.argv es un array que contiene los argumentos de la línea de comandos. El primer elemento será 'node', el segundo elemento será el nombre del archivo JavaScript. Los siguientes elementos serán cualquier argumento adicional de la línea de comandos.

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

Esto 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
Comentarios (8)

Para normalizar los argumentos como los que recibiría una función javascript normal, hago esto en mis scripts de shell node.js:

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

Ten en cuenta que el primer argumento suele ser la ruta a nodejs, y el segundo argumento es la ubicación del script que estás ejecutando.

Comentarios (12)

Optimista (nodo-optimista)

Echa un vistazo a optimist library, es mucho mejor que analizar las opciones de la línea de comandos a mano.

Actualización

Optimist está obsoleto. Pruebe yargs que es un fork activo de optimist.

Comentarios (4)