通常我们可以通过类似 gulp mytask
的方式在控制台中运行 gulp 任务。有没有什么办法可以向 gulp 任务传递参数?如果可能的话,请举一个例子说明如何实现。
通常我们可以通过类似 gulp mytask
的方式在控制台中运行 gulp 任务。有没有什么办法可以向 gulp 任务传递参数?如果可能的话,请举一个例子说明如何实现。
肯定有更短的符号表示方法,但这是我的方法:
gulp.task('check_env', function () {
return new Promise(function (resolve, reject) {
// gulp --dev
var env = process.argv[3], isDev;
if (env) {
if (env == "--dev") {
log.info("Dev Mode on");
isDev = true;
} else {
log.info("Dev Mode off");
isDev = false;
}
} else {
if (variables.settings.isDev == true) {
isDev = true;
} else {
isDev = false;
}
}
resolve();
});
});
gulp.task('set_env', function (cb) {
exec('git rev-parse --abbrev-ref HEAD', function (err, stdout, stderr) {
const git__branch = stdout.replace(/(\r\n|\n|\r)/gm, ""),
regex__feature = new RegExp('feature/feature-*');
if (git__branch == "develop") {
log.info("Develop Branch");
isCompressing = false;
} else if (git__branch == "master") {
log.info("Master Branch");
isCompressing = true;
} else if (regex__feature.test(git__branch) === true){
log.info("✨Feature Branch");
isCompressing = true;
}else{
//TODO: check for other branch
log.warn("Unknown " + git__branch + ", maybe hotfix?");
//isCompressing = variables.settings.isCompressing;
}
log.info(stderr);
cb(err);
});
return;
})
附言:为了日志记录,我添加了以下内容:
var log = require('fancy-log');
如果需要的话,这是我的默认任务:
gulp.task('default',
gulp.series('set_env', gulp.parallel('build_scss', 'minify_js', 'minify_ts', 'minify_html', 'browser_sync_func', 'watch'),
function () {
}));
process.gulp = {}
,并让任务在那里查找。
从命令行传递参数
如果你想从命令行传递参数给 gulp 任务,可以使用 yargs 模块。下面是一个例子:const gulp = require('gulp'); const rename = require('gulp-rename'); const argv = require('yargs').argv; gulp.task('rename', function() { return gulp.src('src/**/*') .pipe(rename(function(path) { path.basename += "-" + argv.suffix; })) .pipe(gulp.dest('dist')); });
在这个例子中,我们定义了一个gulp
任务来重命名文件。我们使用yargs
模块来获取从命令行传递过来的--suffix
参数,并把它添加到文件名的末尾。这样,当我们运行以下命令时:gulp rename --suffix foo
所有的文件都会被重命名并添加后缀-foo
。请注意,我们使用--
来分隔 gulp 命令和我们要传递的参数。然后,我们可以使用argv
对象来访问这些参数。 - Heikki