【问题标题】:Gulp task does not finish even when the process terminates with code 0即使进程以代码 0 终止,Gulp 任务也不会完成
【发布时间】:2018-01-11 12:33:29
【问题描述】:

我添加了一个 gulp 任务来删除给定路径中的目录。路径是从数组中读取的。 我的 gulp 任务运行正常并完成了所需的工作。 Task Runner 资源管理器给出启动任务的消息以及成功终止代码 0 的进程。问题是它没有说明任务已完成。因此,我的其他依赖于此任务的任务无法在构建过程自动化期间执行。

const rmr = require('rmr');

// array containing the list of all paths of the folders to be deleted
const removeFoldersArr = [ 
    {
        Path: "wwww/scripts"
    },
    {
        Path: "www/styles"
    }
];

// Gulp Task to remove all files in a folder
gulp.task('cleanFolders', function () {
    return removeFoldersArr.map(function (folder) {
        rmr.sync(folder.Path);
    });
});

在 Task Runner Explorer 中,任务启动但未完成,虽然它以代码 0 终止,如下所示:

cmd.exe /c gulp -b "D:\My Projects\Solution1" --color --gulpfile "D:\My Projects\Solution1\Gulpfile.js" cleanFolders
[18:04:23] Using gulpfile D:\My Projects\Solution1\Gulpfile.js
[18:04:23] Starting 'cleanFolders'...
Process terminated with code 0.

【问题讨论】:

  • 如何将return语句移动到:return rmr.sync(folder.Path);
  • 也试过了。没区别!
  • 我会说你想要的是 forEach() 而不是 map()。 map() 返回一个您不感兴趣的数组,您只想为每个数组项运行一个函数。 [你并不真的需要数组中的每个项目都是一个对象,它们可能只是字符串本身,除非你在这些对象中除了 Path 之外还有其他东西。]
  • 使用 forEach() 代替 map() 也没有区别。该进程仍然终止而不调用finish。
  • 您使用的是visual-studio-2015 标签,但不清楚您的问题与您的问题有何关联。这个gulp 问题是否仅在使用 vs vode 调试器运行时发生?

标签: javascript visual-studio-2015 gulp


【解决方案1】:

正确的方法是返回一个promise

给定一个可迭代对象(数组或字符串),或一个可迭代对象的承诺,promise.all 将可迭代对象中的所有值迭代到一个数组中,并返回一个承诺,当数组中的所有项目都满足时已完成。

以下是解决方案的代码sn-p:

gulp.task('cleanFolders', function () {
    return Promise.all([
        removeFoldersArr.map(function (folder) {
            rmr.sync(folder.Path);
        })
    ]);
});

现在,进程首先完成,然后终止。

以下是Task Runner Explorer中显示的输出:

cmd.exe /c gulp -b "D:\My Projects\Solution1" --color --gulpfile "D:\My Projects\Solution1\Gulpfile.js" cleanFolders
[12:25:01] Using gulpfile D:\My Projects\Solution1\Gulpfile.js
[12:45:01] Starting 'cleanFolders'...
[12:45:01] Finished 'cleanFolders' after 3.18 ms
Process terminated with code 0.

【讨论】:

    【解决方案2】:

    在 VS2017 上遇到此问题后,我们发现我们遇到的问题与版本号 15.8.X 有关,他们在其中发布了一个新版本的 Node.js,版本 10.6,这基本上破坏了 gulp。它用代码 0 提前终止了进程,但很少有进程被允许完成。

    重新排列 Web 包管理列表以将 $(PATH) 放在 $(VSInstalledExternalTools) 之前,并在您的路径上放置 LTS 版本的 Node 是为我们解决的问题。

    见:https://developercommunity.visualstudio.com/content/problem/311553/task-runner-cant-load-gruntfilejs.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-27
      • 1970-01-01
      • 2021-08-31
      • 1970-01-01
      相关资源
      最近更新 更多