传递参数给Gulp任务

226

通常我们可以通过类似 gulp mytask 的方式在控制台中运行 gulp 任务。有没有什么办法可以向 gulp 任务传递参数?如果可能的话,请举一个例子说明如何实现。


5
以下是需要翻译的内容:

从命令行传递参数

如果你想从命令行传递参数给 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
12个回答

0

肯定有更短的符号表示方法,但这是我的方法:

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();
  });
});

如果您想将环境设置为实际的Git分支(master/develop):
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 () {
    }));

欢迎提出优化建议。

-2
只需将其加载到进程的新对象中..process.gulp = {},并让任务在那里查找。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接