Running gulp task from one gulpfile.js from another gulpfile.js

泄露秘密 提交于 2019-11-30 07:21:48

问题


Perhaps it's something wrong with my approach but I have a following situation:

  1. I have a component-a that has a gulpfile. One of its tasks (eg. build) builds the component and creates a combined js file in dist folder
  2. I have a component-b that has a gulpfile. One of its tasks (eg. build) builds the component and creates a combined js file in dist folder
  3. I have a project that uses both components. This project has a gulpfile as well and in it I would like to write a task that:
    • executes build task from /components/component-a/gulpfile.js
    • executes build task from /components/component-b/gulpfile.js
    • concats /components/component-a/dist/build.js and /components/component-b/dist/build.js (I know how to do this)

What I don't know is how to execute the build task from /components/component-?/gulpfile.js. Is it even possible or I should deal with this situation otherwise?


回答1:


require('child_process').spawn;

Running a Gulpfile from a different directory is quite simple with Node's child_process#spawn module.

Try adapting the following to your needs:

// 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

Although using gulp-chug is one way to go about this, it has been blacklisted by gulp's maintainers for being...

"execing, too complex and is just using gulp as a globber"

The official blacklist states...

"no reason for this to exist, use the require-all module or node's require"




回答2:


Maybe this would help someone too, so I'll give this a shot. I don't know specifically what the OP intends to do but the question is similar to my problem which my solution is to access the other gulp file in another way like using a project's pre-build event, for example:

cd $(SolutionDir)\ProjectThatHasTargetGulpFile
gulp theTaskNeedToRun

Considering that Gulp and NodeJs is properly installed in the machine (can run in cmd).



来源:https://stackoverflow.com/questions/23664725/running-gulp-task-from-one-gulpfile-js-from-another-gulpfile-js

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!