通常我们可以通过gulp mytask之类的东西从控制台运行gulp任务。我是否可以将参数传递给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”的任务。
其他回答
我知道我回答这个问题有点晚了,但我想为@Ethan的回答补充一些东西,他是投票和接受度最高的答案。
我们可以使用yargs来获取命令行参数,然后我们还可以为一些参数添加自己的别名,比如follow。
var args = require('yargs')
.alias('r', 'release')
.alias('d', 'develop')
.default('release', false)
.argv;
详情请参考此链接。 https://github.com/yargs/yargs/blob/HEAD/docs/api.md
以下是码数文件中给出的别名用法。我们还可以在那里找到更多的yargs功能,并可以使命令行传递体验更好。
.alias(键,别名) 将键名设置为等效的,以便对键的更新将传播 到别名,反之亦然。 可选地,.alias()可以接受一个将键映射到别名的对象。每一个 该对象的Key应该是该选项的规范版本,并且 每个值应该是一个字符串或字符串数组。
将参数传递给gulp可能意味着以下几件事:
从命令行到gulp文件(这里已经举例说明了)。 从gulpfile.js脚本主体到gulp任务。 从一个吞咽任务到另一个吞咽任务。
下面是一种将参数从主gulpfile传递给gulp任务的方法。通过将需要参数的任务移动到它自己的模块中,并将其包装在函数中(因此可以传递参数):
// ./gulp-tasks/my-neat-task.js file
module.exports = function(opts){
opts.gulp.task('my-neat-task', function(){
console.log( 'the value is ' + opts.value );
});
};
//main gulpfile.js file
//...do some work to figure out a value called val...
var val = 'some value';
//pass that value as a parameter to the 'my-neat-task' gulp task
require('./gulp-tasks/my-neat-task.js')({ gulp: gulp, value: val});
如果您有很多gulp任务,并且想要传递一些方便的环境配置,这可以派上用场。我不确定它是否能在一个任务和另一个任务之间工作。
只需要在进程中将它加载到一个新对象中。的过程。Gulp ={}并让任务查看那里。
@Ethan的答案完全可行。根据我的经验,更多节点的方法是使用环境变量。这是配置部署在托管平台(例如Heroku或Dokku)上的程序的标准方法。
要从命令行传递参数,可以这样做:
发展: 吞咽dev
生产: NODE_ENV=production gulp dev
语法不同,但非常Unix,并且它与Heroku, Dokku等兼容。
您可以在process.env.NODE_ENV的代码中访问该变量
MYAPP=something_else gulp开发
将
process.env.MYAPP === 'something_else'
这个答案可能会给你一些其他的想法。
如果你想避免增加额外的依赖,我找到了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”的任务。
推荐文章
- 将参数传递给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