当我尝试"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,所以我不确定我哪里出错了?
答案 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()
执行任务。