Gulp手表不发射事件对象

时间:2016-09-12 05:31:40

标签: gulp gulp-4

当我尝试"Error: Invalid glob argument: undefined"gulp.src获取的已更改文件的路径时,Gulp(4.0)会抛出错误gulp.watch。这两个:

gulp.task('watch', function() {
    gulp.watch('./web/**/*.html')
        .on('change', function(file) {
            gulp.src(file.path)
                .pipe(gulp.dest('./output'));
        });
});

和这个语法变体:

gulp.task('watch', function() {
    gulp.watch('./web/**/*.html', function(file) {
        gulp.src(file.path)
            .pipe(gulp.dest('./output'));
    });
});

产生相同的结果。

gulp.src之前记录file.path也输出“undefined”。

要重现:

npm install -g gulp@github:gulpjs/gulp#4.0

并创建一个包含以下内容的gulpfile.js

const gulp = require('gulp');

其次是两个例子。

我的理解是,这是改变文件路径应该可以访问的方式as per the docs,所以我不确定我哪里出错了?

1 个答案:

答案 0 :(得分:3)

那个文件是各种错误的。例如,它讨论了gaze个事件,但gaze不再用于监视gulp 4.0中的文件更改;它已被chokidar取代。

关于您的问题,文档在您访问文件路径的方式上是错误的。 .on('change')回调函数未传递event对象,因此没有.path属性。

而是将文件路径作为字符串传递,因此您的第一个示例应如下所示:

gulp.task('watch', function() {
    gulp.watch('./web/**/*.html')
        .on('change', function(file) {
            gulp.src(file)
                .pipe(gulp.dest('./output'));
        });
});

第二个示例中的回调函数根本没有收到路径。它传递了一个done回调,以便通过gulp.series()gulp.parallel()执行任务。