依次运行gulp任务会在管道中抛出“未处理的流错误”

雷诺不是比尔·盖茨

我有一个吞吞吐吐的任务,如下所示:

gulp.task('build-files, function(cb) {
    runSequence('run-build-cmd',
        'delete-dest', 'copy-files',
        cb);
});

只要源文件夹中发生以下更改,此任务就会运行:

gulp.watch(pathToSrcFolder, ['build-files']);

因此,此任务将按指定的顺序运行其他3个gulp任务,第一个任务运行build命令,第二个任务将删除文件夹,如下所示:

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));
});

请注意,pathToDestFolder在delete-sourcecopy-files命令中都是相同的文件夹

我运行此序列的问题是此错误:

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'

我不知道为什么会收到此错误。

当我gulp delete-dest在cmd提示符下运行(将清除pathToDestFolder),然后gulp copy-files(将源文件夹复制到两个文件夹pathToDestFolder和anotherPath中)运行时,它将按预期工作。

所以我想runSequence没有按预期工作?如果是这样,我该如何解决?

编辑:

我尝试使用rimraf代替del,并且一切似乎都可以正常工作,我知道这rimraf已经被描述了,最好使用del代替,但是为什么del在这种情况下会导致异常?

编辑2:

rimraf我没有使用它作为解决方案,而是尝试了以下解决方案:

gulp.task('delete-dest', (cb) => {
    del([pathToDestFolder], {force: true})
    .then(paths => {cb();});
});

它像魔术一样工作。

为什么这样做有效呢?我不知道 !

如果有人可以澄清事情,我将不胜感激。

普希金

如果您在这里查看,则会发现del返回了一个承诺。这是一个异步方法。

在您的代码中,您cb()可以在调用之后调用del(...)但是在实际完成删除目录之前调用del

这就是为什么您必须在与链接后执行回调then

gulp.task('delete-dest', (cb) => {
    del([pathToDestFolder], {force: true})
    .then(paths => {cb();});
});

然后您的操作将以正确的顺序运行。

您之前遇到的错误是由于事物以怪异的顺序运行而导致的,从而导致怪异的行为。Gulp尝试在文件系统删除目录时将其复制到目录中,并且该冲突导致文件系统错误。


作为实验,您可以尝试运行del类似的同步版本

gulp.task('delete-dest', (cb) => {
    del.sync([pathToDestFolder], {force: true});
    cb();
});

看看是否可行(尽管您应该首选异步版本)。


附带说明一下,除非这可能是Gulp 4的一项功能,尽管可能不是,除非您在任务中调用回调,否则可以像下面这样返回一个promise:

gulp.task('delete-dest', () => {
    return del([pathToDestFolder], {force: true});
});

这将告诉Gulp您的任务已完成,并且可以继续进行下一个任务。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Gulp管道中未处理的流错误

Node JS 抛出错误“管道中未处理的流错误”

Node.js中管道中未处理的流错误

依次在Android中运行处理程序任务

如何依次依次运行Gulp任务

“管道中未处理的流错误”-使用带有express的request.js的文件下载过多

在gulp任务中抛出错误

带有Laravel Elixir的Gulp抛出events.js:141未处理的'错误'事件

C# 抛出未处理的异常错误

在TPL中快速抛出未处理的异常

当我已经在方法中抛出错误时,出现未处理的异常错误

用管道工和工具处理gulp中的错误

## [错误]未处理:句柄不是Azure DevOps构建管道中的缓冲区CopyFilesOverSSH

程序在运行时抛出未处理的异常 IndexOutOfRange

Node.js抛出未处理的错误事件

ExpressJS-抛出器未处理的错误事件

在 Watch 任务中运行 Gulp 任务

依赖任务的gulp错误处理

在Python asyncio任务中处理未处理的异常后整理

Gulp-uglify:投掷er; //未处理的“错误”事件

Gulp-投掷者; //未处理的“错误”事件

ShinyApps部署;错误:未处理的异常:子任务

为什么在C#中未处理Delegate中的返回值时没有编译器错误抛出?

依次运行Jenkins并行任务

运行Gulp任务时Stdout maxBuffer错误

在剃刀页面中调用接口方法抛出未处理的异常

在 BigQuery 中运行 node.js 文件时如何停止未处理的承诺错误?

反应中带有搜索功能的未处理运行时错误

node.js 中未处理的错误