在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没有为此提供任何类型的util,但您可以使用众多命令参数解析器中的一个。我喜欢码。应该是:

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结合起来,有条件地管道流,对于开发vs. prod构建非常有用:

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-task或者gulp my-js-task——production。

其他回答

有一种非常简单的方法可以在不解析参数的情况下实现开/关标志。Gulpfile.js只是一个像其他文件一样执行的文件,所以你可以这样做:

var flags = {
  production: false
};

gulp.task('production', function () {
  flags.production = true;
});

并使用类似gulp-if的命令有条件地执行一个步骤

gulp.task('build', function () {
  gulp.src('*.html')
    .pipe(gulp_if(flags.production, minify_html()))
    .pipe(gulp.dest('build/'));
});

执行gulp构建将生成一个漂亮的html,而gulp生产构建将缩小它。

var isProduction = (process.argv.indexOf("production")>-1);

CLI gulp production调用我的生产任务,并为任何条件设置一个标志。

Gulp没有为此提供任何类型的util,但您可以使用众多命令参数解析器中的一个。我喜欢码。应该是:

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结合起来,有条件地管道流,对于开发vs. prod构建非常有用:

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-task或者gulp my-js-task——production。

我们希望为不同的环境传递不同的配置文件——一个用于生产、开发和测试。下面是gulp文件中的代码:

//传入标志给gulp来设置环境 //var env = gutil.env.env; If (typeof gutil.env.env === 'string') { process.env。NODE_ENV = gutil.env.env; }

这是app.js文件中的代码:

If (env === 'testing'){ var Config = require('./ Config .testing.js'); var Api = require('./ Api /testing.js')(Config.web); } Else if(env === 'dev'){ Config = require('./ Config .dev.js'); Api = require('./ Api /dev.js').Api; } 其他{ Config = require('./ Config .production.js'); Api = require('./ Api /production.js')(Config.web); }

然后运行gulp—env=testing

如果你正在使用typescript (gulpfile.ts),那么在yargs(基于@Caio Cunha的精彩回答https://stackoverflow.com/a/23038290/1019307和上面的其他评论)中这样做:

安装

npm install --save-dev yargs

typings install dt~yargs --global --save

.ts文件

把这个添加到.ts文件中:

import { argv } from 'yargs';

...

  let debug: boolean = argv.debug;

这必须在每个.ts文件中单独完成(即使是导入到gulpfile.ts/js中的工具/任务/项目文件)。

Run

gulp build.dev --debug

或者在npm下将arg传递给gulp:

npm run build.dev -- --debug