通常我们可以通过gulp mytask之类的东西从控制台运行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
在食谱中有更完整的信息。
其他回答
下面是我如何使用它的示例。对于css/less任务。可适用于所有。
var cssTask = function (options) {
var minifyCSS = require('gulp-minify-css'),
less = require('gulp-less'),
src = cssDependencies;
src.push(codePath + '**/*.less');
var run = function () {
var start = Date.now();
console.log('Start building CSS/LESS bundle');
gulp.src(src)
.pipe(gulpif(options.devBuild, plumber({
errorHandler: onError
})))
.pipe(concat('main.css'))
.pipe(less())
.pipe(gulpif(options.minify, minifyCSS()))
.pipe(gulp.dest(buildPath + 'css'))
.pipe(gulpif(options.devBuild, browserSync.reload({stream:true})))
.pipe(notify(function () {
console.log('END CSS/LESS built in ' + (Date.now() - start) + 'ms');
}));
};
run();
if (options.watch) {
gulp.watch(src, run);
}
};
gulp.task('dev', function () {
var options = {
devBuild: true,
minify: false,
watch: false
};
cssTask (options);
});
@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'
这个答案可能会给你一些其他的想法。
我知道我回答这个问题有点晚了,但我想为@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应该是该选项的规范版本,并且 每个值应该是一个字符串或字符串数组。
有一个官方的极简主义的吞咽食谱。
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
在食谱中有更完整的信息。
如果你用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任务
- 排除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