通常我们可以通过gulp mytask之类的东西从控制台运行gulp任务。我是否可以将参数传递给gulp任务?如果可能,请举例说明如何做到这一点。
当前回答
如果你用gulp搭配yargs,注意以下几点:
如果你有一个任务'客户',不想使用yargs内置参数检查所需的命令:
.command("customer <place> [language]","创建客户目录") 调用它:
gulp customer --customer Bob --place Chicago --language english
Yargs总是会抛出一个错误,表示没有足够的命令被分配给调用,即使你有!!- - - - - -
试一下,在命令中只添加一个数字(使其不等于gulp-task名称)…它会起作用:
.command("customer1 <place> [language]","创建客户目录")
这是因为gulp似乎触发了任务,在yargs能够检查此所需参数之前。我花了好几个小时才弄明白。
希望这对你有所帮助。
其他回答
只需要在进程中将它加载到一个新对象中。的过程。Gulp ={}并让任务查看那里。
如果你想避免增加额外的依赖,我找到了node的进程。Argv变得有用:
gulp.task('mytask', function() {
console.log(process.argv);
});
下面是:
gulp mytask --option 123
应该显示:
[ 'node', 'path/to/gulp.js', 'mytask', '--option', '123']
如果确定所需的参数位于正确的位置,则不需要标记。**在这种情况下使用:
var option = process.argv[4]; //set to '123'
但是:由于选项可能没有设置,或者可能处于不同的位置,我觉得更好的想法是这样的:
var option, i = process.argv.indexOf("--option");
if(i>-1) {
option = process.argv[i+1];
}
这样,你就可以处理多种选项的变化,比如:
//task should still find 'option' variable in all cases
gulp mytask --newoption somestuff --option 123
gulp mytask --option 123 --newoption somestuff
gulp mytask --flag --option 123
**编辑:对于节点脚本为true,但是gulp将任何没有开头“——”的内容解释为另一个任务名称。所以使用gulp mytask 123会失败,因为gulp找不到名为“123”的任务。
下面是另一种不需要额外模块的方法:
我需要从任务名称中猜测环境,我有一个“开发”任务和一个“prod”任务。
当我运行gulp prod时,它应该设置为prod环境。 当我运行gulp dev或其他任何东西时,它应该设置为开发环境。
为此,我只检查正在运行的任务名称:
devEnv = process.argv[process.argv.length-1] !== 'prod';
如果你用gulp搭配yargs,注意以下几点:
如果你有一个任务'客户',不想使用yargs内置参数检查所需的命令:
.command("customer <place> [language]","创建客户目录") 调用它:
gulp customer --customer Bob --place Chicago --language english
Yargs总是会抛出一个错误,表示没有足够的命令被分配给调用,即使你有!!- - - - - -
试一下,在命令中只添加一个数字(使其不等于gulp-task名称)…它会起作用:
.command("customer1 <place> [language]","创建客户目录")
这是因为gulp似乎触发了任务,在yargs能够检查此所需参数之前。我花了好几个小时才弄明白。
希望这对你有所帮助。
这是节目不可或缺的特色。你可以试试码。
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,让它以不同的方式运行任务?)
推荐文章
- 如何防止moment.js从webpack加载地区?
- 将参数传递给Gulp任务
- 排除Gulp任务中的文件/目录
- Gulp命令未找到-安装Gulp后错误
- 尝试在节点0.12上重新安装' node-sass ' ?
- 安装Gulp后:"没有命令' Gulp ' found "
- 期望换行符是“LF”,但发现“CRLF”换行风格
- 为什么我们需要在全球和本地安装gulp ?
- Gulp错误:以下任务未完成:您忘记发出异步完成信号了吗?
- 是否有可能传递一个标志给Gulp,让它以不同的方式运行任务?
- 节点更新特定的包
- 如何运行Gulp任务顺序一个接一个
- 由于MIME类型,样式表未加载
- 如何修复Node.js中的“ReferenceError:未定义原始值”
- NPM vs.Bower vs.Browserify vs.Gulp vs.Grunt vs.Webpack