即使进程终止于代码0

时间:2018-01-11 12:33:29

标签: javascript visual-studio-2015 gulp

我添加了gulp任务来删除给定路径中的目录。从数组中读取路径。 我的gulp任务正常运行并完成所需的工作。任务运行器资源管理器提供启动任务的消息以及使用代码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.

2 个答案:

答案 0 :(得分:3)

正确的方法是返回承诺

给定一个iterable(数组或字符串)或者一个可迭代的promise,promise.all将iterable中的所有值迭代到一个数组中,并返回一个在数组中所有项目都满足的promise已经实现了。

以下是解决方案的代码段:

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.

答案 1 :(得分:2)

在VS2017上出现此问题后,我们发现所遇到的问题与版本号15.8.X有关,在该版本中,他们发布了新版本的Node.js(版本10.6),并且基本上打破了人们的视线。它以代码0提前终止了该过程,但是几乎没有任何过程可以完成。

重新排列Web软件包管理列表,将$(PATH)放在$(VSInstalledExternalTools)之前,并在您的路径上使用Node的LTS版本,这对我们来说是固定的。

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