Tengo un servidor web escrito en Node.js y me gustaría iniciarlo con una carpeta específica. No estoy seguro de cómo acceder a los argumentos en JavaScript. Estoy ejecutando un nodo como este:
$ node server.js folder
Aquí server.js
está 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 accedería a esos argumentos en JavaScript? De alguna manera no pude encontrar esta información en la web.
process.argv[n]
dónden
está el índice basado en cero?node [options] [ -e script | script.js ] [arguments]
onode debug script.js [arguments]
. por ejemplo:node --harmony script.js balala
onode --no-deprecation --enable-ssl2 script.js balala
, podemos usar process.execArgv con process.argvPara normalizar los argumentos como recibiría una función de JavaScript normal, hago esto en mis scripts de shell node.js:
Tenga en cuenta que el primer argumento suele ser la ruta a nodejs, y el segundo argumento es la ubicación del script que está ejecutando.
fuente
execArgv
están en el 2 por lo que es suficienteargv
process.argv.splice(process.execArgv.length + 2)
: para un comandonode --harmony script.js --version
, elprocess.argv
es['/usr/local/bin/node', 'script.js', '--version']
. ¡Las banderas nonode
están incluidas en !process.argv
La respuesta correcta actualizada para esto es usar la biblioteca minimista . Solíamos usar node-optimist pero desde entonces ha quedado en desuso.
Aquí hay un ejemplo de cómo usarlo tomado directamente de la documentación minimista:
-
-
fuente
Respuesta de 2018 basada en las tendencias actuales en la naturaleza:
Análisis de argumentos de Javascript de vainilla:
Esto devuelve:
Documentos oficiales
Paquetes NPM más utilizados para el análisis de argumentos:
Minimista : para análisis de argumentos mínimos.
Commander.js : módulo más adoptado para el análisis de argumentos.
Miau : alternativa más ligera a Commander.js
Yargs : análisis de argumentos más sofisticado (pesado).
Vorpal.js : aplicaciones de línea de comandos maduras / interactivas con análisis de argumentos.
fuente
Optimista (optimista de nodo)
Echa un vistazo a la biblioteca optimista , es mucho mejor que analizar las opciones de línea de comandos a mano.
Actualizar
Optimist está en desuso. Pruebe los hilos, que es una bifurcación activa de optimista.
fuente
Varias respuestas geniales aquí, pero todo parece muy complejo. Esto es muy similar a cómo los scripts de bash acceden a los valores de los argumentos y ya se proporciona de forma estándar con node.js como señaló MooGoo. (Solo para que sea comprensible para alguien que es nuevo en node.js)
Ejemplo:
fuente
Commander.js
Funciona muy bien para definir sus opciones, acciones y argumentos. También genera las páginas de ayuda para usted.
Prontamente
Funciona muy bien para obtener información del usuario, si le gusta el enfoque de devolución de llamada.
Co-Prompt
Funciona muy bien para obtener información del usuario, si le gusta el enfoque del generador.
fuente
Sin Libs con banderas formateadas en un objeto simple
Ejemplos
Simple
entrada
salida
Mundo real
entrada
salida
fuente
= longArg[1]
poder escribir,= longArg.length > 1 ? longArg[1] : true;
esto le permitiría pasar este tipo de argumento:node config/build.js --flag1 --flag2
Biblioteca Stdio
La forma más fácil de analizar argumentos de línea de comandos en NodeJS es usar el módulo stdio . Inspirado en la
getopt
utilidad UNIX , es tan trivial como sigue:Si ejecuta el código anterior con este comando:
Entonces el
ops
objeto será el siguiente:Entonces puedes usarlo como quieras. Por ejemplo:
Las opciones agrupadas también son compatibles, por lo que puede escribir en
-om
lugar de-o -m
.Además,
stdio
puede generar una salida de ayuda / uso automáticamente. Si llamaops.printHelp()
, obtendrá lo siguiente:El mensaje anterior también se muestra si no se proporciona una opción obligatoria (precedida por el mensaje de error) o si está mal especificada (por ejemplo, si especifica un único argumento para una opción y necesita 2).
Puede instalar el módulo stdio usando NPM :
fuente
Si su script se llama myScript.js y desea pasar el nombre y el apellido, 'Sean Worthington', como argumentos a continuación:
Luego, dentro de tu guión, escribes:
fuente
¡ vale la pena echar un vistazo a command-line-args !
Puede establecer opciones utilizando los principales estándares de notación ( más información ). Todos estos comandos son equivalentes y establecen los mismos valores:
Para acceder a los valores, primero cree una lista de definiciones de opciones que describan las opciones que acepta su aplicación. La
type
propiedad es una función de establecimiento (el valor proporcionado se pasa a través de esto), lo que le brinda control total sobre el valor recibido.A continuación, analice las opciones usando commandLineArgs () :
options
ahora se ve así:Uso avanzado
Además del uso típico anterior, puede configurar comandos-line-args para aceptar formas de sintaxis más avanzadas.
Sintaxis basada en comandos (estilo git) en la forma:
Por ejemplo.
Sintaxis de comando y subcomando (estilo docker) en la forma:
Por ejemplo.
Guía de uso de generación
Se
--help
puede generar una guía de uso (generalmente impresa cuando se configura) usando el uso de la línea de comandos . Vea los ejemplos a continuación y lea la documentación. para obtener instrucciones sobre cómo crearlos.Un ejemplo típico de guía de uso.
La guía de uso de polímero-cli es un buen ejemplo de la vida real.
Otras lecturas
Hay mucho más que aprender, consulte la wiki para ver ejemplos y documentación.
fuente
partial
ystopAtFirstUnknown
. Ver los documentos .Hay una aplicación para eso. Bueno, módulo. Bueno, más de uno, probablemente cientos.
Yargs es uno de los más divertidos, sus documentos son geniales para leer.
Aquí hay un ejemplo de la página github / npm:
La salida está aquí (lee las opciones con guiones, etc., cortos y largos, numéricos, etc.).
fuente
Aquí está mi solución 0-dep para argumentos con nombre:
Ejemplo:
Nota: Naturalmente, esto fallará cuando el argumento contenga a
=
. Esto es solo para un uso muy simple.fuente
Probablemente sea una buena idea administrar su configuración de manera centralizada utilizando algo como nconf https://github.com/flatiron/nconf
Le ayuda a trabajar con archivos de configuración, variables de entorno, argumentos de línea de comandos.
fuente
sin bibliotecas: usando Array.prototype.reduce ()
para este comando
node index.js count=2 print debug=false msg=hi
además,
podemos cambiar
por (mucho más tiempo)
para analizar automáticamente Boolean & Number
fuente
count
y las de ambosc
(c
como un alias / shorcut paracount
)?Pasar, analizar argumentos es un proceso fácil. Node le proporciona la propiedad process.argv, que es una matriz de cadenas, que son los argumentos que se usaron cuando se invocó Node. La primera entrada de la matriz es el ejecutable Node, y la segunda entrada es el nombre de su script.
Si ejecuta un script con los siguientes argumentos
Archivo: args.js
Obtendrás una matriz como
fuente
Si quieres ejecutar algo como esto:
-
O algo como:
-
fuente
proj.js
Terminal:
Resultado:
Explicación:
0
: El directorio de node.exe en su mecanizado (C: \ Archivos de programa \ nodejs \ node.exe ')1
: El directorio de su archivo de proyecto. (proj.js)2
: Su primer argumento para el nodo (arg1)3
: Su segundo argumento para el nodo (arg2)4
: Su tercer argumento para el nodo (arg3)sus argumentos reales comienzan el
2nd
índice de forma de laargv
matriz, es decirprocess.argv[2]
.fuente
Puede llegar a los argumentos de la línea de comandos usando
system.args
. Y uso la solución a continuación para analizar los argumentos en un objeto, de modo que pueda obtener cuál quiero por nombre.ahora no necesita saber el índice del argumento. úsalo como
args.whatever
fuente
map
propiedad no está definida.Puede analizar todos los argumentos y verificar si existen.
archivo: parse-cli-argumentos.js:
Que solo hacer:
fuente
Sin bibliotecas
Si desea hacer esto en vanilla JS / ES6, puede usar la siguiente solución
trabajó solo en NodeJS> 6
Y este comando
producirá el siguiente resultado
ps Por favor, corrija el código en el mapa y reduzca la función si encuentra una solución más elegante, gracias;)
fuente
let args = process.argv.slice(2).reduce((acc, arg) => { let [k, v] = arg.split('=') acc[k] = v return acc }, {})
Aunque las respuestas anteriores son perfectas, y alguien ya ha sugerido hilos, usar el paquete es realmente fácil. Este es un paquete agradable que hace que pasar argumentos a la línea de comandos sea realmente fácil.
Visite https://yargs.js.org/ para obtener más información.
fuente
Pasar argumentos es fácil, y recibirlos es solo una cuestión de leer el proceso.argv array Node hace accesible desde todas partes, básicamente. Pero seguramente querrá leerlos como pares clave / valor, por lo que necesitará una pieza para escribir para interpretarlo.
Joseph Merdrignac publicó una hermosa usando reduce, pero se basó en una
key=value
sintaxis en lugar de-k value
y--key value
. Reescribí mucho más feo y largo usar ese segundo estándar, y lo publicaré como respuesta porque no encajaría como comentario. Pero hace el trabajo.Con este código, un comando
node script.js alpha beta -charlie delta --echo foxtrot
le daría el siguiente objetofuente
La forma más sencilla de recuperar argumentos en Node.js es a través de la matriz process.argv. Este es un objeto global que puede usar sin importar ninguna biblioteca adicional para usarlo. Simplemente necesita pasar argumentos a una aplicación Node.js, tal como mostramos anteriormente, y se puede acceder a estos argumentos dentro de la aplicación a través de la matriz process.argv.
El primer elemento de la matriz process.argv siempre será una ruta del sistema de archivos que apunte al ejecutable del nodo. El segundo elemento es el nombre del archivo JavaScript que se está ejecutando. Y el tercer elemento es el primer argumento que realmente pasó el usuario.
Todo lo que hace este script es recorrer la matriz process.argv e imprime los índices, junto con los elementos almacenados en esos índices. Es muy útil para la depuración si alguna vez cuestionas qué argumentos estás recibiendo y en qué orden.
También puede usar bibliotecas como yargs para trabajar con argumentos de línea de comandos.
fuente
Solución TypeScript sin bibliotecas:
Entrada:
ts-node index.js -p param --parameter parameter
Salida:
{ p: 'param ', parameter: 'parameter' }
fuente
process.argv
es su amigo, la captura de argumentos de línea de comandos se admite de forma nativa en Node JS. Ver ejemplo a continuación ::fuente
como se indica en los documentos del nodo La propiedad process.argv devuelve una matriz que contiene los argumentos de la línea de comandos pasados cuando se inició el proceso Node.js.
Por ejemplo, suponiendo el siguiente script para process-args.js:
Lanzando el proceso Node.js como:
Generaría la salida:
fuente
La mayoría de las personas han dado buenas respuestas. También me gustaría contribuir con algo aquí. Estoy proporcionando la respuesta usando la
lodash
biblioteca para iterar a través de todos los argumentos de línea de comando que pasamos al iniciar la aplicación:Para ejecutar el código anterior, simplemente ejecute los siguientes comandos:
El resultado será:
fuente
La mejor manera de pasar argumentos de línea de comandos a un programa Node.js es mediante el uso de una interfaz de línea de comandos (CLI)
Hay un ingenioso módulo npm llamado nodejs-cli que puede usar.
Si quieres crear uno sin dependencias, tengo uno en mi Github si quieres comprobarlo, en realidad es bastante simple y fácil de usar, haz clic aquí .
fuente
Solución sin dependencias de estilo ES6:
fuente