Normalement, dans Gulp, les tâches ressemblent à ceci:
gulp.task('my-task', function() {
return gulp.src(options.SCSS_SOURCE)
.pipe(sass({style:'nested'}))
.pipe(autoprefixer('last 10 version'))
.pipe(concat('style.css'))
.pipe(gulp.dest(options.SCSS_DEST));
});
Est-il possible de passer un drapeau de ligne de commande à gulp (ce n'est pas une tâche) et de lui faire exécuter des tâches conditionnellement sur cette base? Par exemple
$ gulp my-task -a 1
Et puis dans mon gulpfile.js:
gulp.task('my-task', function() {
if (a == 1) {
var source = options.SCSS_SOURCE;
} else {
var source = options.OTHER_SOURCE;
}
return gulp.src(source)
.pipe(sass({style:'nested'}))
.pipe(autoprefixer('last 10 version'))
.pipe(concat('style.css'))
.pipe(gulp.dest(options.SCSS_DEST));
});
javascript
node.js
gulp
asolberg
la source
la source
process.argv
pour accéder aux arguments de la ligne de commande.Réponses:
Gulp n'offre aucun type d'utilisation pour cela, mais vous pouvez utiliser l'un des nombreux analyseurs d'arguments de commande. J'aime
yargs
. Devrait être:Vous pouvez également le combiner avec
gulp-if
pour canaliser conditionnellement le flux, très utile pour la construction de dev vs prod:Et appelez avec
gulp my-js-task
ougulp my-js-task --production
.la source
npm run gulp
vous devez l'utiliser commenpm run gulp -- --production
.Éditer
gulp-util
est obsolète et devrait être évité, il est donc recommandé d'utiliser minimist à la place, qui étaitgulp-util
déjà utilisé.J'ai donc changé certaines lignes de mon gulpfile pour les supprimer
gulp-util
:Original
Dans mon projet, j'utilise le drapeau suivant:
Gulp propose un objet
gulp.env
pour cela. Il est déconseillé dans les versions plus récentes, vous devez donc utiliser gulp-util pour cela. Les tâches ressemblent à ceci:Le paramètre d'environnement est disponible pendant toutes les sous-tâches. Je peux donc aussi utiliser ce drapeau sur la tâche de surveillance:
Et ma tâche de styles fonctionne également.
Ciao Ralf
la source
gulp.env
est obsolète , comme vous pouvez le voir dans le message du journal de la console lors de son exécution. Ils vous demandent d'utiliser votre propre analyseur et suggèrentyargs
ouminimist
.util.env.theme ? util.env.theme : 'main'
àutil.env.theme || 'main'
. Quoi qu'il en soit +1.gulp-util
utilise laminimist
bibliothèque pour l'analyse des arguments de la ligne de commande. Donc, si vous utilisezgulp-util
, vous n'avez pas besoin d'une bibliothèque supplémentaire à cet effet. Document: github.com/substack/minimistVoici une recette rapide que j'ai trouvée:
gulpfile.js
CLI
Ref d'origine (plus disponible): https://github.com/gulpjs/gulp/blob/master/docs/recipes/pass-params-from-cli.md
Alternative avec minimist
De la référence mise à jour: https://github.com/gulpjs/gulp/blob/master/docs/recipes/pass-arguments-from-cli.md
gulpfile.js
CLI
la source
Il existe un moyen très simple de faire des
on/off
drapeaux sans analyser les arguments.gulpfile.js
est juste un fichier exécuté comme un autre, vous pouvez donc faire:Et utilisez quelque chose comme
gulp-if
pour exécuter conditionnellement une étapeL'exécution
gulp build
produira un joli html, tandis quegulp production build
le réduira.la source
gulp.task('mytask', function() { if (flags.myflag ) { flaggedtask } else { unflaggedask } });
flags
.Si vous avez des arguments stricts (ordonnés!), Vous pouvez les obtenir simplement en les vérifiant
process.argv
.L'exécuter:
gulp --env production
... cependant, je pense que c'est trop strict et pas à l'épreuve des balles! Donc, j'ai tripoté un peu ... et je me suis retrouvé avec cette fonction utilitaire:
Il mange un nom d'argument et le recherchera dans
process.argv
. Si rien n'est trouvé, ça crachenull
. Sinon, s'il n'y a pas d'argument suivant ou si l'argument suivant est une commande et qu'aucune valeur (nous différons avec un tiret) n'esttrue
renvoyée. (C'est parce que la clé existe, mais il n'y a tout simplement aucune valeur). Si tous les cas précédents échouent, la valeur d'argument suivante est celle que nous obtenons.> gulp watch --foo --bar 1337 -boom "Foo isn't equal to bar."
Ok, assez pour l'instant ... Voici un exemple simple utilisant gulp :
Exécuter
gulp --env production
la source
if (args[0] === '--env' && args[1] === 'production');
:, au moins dans gulp 3.8.11J'ai construit un plugin pour injecter des paramètres de la ligne de commande dans le rappel de tâche.
https://github.com/stoeffel/gulp-param
Si quelqu'un trouve un bogue ou a une amélioration, je suis heureux de fusionner les PR.
la source
Et si vous utilisez tapuscript (
gulpfile.ts
), faites-le pouryargs
(en vous appuyant sur l'excellente réponse de @Caio Cunha https://stackoverflow.com/a/23038290/1019307 et d'autres commentaires ci-dessus):Installer
.ts
des dossiersAjoutez ceci aux fichiers .ts:
Cela doit être fait dans chaque fichier .ts individuellement (même les
tools/tasks/project
fichiers qui sont importés dans legulpfile.ts/js
).Courir
Ou sous
npm
passer l'argument à gorgée:la source
Passer des arguments depuis la ligne de commande
Exécutez ensuite gulp avec:
La source
la source
CLI
gulp production
appelle ma tâche de production et définit un indicateur pour toutes les conditions.la source
Nous voulions passer un fichier de configuration différent pour différents environnements - un pour la production , dev et test . Voici le code du fichier gulp:
Voici le code du fichier app.js:
Et puis pour le faire avaler
--env=testing
la source
Cela fait un certain temps que cette question n'a pas été publiée, mais peut-être que cela aidera quelqu'un.
J'utilise GULP CLI 2.0.1 (installé globalement) et GULP 4.0.0 (installé localement) voici comment vous le faites sans plugin supplémentaire. Je pense que le code est assez explicite.
Et exécutez à partir de la console:
Ensuite, exécutez et voyez les différences:
la source