通常在 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)); });
Gulp 没有为此提供任何类型的实用程序,但您可以使用许多命令 args 解析器之一。我喜欢yargs。应该:
yargs
var argv = require('yargs').argv; gulp.task('my-task', function() { return gulp.src(argv.a == 1 ? options.SCSS_SOURCE : options.OTHER_SOURCE) .pipe(sass({style:'nested'})) .pipe(autoprefixer('last 10 version')) .pipe(concat('style.css')) .pipe(gulp.dest(options.SCSS_DEST)); });
您还可以将它与gulp-if有条件地管道流结合起来,这对于开发与产品构建非常有用:
gulp-if
var argv = require('yargs').argv, gulpif = require('gulp-if'), rename = require('gulp-rename'), uglify = require('gulp-uglify'); gulp.task('my-js-task', function() { gulp.src('src/**/*.js') .pipe(concat('out.js')) .pipe(gulpif(argv.production, uglify())) .pipe(gulpif(argv.production, rename({suffix: '.min'}))) .pipe(gulp.dest('dist/')); });
并用gulp my-js-taskor调用gulp my-js-task --production。
gulp my-js-task
gulp my-js-task --production