0

我正在寻找可以重用的被调用的 gulp-notify 成功函数。我对所有任务都使用相同的格式,并希望对其进行清理。这是我现在正在做的一个例子:

gulp.task('build-css', function() {
    const s = gsize();

    return gulp.src('src/css/main.css')
        .pipe(plumber({ errorHandler: onError }))
        .pipe(cssmin())
        .pipe(rename({suffix: '.min'}))
        .pipe(gulp.dest('dist/css'))
        .pipe(s)
        .pipe(notify({
            title: function () {
                return '<%= file.relative %> - ' + s.prettySize;
            },
            onLast: true,
            subtitle: "Successfully Compiled",
            message: "@ Time: <%= options.hour %>:<%= options.minute %>:<%= options.second %> ",
            templateOptions: {
                hour: new Date().getHours(),
                minute: new Date().getMinutes(),
                second: new Date().getSeconds()
            }
        }))
});

我正在对多个任务重新使用相同的通知功能。我试过做这样的事情,但每次尝试都会引发错误。这个特殊的错误与管道工有关-Can't Pipe to Undefined

var onSuccess = function () {
    const s = gsize();
    notify({
        title: function () {
            return '<%= file.relative %> - ' + s.prettySize;
        },
        onLast: true,
        subtitle: "Successfully Compiled",
        message: "@ Time: <%= options.hour %>:<%= options.minute %>:<%= options.second %> ",
        templateOptions: {
            hour: new Date().getHours(),
            minute: new Date().getMinutes(),
            second: new Date().getSeconds()
        }
    })
};

...

gulp.task('build-css', function() {
    const s = gsize();

    return gulp.src('src/css/main.css')
        .pipe(plumber({ errorHandler: onError }))
        .pipe(autoprefixer({
            browsers: ['last 6 versions'],
            cascade: false
        }))
        .pipe(cssmin())
        .pipe(rename({suffix: '.min'}))
        .pipe(s)
        .pipe(onSuccess())
        .pipe(gulp.dest('dist/css'))
        .pipe(reload({stream: true}));
});

任何关于如何实现这一点的想法都值得赞赏!

编辑在 qballers 解决方案之后,唯一的问题是我的 gulp-size 插件返回未定义的文件大小:

const s = gsize();

// Success Message
var notifyGeneric = {
    title: function () {
        return '<%= file.relative %> - ' + s.prettySize;
    },
    onLast: true,
    subtitle: "Successfully Compiled",
    message: "@ Time: <%= options.hour %>:<%= options.minute %>:<%= options.second %> ",
    templateOptions: {
        hour: date.getHours(),
        minute: date.getMinutes(),
        second: date.getSeconds()
    }
};

...

gulp.task('build-css', function() {
    const s = gsize();

    return gulp.src(srcCssPath + 'main.css')
        .pipe(plumber({ errorHandler: onError }))
        .pipe(autoprefixer({
            browsers: ['last 6 versions'],
            cascade: false
        }))
        .pipe(cssmin())
        .pipe(rename({suffix: '.min'}))
        .pipe(s)
        .pipe(notify(notifyGeneric))
        .pipe(gulp.dest(cssPath))
        .pipe(reload({stream: true}));
});
4

1 回答 1

2

不确定这是否是您想要的解决方案,但您可以使用对象文字来节省代码重复。

var notifyGeneric = {
            title: function () {
                return '<%= file.relative %> - ' + this.s.prettySize;
            },
            onLast: true,
            subtitle: "Successfully Compiled",
            message: "@ Time: <%= options.hour %>:<%= options.minute %>:<%= options.second %> ",
            templateOptions: {
                hour: new Date().getHours(),
                minute: new Date().getMinutes(),
                second: new Date().getSeconds()
            },
            s: {}
        };
gulp.task('build-css', function() {
    notifyGeneric.s = gsize();
    return gulp.src('src/css/main.css')
        .pipe(plumber({ errorHandler: onError }))
        .pipe(cssmin())
        .pipe(rename({suffix: '.min'}))
        .pipe(gulp.dest('dist/css'))
        .pipe(notifyGeneric.s)
        .pipe(notify(notifyGeneric))
});
于 2016-08-21T22:32:08.743 回答