向 gulp 任务发送参数

Jen*_*ell 1 terminal arguments parameter-passing gulp gulp-watch

关于这个主题的 stackoverflow 上还有其他问题,但不是我希望的问题。

这是我的 gulpfile.js 的简化版本

var gulp = require('gulp');
var sass = require('gulp-sass');

gulp.task('css', function() {
    gulp.src('site/scss/style.scss')
        .pipe(sass())
        .pipe(gulp.dest('assets/css'))
});

gulp.task('watch', function() {
    gulp.watch('site/scss/**/*.scss', ['css']);
});
Run Code Online (Sandbox Code Playgroud)

我可以成功地做到这一点:

gulp watch
Run Code Online (Sandbox Code Playgroud)

现在我希望能够在我的终端命令行中做这样的事情:

gulp watch my-domain-name
Run Code Online (Sandbox Code Playgroud)

或者

gulp watch my-other-domain
Run Code Online (Sandbox Code Playgroud)

我的 gulpfile 在我看来是这样的:

var gulp = require('gulp');
var sass = require('gulp-sass');

gulp.task('css', function(name) {
    gulp.src('site/scss/style.scss')
        .pipe(sass())
        .pipe(gulp.dest('assets/css'))
});

gulp.task('watch', function(name) {
    gulp.watch('site/scss/**/*.scss', ['css', name]);
});
Run Code Online (Sandbox Code Playgroud)

我尝试将其name作为监视任务的变量发送。在我的情况下,这将是my-domain-namemy-other-domain取决于我在终端中写的内容。

如何将参数从终端发送到 watch 任务,然后再发送到 css 任务?

Mar*_*ark 5

有许多来源可以将参数从命令行传递到 gulp。看:

https://www.sitepoint.com/pass-parameters-gulp-tasks/

https://github.com/gulpjs/gulp/blob/master/docs/recipes/pass-arguments-from-cli.md

官方配方使用 minimist一个非常受欢迎的包。

因此,使用这些方法,您不会将命令行参数直接传递给 watch 任务,而是传递给任何任务都可以访问的对象。

看起来gulp-param可能完全符合您的要求,直接将命令行参数注入每个任务的回调函数中。