0

我有一个不使用 gulpif 和lazypipes 的 Grunt 文件,但我要做的是创建一个任务,该任务将使用useref. 然后是gulpifJS lintuglify/concatenate 和notify. 我收到“错误:对lazypipe() 的无效调用..”,我正在查看这篇文章https://github.com/OverZealous/lazypipe/issues/19,但我有点绿,不明白错误/如何修复它“管道(foo)与管道(foo())”。 如果有人能告诉我我是如何错误地使用lazypipe的=我应该很好。

grunt 文件更大,我正在使用 gulpif bc css,一旦它起作用,我也会使用它。如果有更好的方法让我知道,谢谢。

正在使用的插件:

var gulp        = require('gulp'),
jshint          = require('gulp-jshint'),
notify          = require('gulp-notify'),
gulpif          = require('gulp-if'),
lazypipe        = require('lazypipe'),
useref          = require('gulp-useref');
uglify          = require('gulp-uglify');

var anyJS       = '/**/*.js',
    distFolder  = 'dist';

//Lazy Tasks
    var jsTask = lazypipe()
        .pipe(jshint)
        .pipe(jshint.reporter('jshint-stylish'))
        .pipe(notify('JS Linting finished'))
        .pipe(uglify())
        .pipe(notify('JS Compressing finished'));


//Tasks
    gulp.task('mini', function () {
        return gulp.src('./index.html')
            .pipe(useref())
            .pipe(gulpif(anyJS, jsTask()))
            .pipe(gulp.dest(distFolder));
    });
4

2 回答 2

2

所以我终于弄清楚出了什么问题。LazyPipe 中的所有函数调用都不能使用 ()!所以如果你有lazypipe().pipe(jshint).pipe(uglify())。它不起作用 - 您也需要删除 uglify 上的 () 。

我想我会用 LP 和 GF 再试一次,但这是它与 gulpFilter 或至少 90% 一起使用。通知没有显示。

gulp.task('mini', function () {
    var jsFilter = gulpFilter(jsInput, {restore: true});
    var cssFilter = gulpFilter(cssInput, {restore: true});

    return gulp.src('./index.html')
        .pipe(plumber({
            handleError: function (err) {
                console.log(err);
                this.emit('end');
            }
        }))
        .pipe(useref())
        .pipe(jsFilter)
        .pipe(jshint())
        .pipe(jshint.reporter('jshint-stylish'))
        .pipe(uglify())
        .pipe(notify('JS task finished'))
        .pipe(jsFilter.restore)
        .pipe(cssFilter)
        .pipe(sass())
        .pipe(autoPrefixer('last 2 versions'))
        .pipe(cssComb())
        .pipe(mmq({
            log: true
        }))
        .pipe(minifyCss())
        .pipe(notify('CSS task finished'))
        .pipe(cssFilter.restore)

        .pipe(gulp.dest(distFolder));
});
于 2015-12-21T22:59:27.063 回答
0

就像您在自己的回答中指出的那样,当您使用lazypipe. 对于不使用参数的工厂,这就像删除 一样简单(),对于需要参数的工厂,您可以使用箭头函数来创建这样的工厂:

var jsTask = lazypipe()
    .pipe(jshint)
    .pipe(() => jshint.reporter('jshint-stylish'))
    .pipe(() => notify('JS Linting finished'))
    .pipe(uglify)
    .pipe(() => notify('JS Compressing finished'));

也可以使用 来创建这样的工厂bind(),但是上面的方法更容易,因为您不需要担心调用上下文。

于 2021-03-12T03:06:18.863 回答