Passer le Paramètre d'Avaler de la Tâche
Normalement, nous pouvons lancer gulp tâche à partir de la console via quelque chose comme gulp mytask
. Est-il de toute façon que je peux la passer en paramètre à la gulp tâche? Si possible, merci de montrer un exemple de comment cela peut être fait.
Vous devez vous connecter pour publier un commentaire.
C'est une fonctionnalité de programmes ne peut pas rester sans. Vous pouvez essayer de yargs.
Vous pouvez l'utiliser comme ceci:
Dans le code, par exemple:
Pour votre compréhension:
Espère que vous pouvez prendre à partir de là.
Il y a un autre plugin que vous pouvez utiliser, minimist. Il y a un autre post où il y a de bons exemples pour les deux yargs et minimist: (Est-il possible de passer d'un drapeau à Avaler pour l'exécution de tâches de différentes façons?)
(argv.production === undefined) ? false : true;
est équivalent àargv.production !== undefined
.Si vous voulez éviter l'ajout de dépendances, j'ai trouvé du nœud
process.argv
être utile:Donc la suivante:
doit afficher:
Si vous êtes sûr que le paramètre souhaité est dans la bonne position, puis les drapeaux ne sont pas nécessaires.** Suffit d'utiliser (dans ce cas):
MAIS: comme l'option ne peut pas être, ou peut-être dans une autre position, je pense qu'une meilleur idée serait quelque chose comme:
De cette façon, vous pouvez gérer les variations de multiples options, comme:
** Edit: vrai pour le nœud de scripts, mais gulp interprète rien sans un chef de file "--" comme un autre nom de la tâche. Donc, en utilisant
gulp mytask 123
va échouer, car gulp ne pouvez pas trouver une tâche appelée '123'.gulp myTask --production
résultats dansprocess.argv
égal à[pathToNode, pathToGulp, 'myTask', '--production']
npm run build -- --production
avec le mnp script de build comme"scripts": { "build": "gulp build" }
Le passage d'un paramètre gulp peut signifier plusieurs choses:
Voici une approche de passer des paramètres à partir des principaux gulpfile pour une gorgée de la tâche. Par le déplacement de la tâche qui doit être le paramètre à sa propre module et en l'enveloppant dans une fonction (donc un paramètre peut être passé).:
Cette fonction peut être utile si vous avez beaucoup de gulp tâches et voulez passer un peu de pratique de l'environnement de configs. Je ne sais pas si ça peut fonctionner entre une tâche et une autre.
Il y a un officiel gulp recette de cette aide minimist.
https://github.com/gulpjs/gulp/blob/master/docs/recipes/pass-arguments-from-cli.md
Les bases sont à l'aide de minimist pour séparer la cli d'arguments et de les combiner avec connu options:
Qui permettrait d'analyser quelque chose comme
Plus complète de l'info dans la recette.
Si vous souhaitez utiliser l'environnement params et d'autres utils ainsi comme le journal, vous pouvez utiliser gulp-util
@Ethan réponse serait complètement le travail. De mon expérience, le plus de nœud façon est d'utiliser des variables d'environnement. C'est un moyen standard pour configurer les programmes déployés sur des plates-formes d'hébergement (par exemple, Heroku ou Dokku).
Pour passer le paramètre à partir de la ligne de commande, procédez comme ceci:
De développement:
gulp dev
De Production:
NODE_ENV=production gulp dev
La syntaxe est différente, mais très Unix, et il est compatible avec Heroku, Dokku, etc.
Vous pouvez accéder à la variable dans votre code à
process.env.NODE_ENV
MYAPP=something_else gulp dev
serait mis
process.env.MYAPP === 'something_else'
Cette réponse peut vous donner quelques autres idées.
Voici mon exemple de la façon dont je l'utilise. Pour le css/less tâche. Peut être appliquée pour tous.
Voici une autre manière sans modules supplémentaires:
J'ai besoin de deviner l'environnement à partir du nom de la tâche, j'ai un "dev' et une 'prod' de tâche.
Quand je lance
gulp prod
il devrait être mis à l'environnement de prod.Quand je lance
gulp dev
ou quoi que ce soit d'autre, il doit être mis à l'environnement de dev.Pour qui je viens de vérifier la tâche en cours d'exécution nom:
Si vous utilisez gulp avec yargs, avis la suivante:
Si vous avez une tâche "client" et wan pas à utiliser yargs construire en de vérification des paramètres pour les commandes requises:
.command("customer <place> [language]","Create a customer directory")
appeler avec:
yargs sera allway jeter une erreur, qu'il n'y a pas assez de commandes a été attribué à l'appel, même si vous avez!! —
Essayer et d'ajouter seulement un chiffre à la commande (pour qu'il ne correspond pas à la gulp-nom de la tâche)... et il va fonctionner:
.command("customer1 <place> [language]","Create a customer directory")
C'est à cause de gulp semble déclencher la tâche, avant de yargs est capable de vérifier ce Paramètre requis. Il m'a coûté surveral heures pour comprendre cela.
Espère que cela vous aide..
Je sais je suis en retard pour répondre à cette question, mais je voudrais ajouter quelque chose à la réponse de @Ethan, le plus voté et accepté de répondre.
Nous pouvons utiliser
yargs
pour obtenir le paramètre de ligne de commande et avec qui nous pouvons également ajouter nos propres alias pour certains paramètres comme suivre.Merci de consulter ce lien pour plus de détails.
https://github.com/yargs/yargs/blob/HEAD/docs/api.md
Suivant est d'utiliser des alias comme par donnée dans la documentation de
yargs
. On peut aussi trouver plusyargs
fonction et pourrez faire de la ligne de commande en passant expérience encore meilleure.Il suffit de charger dans un nouvel objet sur le processus ..
process.gulp = {}
et ont la tâche de regarder là-bas.