有没有可能向Gulp传递一个标志来以不同的方式运行任务?

379

通常在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));
});

12
由于它在 Node 中运行,您可以使用 process.argv 来访问命令行参数。 - zzzzBov
11个回答

1

这个问题已经发布有一段时间了,但也许它会对某些人有所帮助。

我正在使用全局安装的GULP CLI 2.0.1和本地安装的GULP 4.0.0,以下是如何在不使用任何额外插件的情况下完成此操作。我认为代码相当自解释。

var cp = require('child_process'), 
{ src, dest, series, parallel, watch } = require('gulp');

// == availableTasks: log available tasks to console
function availableTasks(done) {
  var command = 'gulp --tasks-simple';
  if (process.argv.indexOf('--verbose') > -1) {
    command = 'gulp --tasks';
  }
  cp.exec(command, function(err, stdout, stderr) {
    done(console.log('Available tasks are:\n' + stdout));
  });
}
availableTasks.displayName = 'tasks';
availableTasks.description = 'Log available tasks to console as plain text list.';
availableTasks.flags = {
  '--verbose': 'Display tasks dependency tree instead of plain text list.'
};
exports.availableTasks = availableTasks;

并从控制台运行:

gulp availableTasks

然后运行并查看差异:
gulp availableTasks --verbose

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