Points de base
gulpfile.js
process.argv
pour créer un objet contenant des valeurs de paramètres. gulpfile.js
La simplicité de Gulp est l'une de ses caractéristiques les plus attrayantes. Vous pouvez écrire des fonctions de tâche dans
: gulpfile.js
gulp.task('doSomething', () => { // 执行某些操作 });
pour exécuter la tâche de la ligne de commande. Les tâches peuvent être aussi simples ou complexes que vous le souhaitez et peuvent contenir d'autres sous-tâches. gulp doSomething
gulp doSomething --option1 "my string" --option2 123 --option3
est égal à option3
) true
et ne peuvent pas être vérifiés ou utilisés dans vos fonctions de tâche. gulpfile.js
Vous pouvez également analyser les variables d'environnement, telles que
. Par exemple, vous pouvez vérifier si la valeur est définie sur la production ou similaire sur le serveur en direct. Ce paramètre peut ensuite être utilisé pour déterminer s'il faut réduire le fichier source JavaScript pendant l'exécution de la tâche, par exemple: NODE_ENV
// 这是开发版本吗? const devBuild = ((process.env.NODE_ENV || 'development').trim().toLowerCase() === 'development'); // Gulp 插件 const stripdebug = require('gulp-strip-debug'); // 删除调试代码 const uglify = require('gulp-uglify'); // 压缩 // 构建 JavaScript gulp.task('js', () => { let jsbuild = gulp.src('src/js/*') .pipe(some-plugin1()) .pipe(some-plugin2()); // 生产服务器任务 if (!devBuild) { jsbuild = jsbuild .pipe(stripdebug()) .pipe(uglify()); } return jsbuild.pipe(gulp.dest('build/js/')); });
sur Linux / Mac, ou gulp js
sur Windows avant d'exécuter la tâche export NODE_ENV=production
. Il supprime ensuite les instructions NODE_ENV=production
et console.log
avant de compresser le fichier JavaScript. debugger
gulp.task('doSomething', () => { // 执行某些操作 });
Run gulp doSomething1
La première tâche sera effectuée. L'exécution gulp doSomething2
effectuera les deux tâches dans l'ordre, car doSomething1
est définie comme une dépendance dans un tableau facultatif après le nom de la tâche.
Évitez d'utiliser des paramètres lorsqu'il existe de meilleures alternatives. Votre paramètre --option1
peut devenir une option de ligne de commande valide dans la prochaine version Gulp avec des conséquences négatives.
En d'autres termes, il y a toujours des circonstances particulières ...
. Considérez la tâche suivante qui utilise le plugin vinyl-FTP pour déployer des fichiers sur le serveur: gulpfile.js
gulp doSomething --option1 "my string" --option2 123 --option3
Il y a plusieurs problèmes avec cette méthode:
gulp deploy
gulpfile.js
3.
Imaginez une tâche complexe impliquant des dizaines de plugins. S'il n'est pas pratique de le diviser en plusieurs sous-tâches, il peut devenir difficile de modifier Vous pouvez penser à des circonstances plus spéciales (les commentaires sont les bienvenus!) gulpfile.js
La propriété
dans
process.argv
gulp task1 --a 123 --b "my string" --c
Ce tableau peut être analysé dans
// 这是开发版本吗? const devBuild = ((process.env.NODE_ENV || 'development').trim().toLowerCase() === 'development'); // Gulp 插件 const stripdebug = require('gulp-strip-debug'); // 删除调试代码 const uglify = require('gulp-uglify'); // 压缩 // 构建 JavaScript gulp.task('js', () => { let jsbuild = gulp.src('src/js/*') .pipe(some-plugin1()) .pipe(some-plugin2()); // 生产服务器任务 if (!devBuild) { jsbuild = jsbuild .pipe(stripdebug()) .pipe(uglify()); } return jsbuild.pipe(gulp.dest('build/js/')); });
gulpfile.js
arg
Cette fonction boucle via le tableau
gulp.task('doSomething1', () => { return gulp.src('src/*') .pipe(some-plugin1()) .pipe(gulp.dest('build/')); }); // 首先运行 doSomething1 gulp.task('doSomething2', ['doSomething1'], () => { // 执行其他操作 return gulp.src('src/*') .pipe(some-plugin2()) .pipe(gulp.dest('build/')); });
. Lorsqu'il rencontre une valeur sans tableau de bord, il définit la valeur nommée précédente (si disponible) sur la chaîne. process.argv
Lorsque nous exécutons gulp task1 --a 123 --b "my string" --c
, l'objet arg
est défini sur:
gulp.task('doSomething', () => { // 执行某些操作 });
Par conséquent, nous pouvons vérifier et utiliser ces valeurs selon les besoins.
Supposons que arg
est défini en haut de gulpfile.js
, nous pouvons réécrire notre tâche de déploiement FTP afin que nous puissions passer:
--user
ou --u
Paramètre --password
ou --p
Paramètre gulp doSomething --option1 "my string" --option2 123 --option3
Le déploiement ne se produit que lorsque nous exécutons la tâche avec les informations d'identification FTP appropriées, par exemple:
// 这是开发版本吗? const devBuild = ((process.env.NODE_ENV || 'development').trim().toLowerCase() === 'development'); // Gulp 插件 const stripdebug = require('gulp-strip-debug'); // 删除调试代码 const uglify = require('gulp-uglify'); // 压缩 // 构建 JavaScript gulp.task('js', () => { let jsbuild = gulp.src('src/js/*') .pipe(some-plugin1()) .pipe(some-plugin2()); // 生产服务器任务 if (!devBuild) { jsbuild = jsbuild .pipe(stripdebug()) .pipe(uglify()); } return jsbuild.pipe(gulp.dest('build/js/')); });
Comme nous l'avons vu, en utilisant une petite quantité de code personnalisé, les paramètres peuvent être transmis aux tâches Gulp. Bien que votre tâche ne nécessite généralement pas de paramètres de réception, nous voyons qu'il est très utile dans certains cas. C'est certainement une bonne technique que vous devriez maîtriser dans votre boîte à outils.
Le code d'analyse des paramètres peut être utilisé dans n'importe quel processus de ligne de commande Node.js. Cependant, si vous en avez besoin dans un projet non GULP, le module Commander offre des fonctionnalités plus puissantes.
J'espère que vous trouverez cela utile. Bien sûr, ce n'est pas parce que vous pouvez transmettre des paramètres aux tâches Gulp. Si vous trouvez d'autres cas d'utilisation pour cette approche, faites-le moi savoir dans les commentaires.
Cet article a été examiné par Tim Severien. Merci à tous les pair de sitepoint pour avoir obtenu le contenu de sitepoint à son meilleur!Les questions fréquemment posées sur le passage des paramètres aux tâches Gulp (FAQ)
process.argv
Puis-je utiliser des packages pour gérer les paramètres de ligne de commande dans Gulp? process.argv
Comment utiliser les drapeaux dans les tâches Gulp? yargs.argv
Oui, vous pouvez transmettre plusieurs paramètres pour gloquer les tâches à partir de la ligne de commande. Ces paramètres sont ajoutés au tableau process.argv
dans l'ordre où ils sont passés. Vous pouvez accéder à ces paramètres dans la tâche Gulp en indexant le tableau process.argv
.
peut utiliser les paramètres de ligne de commande dans les tâches Gulp en accédant à process.argv
des tableaux ou des packages tels que les yargs ou minimistes. Vous pouvez utiliser ces paramètres pour contrôler le comportement des tâches Gulp. Par exemple, vous pouvez utiliser l'indicateur "Production" pour compresser le code dans une tâche de construction.
Oui, vous pouvez utiliser des variables d'environnement dans les tâches Gulp. Ces variables sont accessibles via l'objet process.env
. Ceci est utile si vous souhaitez transmettre des informations sensibles telles que les clés d'API pour gloquer les tâches sans les exposer dans les paramètres de ligne de commande.
Le .on('error')
peut être utilisé pour gérer les erreurs dans les tâches de Gulp. Cette méthode prend une fonction de rappel qui sera appelée lorsqu'une erreur se produit. Dans cette fonction de rappel, vous pouvez enregistrer les erreurs et mettre fin à la tâche pour empêcher Gulp de se bloquer.
Oui, vous pouvez exécuter plusieurs tâches Gulp dans l'ordre de l'utilisation de la méthode gulp.series()
. Cette méthode prend un tableau de noms de tâches et les exécute dans l'ordre défini.
Oui, vous pouvez exécuter plusieurs tâches Gulp en parallèle en utilisant la méthode gulp.parallel()
. Cette méthode prend un tableau de noms de tâches et exécute toutes les tâches en même temps.
La tâche de Gulp par défaut peut être définie à l'aide de la méthode gulp.task()
en utilisant "par défaut" comme nom de tâche. Cette tâche est exécutée lorsque vous exécutez la commande gulp sans aucun nom de tâche. Vous pouvez utiliser cette tâche pour exécuter une série d'autres tâches par défaut.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!