Normalement, nous pouvons exécuter la tâche gulp à partir de la console via quelque chose comme gulp mytask
. Existe-t-il de toute façon que je peux passer un paramètre à une tâche de gorgée? Si possible, veuillez montrer par exemple comment cela peut être fait.
194
Réponses:
C'est une fonctionnalité dont les programmes ne peuvent pas se passer. Vous pouvez essayer des yargs .
Vous pouvez l'utiliser comme ceci:
Dans le code, par exemple:
Pour votre compréhension:
J'espère que vous pourrez le prendre d'ici.
Il existe un autre plugin que vous pouvez utiliser, minimist. Il y a un autre article où il y a de bons exemples pour les yargs et les minimistes: ( Est-il possible de passer un drapeau à Gulp pour qu'il exécute les tâches de différentes manières? )
la source
(argv.production === undefined) ? false : true;
est équivalent àargv.production !== undefined
.Si vous voulez éviter d'ajouter des dépendances supplémentaires, j'ai trouvé les nœuds
process.argv
utiles:Donc, ce qui suit:
devrait afficher:
Si vous êtes sûr que le paramètre souhaité est dans la bonne position, les drapeaux ne sont pas nécessaires. ** Utilisez simplement (dans ce cas):
MAIS: comme l'option peut ne pas être définie, ou peut être dans une position différente, je pense qu'une meilleure idée serait quelque chose comme:
De cette façon, vous pouvez gérer des variations dans plusieurs options, comme:
** Edit: vrai pour les scripts de noeud, mais gulp interprète n'importe quoi sans "-" en tête comme autre nom de tâche. Donc, l'utilisation
gulp mytask 123
échouera car gulp ne peut pas trouver une tâche appelée '123'.la source
gulp myTask --production
résultats sontprocess.argv
égaux à[pathToNode, pathToGulp, 'myTask', '--production']
Passer un paramètre à gulp peut signifier plusieurs choses:
Voici une approche de passage de paramètres du fichier gulp principal à une tâche gulp. En déplaçant la tâche qui a besoin du paramètre vers son propre module et en l'enveloppant dans une fonction (afin qu'un paramètre puisse être passé):
Cela peut être utile si vous avez beaucoup de tâches de gorgée et que vous souhaitez leur passer des configurations environnementales pratiques. Je ne sais pas si cela peut fonctionner entre une tâche et une autre.
la source
Il existe une recette officielle de gorgée pour cela en utilisant minimist .
https://github.com/gulpjs/gulp/blob/master/docs/recipes/pass-arguments-from-cli.md
Les bases utilisent minimist pour séparer les arguments cli et les combiner avec des options connues:
Ce qui analyserait quelque chose comme
Plus d'informations complètes dans la recette.
la source
Si vous souhaitez également utiliser des paramètres d'environnement et d'autres utilitaires tels que log, vous pouvez utiliser gulp-util
Mettre à jour
gulp-util est désormais obsolète. Vous pouvez utiliser minimist à la place.
la source
@ La réponse d'Ethan fonctionnerait complètement. D'après mon expérience, la manière la plus nœud est d'utiliser des variables d'environnement. C'est un moyen standard de configurer des programmes déployés sur des plateformes d'hébergement (par exemple Heroku ou Dokku).
Pour passer le paramètre à partir de la ligne de commande, procédez comme suit:
Développement:
gulp dev
Production:
NODE_ENV=production gulp dev
La syntaxe est différente, mais très Unix, et elle est compatible avec Heroku, Dokku, etc.
Vous pouvez accéder à la variable dans votre code à
process.env.NODE_ENV
MYAPP=something_else gulp dev
mettrait
process.env.MYAPP === 'something_else'
Cette réponse pourrait vous donner d'autres idées.
la source
Voici mon exemple d'utilisation. Pour la tâche css / less. Peut être appliqué pour tous.
la source
Voici une autre façon sans modules supplémentaires:
J'avais besoin de deviner l'environnement à partir du nom de la tâche, j'ai une tâche «dev» et une tâche «prod».
Lorsque je l'exécute,
gulp prod
il doit être défini sur environnement prod. Lorsque je coursgulp dev
ou quoi que ce soit d'autre, il doit être défini sur environnement de développement.Pour cela, je vérifie simplement le nom de la tâche en cours d'exécution:
la source
Si vous utilisez gulp avec yargs, notez ce qui suit:
Si vous avez une tâche «client» et que vous ne souhaitez pas utiliser la construction yargs dans la vérification des paramètres pour les commandes requises:
.command("customer <place> [language]","Create a customer directory")
appelez-le avec:yargs lancera toujours une erreur, qu'il n'y a pas assez de commandes assignées à l'appel, même si vous l'avez !! -
Essayez-le et ajoutez seulement un chiffre à la commande (pour la rendre différente du nom de la tâche gulp) ... et cela fonctionnera:
.command("customer1 <place> [language]","Create a customer directory")
Cela est dû au fait que gulp semble déclencher la tâche, avant que yargs ne puisse vérifier ce paramètre requis. Cela m'a coûté des heures supplémentaires pour comprendre cela.
J'espère que cela vous aide ..
la source
Je sais que je suis en retard pour répondre à cette question, mais je voudrais ajouter quelque chose à la réponse de @Ethan, la réponse la plus votée et acceptée.
Nous pouvons utiliser
yargs
pour obtenir le paramètre de ligne de commande et avec cela, nous pouvons également ajouter notre propre alias pour certains paramètres comme Follow.Veuillez consulter ce lien pour plus de détails. https://github.com/yargs/yargs/blob/HEAD/docs/api.md
Voici l'utilisation de l'alias comme indiqué dans la documentation de
yargs
. Nous pouvons également y trouver plus deyargs
fonctions et rendre l'expérience de passage de ligne de commande encore meilleure.la source
Il suffit de le charger dans un nouvel objet sur le processus ..
process.gulp = {}
et de voir la tâche là-bas.la source