通常在Gulp任务中看起来像这样:
gulp.task('my-task', function() {
return gulp.src(options.SCSS_SOURCE)
.pipe(sass({style:'nested'}))
.pipe(autoprefixer('last 10 version'))
.pipe(concat('style.css'))
.pipe(gulp.dest(options.SCSS_DEST));
});
是否可以将命令行标志传递给gulp(这不是一项任务)并让它根据它有条件地运行任务?例如
$ gulp my-task -a 1
然后在我的gulpfile.js中:
gulp.task('my-task', function() {
if (a == 1) {
var source = options.SCSS_SOURCE;
} else {
var source = options.OTHER_SOURCE;
}
return gulp.src(source)
.pipe(sass({style:'nested'}))
.pipe(autoprefixer('last 10 version'))
.pipe(concat('style.css'))
.pipe(gulp.dest(options.SCSS_DEST));
});
11 回答
Gulp不提供任何类型的util,但你可以使用众多命令args解析器之一 . 我喜欢yargs . 应该:
您还可以将它与gulp-if组合以有条件地管道流,这对于dev与prod构建非常有用:
并拨打
gulp my-js-task
或gulp my-js-task --production
.Edit
gulp-util
是deprecated并且应该避免,因此建议使用minimist,而gulp-util
已使用 .所以我在gulpfile中更改了一些行以删除
gulp-util
:Original
在我的项目中,我使用以下标志:
Gulp为此提供了一个对象
gulp.env
. 它在较新版本中已被弃用,因此您必须使用gulp-util . 任务看起来像这样:所有子任务期间都可以使用环境设置 . 所以我也可以在监视任务上使用这个标志:
我的风格任务也有效 .
Ciao Ralf
这是我找到的快速配方:
gulpfile.js
CLI
Original Ref(不再提供):https://github.com/gulpjs/gulp/blob/master/docs/recipes/pass-params-from-cli.md
替代最小化
来自更新参考:https://github.com/gulpjs/gulp/blob/master/docs/recipes/pass-arguments-from-cli.md
gulpfile.js
CLI
有一种非常简单的方法可以在不解析参数的情况下执行
on/off
标志 .gulpfile.js
只是一个像其他文件一样执行的文件,所以你可以这样做:并使用像
gulp-if
之类的东西来有条件地执行一个步骤执行
gulp build
将生成一个不错的html,而gulp production build
将缩小它 .如果你有一些严格的(有序的!)参数,那么你可以通过检查
process.argv
来获得它们 .执行它:
gulp --env production
...但是,我认为这太严格而且不防弹!所以,我摆弄了一下......最后得到了这个效用函数:
它吃一个参数名称,并将在
process.argv
中搜索它 . 如果没有找到任何东西,它会吐出null
. 否则,如果它们没有下一个参数,或者下一个参数是一个命令而不是一个值(我们用破折号不同),则返回true
. (那个's because the key exist, but there'只是没有 Value ) . 如果之前的所有情况都会失败,那么下一个参数值就是我们得到的 .> gulp watch --foo --bar 1337 -boom "Foo isn't equal to bar."
好的,现在已经足够......这是一个使用gulp的简单示例:
跑吧
gulp --env production
我构建了一个插件,用于将命令行中的参数注入任务回调 .
https://github.com/stoeffel/gulp-param
如果有人发现了错误或有改进,我很乐意合并PR .
如果你正在使用打字稿(
gulpfile.ts
),那么为yargs
做这个( Build 在@Caio Cunha的优秀答案https://stackoverflow.com/a/23038290/1019307以及上面的其他评论):安装
.ts文件
将其添加到.ts文件:
这必须在每个.ts文件中单独完成(即使是导入
gulpfile.ts/js
的tools/tasks/project
文件) .跑
或者
npm
将arg传递给gulp:从命令行传递参数
然后运行gulp:
Source
CLI
gulp production
调用我的 生产环境 任务并为任何条件设置一个标志 .我们想为不同的环境传递不同的配置文件 - 一个用于 production , dev 和 testing . 这是gulp文件中的代码:
这是app.js文件中的代码:
然后运行它gulp
--env=testing
自从这个问题发布以来已经有一段时间了,但也许它会帮助某些人 .
我正在使用GULP CLI 2.0.1(全局安装)和GULP 4.0.0(本地安装),这里是你如何做到这一点,没有任何额外的插件 . 我认为代码是不言自明的 .
从控制台运行:
然后运行并查看差异: