javascript - Gulp中child_process无法执行上一步生成的JS程序

标签 javascript node.js gulp child-process

我写了这样一个gulp脚本。

简而言之,这个脚本的作用是:

  1. 清理(删除)JS 程序
  2. 构建 JS 程序
  3. 执行JS程序

此脚本有时(并非总是)失败,但为什么?

var gulp = require('gulp'),
    babel = require('gulp-babel'),
    rename = require('gulp-rename'),
    concat = require('gulp-concat');

var runSequence = require('run-sequence'),
    del = require('del'),
    exec = require('child_process').exec;

gulp.task('build', function () {
    gulp.src('*.es')
        .pipe(babel())
        .pipe(rename({extname: '.js'}))
        .pipe(gulp.dest('./dist'))
        .pipe(concat('app.js'))
        .pipe(gulp.dest('./dist'));
});

gulp.task('clean', function () {
    del(['dist']);
});

gulp.task('exec', function (cb) {
    exec('node dist/app.js', function (err, stdout, stderr) {
        console.log(stdout);
        console.log(stderr);
        cb(err);
    });
});

gulp.task('default', function (cb) {
    runSequence('clean', 'build', 'exec', cb);
});

错误消息如下:

someone@somewhere:~/***/***% gulp
[15:17:15] Using gulpfile ~/***/***/gulpfile.js
[15:17:15] Starting 'default'...
[15:17:15] Starting 'clean'...
[15:17:15] Finished 'clean' after 4.28 ms
[15:17:15] Starting 'build'...
[15:17:15] Finished 'build' after 12 ms
[15:17:15] Starting 'exec'...

module.js:338
    throw err;
          ^
Error: Cannot find module '/***/***/dist/app.js'
    at Function.Module._resolveFilename (module.js:336:15)
    at Function.Module._load (module.js:278:25)
    at Function.Module.runMain (module.js:501:10)
    at startup (node.js:129:16)
    at node.js:814:3

[15:17:15] 'exec' errored after 119 ms
[15:17:15] Error: Command failed: /bin/sh -c node dist/app.js
module.js:338
    throw err;
          ^
Error: Cannot find module '/***/***/dist/app.js'
    at Function.Module._resolveFilename (module.js:336:15)
    at Function.Module._load (module.js:278:25)
    at Function.Module.runMain (module.js:501:10)
    at startup (node.js:129:16)
    at node.js:814:3

    at ChildProcess.exithandler (child_process.js:751:12)
    at ChildProcess.emit (events.js:110:17)
    at maybeClose (child_process.js:1015:16)
    at Socket.<anonymous> (child_process.js:1183:11)
    at Socket.emit (events.js:107:17)
    at Pipe.close (net.js:485:12)
[15:17:15] 'default' errored after 142 ms
[15:17:15] Error: Command failed: /bin/sh -c node dist/app.js
module.js:338
    throw err;
          ^
Error: Cannot find module '/***/***/dist/app.js'
    at Function.Module._resolveFilename (module.js:336:15)
    at Function.Module._load (module.js:278:25)
    at Function.Module.runMain (module.js:501:10)
    at startup (node.js:129:16)
    at node.js:814:3

    at ChildProcess.exithandler (child_process.js:751:12)
    at ChildProcess.emit (events.js:110:17)
    at maybeClose (child_process.js:1015:16)
    at Socket.<anonymous> (child_process.js:1183:11)
    at Socket.emit (events.js:107:17)
    at Pipe.close (net.js:485:12)

奇怪的是,再次运行“gulp exec”就会成功。

最佳答案

您需要返回任务中正在使用的流,以便 gulp 能够知道任务何时完成:

var gulp = require('gulp'),
    babel = require('gulp-babel'),
    rename = require('gulp-rename'),
    concat = require('gulp-concat');

var runSequence = require('run-sequence'),
    del = require('del'),
    exec = require('child_process').exec;

gulp.task('build', function () {
    return gulp.src('*.es')
        .pipe(babel())
        .pipe(rename({extname: '.js'}))
        .pipe(gulp.dest('./dist'))
        .pipe(concat('app.js'))
        .pipe(gulp.dest('./dist'));
});

gulp.task('clean', function () {
    return del(['dist']);
});

gulp.task('exec', function (cb) {
    exec('node dist/app.js', function (err, stdout, stderr) {
        console.log(stdout);
        console.log(stderr);
        cb(err);
    });
});

gulp.task('default', function (cb) {
    runSequence('clean', 'build', 'exec', cb);
});

关于javascript - Gulp中child_process无法执行上一步生成的JS程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32410238/

相关文章:

javascript - 通过单击所选的 div 来填充输入

javascript - 当 iOS Safari 关闭时停止 HTML5 音频循环

javascript - Mongoose 模型 : calculate and automatically update average rating

javascript - Gulp: 'function ()' 不可分配给参数

npm - 如何在 ES6 项目中导入我的 npm 模块?

javascript - 当正则表达式匹配空字符串时,是否可以用 regexp.exec 循环模拟 string.match?

javascript - Zurb 基金会均衡器

javascript - Node : How to restructure nested JSON data getting and organize reusable?

node.js - Nodejs OPENSSH - 错误 : read ECONNRESET at TCP. onStreamRead

html - 由于 mime 类型文本/html,样式在 gulp watch 任务后不起作用