1. ホーム
  2. javascript

[解決済み] Gulpにフラグを渡して、異なる方法でタスクを実行させることは可能ですか?

2022-03-14 02:23:49

質問

通常、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はそのためのユーティリティを提供していませんが、多くのコマンドアーグパーサーのうちの1つを使用することができます。私が好きなのは 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 を使えば、条件付きでストリームをパイプすることができ、開発用と生産用のビルドに非常に便利です。

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 .