2653 votes

Comment passer des arguments de ligne de commande à un programme Node.js ?

J'ai un serveur web écrit en Node.js et je voudrais lancer avec un dossier spécifique. Je ne sais pas comment accéder aux arguments en JavaScript. J'exécute le nœud comme ceci :

$ node server.js folder

aquí server.js est mon code de serveur. L'aide de Node.js dit que c'est possible :

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

Comment accéder à ces arguments en JavaScript ? Je n'ai pas réussi à trouver cette information sur le web.

0 votes

C'est probablement une bonne idée de gérer votre configuration de manière centralisée en utilisant quelque chose comme nconf github.com/flatiron/nconf Il vous aide à travailler avec des fichiers de configuration, des variables d'environnement, des arguments de ligne de commande.

0 votes

Et voici configuration de l'intervention mon propre, minimal, interface en lecture seule pour nconf.

3286voto

MooGoo Points 11094

Méthode standard (pas de bibliothèque)

Les arguments sont stockés dans process.argv

Voici la documentation de node sur la gestion des arguments de ligne de commande :

process.argv est un tableau contenant les arguments de la ligne de commande. Le premier élément sera 'node', le deuxième élément sera le nom du fichier JavaScript. Les éléments suivants seront les éventuels arguments de ligne de commande supplémentaires.

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

Cela va générer :

$ 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

13 votes

Que dois-je taper dans l'invite de commande pour exécuter un script node.js avec des arguments en ligne de commande ?

11 votes

UPDATE : J'ai trouvé la réponse à la question ci-dessus. stackoverflow.com/questions/12925802/

3 votes

Minimaliste est un excellent et simple analyseur d'arguments

769voto

Mauvis Ledford Points 12424

Pour normaliser les arguments comme une fonction javascript normale recevrait, je fais ceci dans mon shell node.js scripts :

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

Notez que la première arg est généralement le chemin vers nodejs, et la seconde arg est l'emplacement du script que vous exécutez.

6 votes

Merci Jaseem. J'aimerais bien voir où c'est écrit dans les futures spécifications. Cela casserait tellement de bibliothèques js...

0 votes

scripttheweb.com/js/ref/javascript-mots réservés Lis la dernière ligne. En mode strict, votre code est cassé.

3 votes

Le mode strict est un contexte de fonctionnement totalement optionnel et non une nouvelle version du langage. J'écris du code JavaScript pour des sites de production depuis très longtemps et je n'ai jamais rencontré de problème à ce sujet. Mon code ne sera jamais cassé un jour à cause d'un changement majeur dans JavaScript - c'est le web ouvert où nous rendons les choses rétrocompatibles dès le départ. C'est pourquoi mon site Geocities a toujours l'air aussi cool aujourd'hui. Pour moi, il s'agit presque d'un prosthelytisme de salon. Cependant, je suis d'accord pour dire que si vous utilisez Strict, changez le nom. Pardonnez-moi car je suis plus pour le simple que pour le "correct".

422voto

real_ate Points 581

L'actualité droite La réponse à cette question est d'utiliser le minimaliste bibliothèque. Nous avions l'habitude d'utiliser optimiste des nœuds mais elle a depuis été dépréciée.

Voici un exemple d'utilisation tiré directement de la documentation minimaliste :

var argv = require('minimist')(process.argv.slice(2));
console.dir(argv);

-

$ node example/parse.js -a beep -b boop
{ _: [], a: 'beep', b: 'boop' }

-

$ node example/parse.js -x 3 -y 4 -n5 -abc --beep=boop foo bar baz
{ _: [ 'foo', 'bar', 'baz' ],
  x: 3,
  y: 4,
  n: 5,
  a: true,
  b: true,
  c: true,
  beep: 'boop' }

41 votes

En fait, cette solution est plus utile pour le développement d'un outil en ligne de commande avec plus de drapeaux et d'arguments, et devrait être plus votée.

2 votes

Imo, c'est une alternative plus simple à npmjs.com/package/command-line-args

5 votes

@JKABC Je n'appellerais pas cela la réponse la plus correcte, car le PO demande juste d'accéder à des informations triviales de ligne de commande. Mais je suis d'accord pour dire que minimist et command-line-args sont très utiles si vous envisagez d'étendre votre CLI.

127voto

gor Points 6313

Optimiste (node-optimist)

Vérifiez bibliothèque optimiste c'est bien mieux que d'analyser manuellement les options de la ligne de commande.

Mise à jour

Optimist est déprécié. Essayez yargs qui est une fourche active de l'optimiste.

18 votes

+1 pour le lien. Il existe une liste assez longue d'analyseurs d'options de ligne de commande à l'adresse suivante github.com/joyent/node/wiki/modules#wiki-parsers-commandline

7 votes

Minimaliste est un autre successeur de l'optimiste maintenant déprécié. C'est "les tripes de l'analyseur d'arguments d'optimist sans toutes les décorations fantaisistes". 23 millions de téléchargements au cours du dernier mois (en date de 12/2015).

84voto

balupton Points 17805

Commander.js

Il est idéal pour définir vos options, actions et arguments. Il génère également les pages d'aide pour vous.

Rapidement

Il fonctionne très bien pour obtenir des données de l'utilisateur, si vous aimez l'approche par rappel.

Co-Prompt

Cela fonctionne très bien pour obtenir des informations de la part de l'utilisateur, si vous aimez l'approche du générateur.

27 votes

@Evan Carroll : ne modifiez pas ma réponse pour promouvoir une bibliothèque que je n'utilise pas. stackoverflow.com/posts/7483600/revisions notamment en raison d'une fonctionnalité manquante que vous recherchez, de telles opinions devraient être conservées pour des commentaires ou des demandes de pull auprès des auteurs du module, et non pour des modifications des réponses d'autres personnes.

0 votes

Commander.js m'a vraiment aidé. D'autres bibliothèques ne fonctionnent pas avec le compilateur Nexe, mais celle-ci fait l'affaire. Si vous voulez obtenir des arguments en utilisant nexe, assurez-vous de passer -f au compilateur nexe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X