从另一个gulpfile.js中的一个gulpfile.js运行gulp任务

时间:2014-05-14 20:42:17

标签: javascript node.js gulp

也许我的方法有问题,但我有以下情况:

  1. 我有一个component-a有一个gulpfile。其任务之一(例如构建)构建组件并在dist文件夹中创建组合的js文件
  2. 我有一个component-b有一个gulpfile。其任务之一(例如构建)构建组件并在dist文件夹中创建组合的js文件
  3. 我有一个使用这两个组件的项目。这个项目也有一个gulp文件,我想写一个任务:
    • 从/components/component-a/gulpfile.js
    • 执行构建任务
    • 从/components/component-b/gulpfile.js
    • 执行构建任务
    • concats /components/component-a/dist/build.js和/components/component-b/dist/build.js(我知道怎么做)
  4. 我不知道如何从/components/component-?/gulpfile.js执行构建任务。是否有可能或者我应该处理这种情况呢?

2 个答案:

答案 0 :(得分:21)

需要(' child_process&#39)。产卵;

使用Node's child_process#spawn module从其他目录运行Gulpfile非常简单。

尝试根据您的需要调整以下内容:

// Use `spawn` to execute shell commands with Node
const { spawn } = require('child_process')
const { join } = require('path')

/*
  Set the working directory of your current process as
  the directory where the target Gulpfile exists.
*/
process.chdir(join('tasks', 'foo'))

// Gulp tasks that will be run.
const tasks = ['js:uglify', 'js:lint']

// Run the `gulp` executable
const child = spawn('gulp', tasks)

// Print output from Gulpfile
child.stdout.on('data', function(data) {
    if (data) console.log(data.toString())
})

吞掉-突突

虽然使用gulp-chug是解决此问题的一种方法,但it has been blacklisted by gulp's maintainers是...... {/ p>

  

"执行,太复杂,只是使用gulp作为一个球员"

official blacklist州......

  

"没有理由存在,请使用require-all模块或节点的要求"

答案 1 :(得分:0)

也许这也会对某人有所帮助,所以我会给它一个机会。我不特别了解OP打算做什么,但是问题与我的问题类似,我的解决方案是以其他方式(例如使用项目的预构建事件)访问另一个gulp文件,例如:

cd $(SolutionDir)\ProjectThatHasTargetGulpFile
gulp theTaskNeedToRun

考虑到Gulp和NodeJs已正确安装在计算机中(可以在cmd中运行)。