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 un nœud comme ceci:
$ node server.js folder
voici server.js
mon code serveur. L'aide de Node.js indique que c'est possible:
$ node -h
Usage: node [options] script.js [arguments]
Comment accéder à ces arguments en JavaScript? D'une manière ou d'une autre, je n'ai pas pu trouver ces informations sur le Web.
process.argv[n]
oùn
est l'indice de base zéronode [options] [ -e script | script.js ] [arguments]
ounode debug script.js [arguments]
. par exemple:node --harmony script.js balala
ounode --no-deprecation --enable-ssl2 script.js balala
, nous pouvons utiliser process.execArgv avec process.argvPour normaliser les arguments comme une fonction javascript régulière recevrait, je fais cela dans mes scripts shell node.js:
Notez que le premier argument est généralement le chemin d'accès à nodejs, et le deuxième argument est l'emplacement du script que vous exécutez.
la source
execArgv
sont pas enargv
sorte que le 2 est suffisantprocess.argv.splice(process.execArgv.length + 2)
: pour une commandenode --harmony script.js --version
, leprocess.argv
est['/usr/local/bin/node', 'script.js', '--version']
. Les drapeaux nenode
sont PAS inclus dansprocess.argv
!La bonne réponse à jour pour cela est d'utiliser la bibliothèque minimist . Auparavant, nous utilisions node-optimist mais il est depuis déconseillé.
Voici un exemple d'utilisation, tiré directement de la documentation minimiste:
-
-
la source
Réponse 2018 basée sur les tendances actuelles dans la nature:
Analyse d'argument javascript vanilla:
Cela renvoie:
Documents officiels
Packages NPM les plus utilisés pour l'analyse des arguments:
Minimist : pour une analyse minimale des arguments.
Commander.js : module le plus adopté pour l'analyse des arguments.
Meow : Alternative plus légère à Commander.js
Yargs : analyse d'arguments plus sophistiquée (lourde).
Vorpal.js : applications de ligne de commande matures / interactives avec analyse des arguments.
la source
Optimiste (node-optimist)
Consultez la bibliothèque optimiste , c'est beaucoup mieux que d'analyser les options de ligne de commande à la main.
Mise à jour
Optimist est obsolète. Essayez yargs qui est une fourchette active d'optimiste.
la source
Plusieurs bonnes réponses ici, mais tout cela semble très complexe. Ceci est très similaire à la façon dont les scripts bash accèdent aux valeurs des arguments et il est déjà fourni en standard avec node.js comme l'a souligné MooGoo. (Juste pour le rendre compréhensible pour quelqu'un qui est nouveau sur node.js)
Exemple:
la source
Commander.js
Fonctionne très bien pour définir vos options, actions et arguments. Il génère également les pages d'aide pour vous.
Rapidement
Fonctionne très bien pour obtenir des commentaires de l'utilisateur, si vous aimez l'approche de rappel.
Co-invite
Fonctionne très bien pour obtenir des commentaires de l'utilisateur, si vous aimez l'approche du générateur.
la source
Aucune bibliothèque avec des drapeaux formatés en un objet simple
Exemples
Facile
contribution
production
Monde réel
contribution
production
la source
= longArg[1]
vous pourriez écrire= longArg.length > 1 ? longArg[1] : true;
Cela vous permettrait de passer ce type d'argument:node config/build.js --flag1 --flag2
Bibliothèque Stdio
La façon la plus simple d'analyser les arguments de ligne de commande dans NodeJS est d'utiliser le module stdio . Inspiré par l'
getopt
utilitaire UNIX , il est aussi trivial que suit:Si vous exécutez le code précédent avec cette commande:
L'
ops
objet sera alors le suivant:Vous pouvez donc l'utiliser comme vous le souhaitez. Par exemple:
Les options groupées sont également prises en charge, vous pouvez donc écrire à la
-om
place de-o -m
.En outre,
stdio
peut générer automatiquement une sortie d'aide / utilisation. Si vous appelez,ops.printHelp()
vous obtiendrez ce qui suit:Le message précédent s'affiche également si aucune option obligatoire n'est indiquée (précédée du message d'erreur) ou si elle est mal spécifiée (par exemple, si vous spécifiez un seul argument pour une option et qu'il en faut 2).
Vous pouvez installer le module stdio à l' aide de NPM :
la source
Si votre script s'appelle myScript.js et que vous souhaitez passer le prénom et le nom, 'Sean Worthington', comme arguments comme ci-dessous:
Ensuite, dans votre script, vous écrivez:
la source
la ligne de commande-args vaut le détour!
Vous pouvez définir des options en utilisant les principales normes de notation (en savoir plus ). Ces commandes sont toutes équivalentes, définissant les mêmes valeurs:
Pour accéder aux valeurs, créez d'abord une liste de définitions d'options décrivant les options acceptées par votre application. La
type
propriété est une fonction de définition (la valeur fournie est transmise par ce biais), vous donnant un contrôle total sur la valeur reçue.Ensuite, analysez les options à l'aide de commandLineArgs () :
options
ressemble maintenant à ceci:Utilisation avancée
Outre l'utilisation typique ci-dessus, vous pouvez configurer des arguments de ligne de commande pour accepter des formes de syntaxe plus avancées.
Syntaxe basée sur les commandes (style git) sous la forme:
Par exemple.
Syntaxe des commandes et sous-commandes (style docker) sous la forme:
Par exemple.
Génération de guide d'utilisation
Un guide d'utilisation (généralement imprimé lorsqu'il
--help
est défini) peut être généré à l'aide de l'utilisation de la ligne de commande . Consultez les exemples ci-dessous et lisez la documentation pour savoir comment les créer.Un exemple de guide d'utilisation typique.
Le guide d'utilisation de polymère-cli est un bon exemple réel.
Lectures complémentaires
Il y a beaucoup plus à apprendre, veuillez consulter le wiki pour des exemples et de la documentation.
la source
partial
etstopAtFirstUnknown
. Voir les documents .Il y a une application pour ça. Eh bien, module. Eh bien, plus d'un, probablement des centaines.
Yargs est l'un des plus amusants, ses documents sont cool à lire.
Voici un exemple de la page github / npm:
La sortie est là (elle lit les options avec des tirets, etc., court et long, numérique, etc.).
la source
Voici ma solution 0-dep pour les arguments nommés:
Exemple:
Remarque: Naturellement, cela échouera lorsque l'argument contient un
=
. Ce n'est que pour une utilisation très simple.la source
C'est probablement une bonne idée de gérer votre configuration de manière centralisée en utilisant quelque chose comme nconf https://github.com/flatiron/nconf
Il vous aide à travailler avec des fichiers de configuration, des variables d'environnement, des arguments de ligne de commande.
la source
sans librairies: utilisation de Array.prototype.reduce ()
pour cette commande
node index.js count=2 print debug=false msg=hi
aussi,
nous pouvons changer
par (beaucoup plus longtemps)
pour analyser automatiquement Boolean & Number
la source
count
et lesc
options de ligne de commande (c
comme un alias / shorcut pourcount
)?Passer, analyser des arguments est un processus facile. Node vous fournit la propriété process.argv, qui est un tableau de chaînes, qui sont les arguments qui ont été utilisés lors de l'appel de Node. La première entrée du tableau est l'exécutable Node et la deuxième entrée est le nom de votre script.
Si vous exécutez un script avec les atguments ci-dessous
Fichier: args.js
Vous obtiendrez un tableau comme
la source
Si vous souhaitez exécuter quelque chose comme ceci:
-
Ou quelque chose comme:
-
la source
proj.js
Terminal:
Résultat:
Explication:
0
: Le répertoire de node.exe dans votre usinage (C: \ Program Files \ nodejs \ node.exe ')1
: Le répertoire de votre fichier projet. (proj.js)2
: Votre premier argument au nœud (arg1)3
: Votre deuxième argument au nœud (arg2)4
: Votre troisième argument au nœud (arg3)vos arguments réels commencent l'
2nd
index de forme duargv
tableau, c'est-à-direprocess.argv[2]
.la source
Vous pouvez accéder aux arguments de ligne de commande à l'aide de
system.args
. Et j'utilise la solution ci-dessous pour analyser les arguments dans un objet, afin que je puisse obtenir celui que je veux par son nom.maintenant, vous n'avez pas besoin de connaître l'index de l'argument. l'utiliser comme
args.whatever
la source
map
propriété n'est pas définie.Vous pouvez analyser tous les arguments et vérifier s'ils existent.
fichier: parse-cli-arguments.js:
Que juste faire:
la source
Sans bibliothèques
Si vous voulez le faire dans vanilla JS / ES6, vous pouvez utiliser la solution suivante
travaillé uniquement dans NodeJS> 6
Et cette commande
produira le résultat suivant
ps Veuillez corriger le code dans la carte et réduire la fonction si vous trouvez une solution plus élégante, merci;)
la source
let args = process.argv.slice(2).reduce((acc, arg) => { let [k, v] = arg.split('=') acc[k] = v return acc }, {})
Bien que les réponses ci-dessus soient parfaites et que quelqu'un ait déjà suggéré des yargs, l'utilisation du package est vraiment facile. C'est un joli package qui facilite la transmission d'arguments à la ligne de commande.
Veuillez visiter https://yargs.js.org/ pour plus d'informations.
la source
Passer des arguments est facile, et les recevoir est simplement une question de lecture du tableau process.argv Node rend accessible de partout, fondamentalement. Mais vous êtes sûr de vouloir les lire sous forme de paires clé / valeur, vous aurez donc besoin d'un morceau à script pour l'interpréter.
Joseph Merdrignac en a posté un beau en utilisant réduire, mais il s'est appuyé sur une
key=value
syntaxe au lieu de-k value
et--key value
. Je l'ai réécrit beaucoup plus laid et plus long pour utiliser ce deuxième standard, et je le posterai comme réponse car il ne rentrerait pas dans un commentaire. Mais cela fait le travail.Avec ce code, une commande
node script.js alpha beta -charlie delta --echo foxtrot
vous donnerait l'objet suivantla source
La manière la plus simple de récupérer des arguments dans Node.js est via le tableau process.argv. Il s'agit d'un objet global que vous pouvez utiliser sans importer de bibliothèques supplémentaires pour l'utiliser. Il vous suffit de passer des arguments à une application Node.js, comme nous l'avons montré précédemment, et ces arguments sont accessibles dans l'application via le tableau process.argv.
Le premier élément du tableau process.argv sera toujours un chemin de système de fichiers pointant vers l'exécutable du nœud. Le deuxième élément est le nom du fichier JavaScript en cours d'exécution. Et le troisième élément est le premier argument réellement passé par l'utilisateur.
Tout ce que ce script fait est de parcourir le tableau process.argv et affiche les index, ainsi que les éléments stockés dans ces index. Il est très utile pour le débogage si vous vous demandez quels arguments vous recevez et dans quel ordre.
Vous pouvez également utiliser des bibliothèques comme yargs pour travailler avec des arguments commnadline.
la source
Solution TypeScript sans bibliothèque:
Contribution:
ts-node index.js -p param --parameter parameter
Production:
{ p: 'param ', parameter: 'parameter' }
la source
process.argv
est votre ami, la capture des arguments de ligne de commande est prise en charge de manière native dans Node JS. Voir l'exemple ci-dessous ::la source
comme indiqué dans les documents du nœud. La propriété process.argv renvoie un tableau contenant les arguments de ligne de commande transmis lors du lancement du processus Node.js.
Par exemple, en supposant le script suivant pour process-args.js:
Lancement du processus Node.js en tant que:
Générerait la sortie:
la source
La plupart des gens ont donné de bonnes réponses. Je voudrais également contribuer quelque chose ici. Je fournis la réponse en utilisant la
lodash
bibliothèque pour parcourir tous les arguments de ligne de commande que nous passons lors du démarrage de l'application:Pour exécuter le code ci-dessus, exécutez simplement les commandes suivantes:
Le résultat sera:
la source
La meilleure façon de passer des arguments de ligne de commande à un programme Node.js est d'utiliser une interface de ligne de commande (CLI)
Il existe un module astucieux npm appelé nodejs-cli que vous pouvez utiliser.
Si vous voulez en créer un sans dépendances, j'en ai un sur mon Github si vous voulez le vérifier, c'est en fait assez simple et facile à utiliser, cliquez ici .
la source
Solution sans dépendances de style ES6:
la source