在Gulp中,child

编程入门 行业动态 更新时间:2024-10-28 07:21:12
Gulp中,child_process无法执行上一步生成的JS程序(In Gulp, child_process fails to execute a JS program generated by a previous step)

我写了这样一个gulp脚本。

总之,这个脚本确实:

清理(​​删除)JS程序 建立JS程序 执行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”将会成功。

I wrote such a gulp script.

In short, this script does:

Clean(remove) a JS program Build the JS program Execute the JS program

This script sometimes (not always) fails, but why?

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

The error messages follow:

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)

Curiously enough, running "gulp exec" again will succeed.

最满意答案

您需要返回您在任务中使用的流,以便让吞噬者有办法知道任务何时完成:

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

You need to return the streams you are working with in your tasks so that gulp has a way to know when the tasks are finished:

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

更多推荐

本文发布于:2023-07-15 22:08:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1119405.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Gulp   child

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!