我刚刚将旧项目从gulp 3迁移到gulp 4.0.0。我无法使gulp.watch任务在我的watch函数中运行。我正在Windows上运行。
监视功能如下:
function watch(done) {
gulp.watch(LAYOUTSFILES, copytosomelocation);
gulp.watch(MODULEFILES, copymodulestosomelocation);
gulp.watch(DLLFILES, gacdeploy);
gulp.watch("./Styles/**/*.less", cssless);
console.log("watching");
done();
}
位置的格式如下(在gulp 3中可用,因此位置至少正确):
let LAYOUTSFILES = [
"./Folder/Project/**/*.*"
];
这是第一个被调用的任务:
function copytosomelocation() {
console.log("In copy");
return gulp.src(LAYOUTSFILES)
.pipe(fileCache.filter())
.pipe(gulp.dest(OUTLAYOUTS));
}
在gulpfile的末尾有exports.watch = watch;
。
运行时,得到以下输出:
[18:43:59] Using gulpfile
D:\git\repo\folder\someproject\gulpfile.js
[18:43:59] Starting 'watch'...
watching
[18:43:59] Finished 'watch' after 17 ms
也就是说-没有文件被复制-从函数copytosomelocation没有输出记录到控制台。
我想念什么?
我忽略了对新结构进行必要的任务依赖项更改。
原始监视功能的结构如下:
gulp.task("watch", ["webpack-watch"], () => { ... });
描述了对以下内容的依赖性:
gulp.task('webpack-watch', (done) => {
runWebpack(["-d"], true, done);
});
function runWebpack(params, watch, done) {
params = params || [];
params.push("--color");
if (watch) {
params.push("-w");
}
if (watch) {
spawnCommand("webpack", params);
done(); //return immidiately when watching
} else {
spawnCommand("webpack", params, done);
}
}
没有此功能,gulp只能监视目录,只有在运行webpack-watch时才会更新。我通过更新watch出口来解决此问题,如下所示:
exports.watch = gulp.series('webpack-watch', watch);