通常我们可以通过gulp mytask之类的东西从控制台运行gulp任务。我是否可以将参数传递给gulp任务?如果可能,请举例说明如何做到这一点。


当前回答

如果您想使用环境参数和其他util(如log),则可以使用gulp-util

/* 
  $npm install gulp-util --save-dev
  $gulp --varName 123
*/
var util = require('gulp-util');
util.log(util.env.varName);

更新

Gulp-util现在已弃用。你可以用极简主义来代替。

var argv = require('minimist')(process.argv.slice(2));
console.dir(argv);

其他回答

如果您想使用环境参数和其他util(如log),则可以使用gulp-util

/* 
  $npm install gulp-util --save-dev
  $gulp --varName 123
*/
var util = require('gulp-util');
util.log(util.env.varName);

更新

Gulp-util现在已弃用。你可以用极简主义来代替。

var argv = require('minimist')(process.argv.slice(2));
console.dir(argv);

下面是另一种不需要额外模块的方法:

我需要从任务名称中猜测环境,我有一个“开发”任务和一个“prod”任务。

当我运行gulp prod时,它应该设置为prod环境。 当我运行gulp dev或其他任何东西时,它应该设置为开发环境。

为此,我只检查正在运行的任务名称:

devEnv = process.argv[process.argv.length-1] !== 'prod';

这是节目不可或缺的特色。你可以试试码。

npm install --save-dev yargs

你可以这样使用它:

gulp mytask --production --test 1234

在代码中,例如:

var argv = require('yargs').argv;
var isProduction = (argv.production === undefined) ? false : true;

供您理解:

> gulp watch
console.log(argv.production === undefined);  <-- true
console.log(argv.test === undefined);        <-- true

> gulp watch --production
console.log(argv.production === undefined);  <-- false
console.log(argv.production);                <-- true
console.log(argv.test === undefined);        <-- true
console.log(argv.test);                      <-- undefined

> gulp watch --production --test 1234
console.log(argv.production === undefined);  <-- false
console.log(argv.production);                <-- true
console.log(argv.test === undefined);        <-- false
console.log(argv.test);                      <-- 1234

希望你能接手。

还有一个你可以使用的插件,极简主义。还有另一篇文章,为yargs和minimist提供了很好的例子:(有没有可能将一个标志传递给Gulp,让它以不同的方式运行任务?)

只需要在进程中将它加载到一个新对象中。的过程。Gulp ={}并让任务查看那里。

有一个官方的极简主义的吞咽食谱。

https://github.com/gulpjs/gulp/blob/master/docs/recipes/pass-arguments-from-cli.md

基本方法是使用minimist分离cli参数,并将它们与已知选项结合起来:

var options = minimist(process.argv.slice(2), knownOptions);

解析什么呢

$ gulp scripts --env development

在食谱中有更完整的信息。