以下是我的gulp任务:
gulp.task('build-files, function(cb) {
runSequence('run-build-cmd',
'delete-dest', 'copy-files',
cb);
});
这项任务会在源文件夹中的任何更改发生时运行,具体如下:
gulp.watch(pathToSrcFolder, ['build-files']);
因此,此任务按指定顺序运行3个其他gulp任务。第一个任务运行构建命令,第二个任务将按以下方式删除一个文件夹:
gulp.task('delete-dest', (cb) => {
del([pathToDestFolder], {force: true});
cb();
});
第三个功能将从源文件夹复制文件到两个目标文件夹中:
gulp.task('copy-files', () => {
return gulp.src(pathToSrcFolder)
.pipe(gulp.dest(pathToDestFolder))
.pipe(gulp.dest(anotherPath));
});
请注意,在
delete-source
和copy-files
命令中,pathToDestFolder是相同的文件夹。
我运行这个序列时遇到了问题,错误如下:internal/streams/legacy.js:59
throw er; // Unhandled stream error in pipe.
^
Error: ENOENT: no such file or directory, chmod 'pathToDestFolder\path\to\some\file\file.ext'
我不知道为什么会出现这个错误。
当我在cmd提示符中运行gulp delete-dest
(它将清除pathToDestFolder的内容),然后运行gulp copy-files
(它将源文件夹复制到pathToDestFolder和anotherPath两个文件夹中),它按预期工作。
所以我猜测runSequence
并没有像预期的那样工作?如果是这样,我该如何解决?
编辑:
我试图使用rimraf
来代替del
,似乎一切都正常工作了。我知道rimraf
已经过时,最好使用del
代替,但为什么在这种情况下del
会导致异常呢?
编辑2:
我尝试了另一种解决方法:
gulp.task('delete-dest', (cb) => {
del([pathToDestFolder], {force: true})
.then(paths => {cb();});
});
它就像魔法一样奏效。
为什么这个工作了?我不知道!
如果有人能澄清事情,我将不胜感激。