在gulp中为子文件夹执行命令

时间:2016-07-24 10:17:09

标签: node.js gulp child-process npm-install

我的项目结构如下:

myapp
 -server.js
 -test
 --testcontent
 ---package.json
 -package.json

我有两个package.json个文件,我想在npm install文件夹内的package.json上运行testcontent

如果在命令行中我转到myapp/test/testcontent并运行npm install它可以工作,它会创建一个新文件夹node_modules,其中包含来自正确package.json的依赖项。怎么能在gulp内完成?

我尝试了以下操作,但它使用package.json中的myapp而不是testcontent子文件夹中的gulp.task('default', function () { var options = { continueOnError: true, // default = false, true means don't emit error event pipeStdout: true, // default = false, true means stdout is written to file.contents customTemplatingThing: "test" // content passed to gutil.template() }; var reportOptions = { err: true, // default = true, false means don't write err stderr: true, // default = true, false means don't write stderr stdout: true // default = true, false means don't write stdout } gulp.src('test/testcontent/') .pipe(exec('npm install' , options)) .pipe(exec.reporter(reportOptions)); });

id

1 个答案:

答案 0 :(得分:2)

gulp-exec是这项工作的错误工具。实际上gulp-exec插件explicitly advise的作者反对以你的方式使用它:

  

注意:如果您只想运行命令,只需运行命令,不要使用此插件

而是使用node.js内置child_process.spawn()。您可以使用cwd选项传递应该执行命令的目录:

var spawn = require('child_process').spawn;

gulp.task('default', function(done) {
  spawn('npm', ['install'], { cwd: 'test/testcontent/', stdio: 'inherit' })
    .on('close', done);
});