你可以只導出gulp
對象在父gulpfile,然後要求它在兒童gulpfiles:
項目/ gulpfile.js:
var gulp = require('gulp');
gulp.task('commontask', function() { });
module.exports = gulp;
項目/子項目/ gulpfile.js:
var gulp = require('../gulpfile.js');
gulp.task('subtask', [ 'commontask' ], function() { });
運行subtask
從project/subproject
目錄:
> gulp subtask
[12:38:05] Using gulpfile ~/project/subproject/gulpfile.js
[12:38:05] Starting 'commontask'...
[12:38:05] Finished 'commontask' after 50 μs
[12:38:05] Starting 'subtask'...
[12:38:05] Finished 'subtask' after 20 μs
編輯:上面如果父gulpfile是不一樣的包的一部分將不工作(例如my-app
),而是來自您依賴的另一個包(例如,my-common-tasks
)。原因是Node.js中模塊加載的方式起作用,最終得到兩個gulp
實例:一個位於my-common-tasks
,另一個位於my-app
。您的任務將在my-common-tasks
的實例中定義,但gulp
CLI將從my-app
查找實例中的任務。
相反,你必須在gulp
實例傳遞從my-app
到my-common-tasks
:
我的常見任務/ gulpfile.js:
module.exports = function(gulp) {
gulp.task('common-task', function() { });
};
我的應用程序內/ gulpfile.js:
var gulp = require('gulp');
require('my-common-tasks')(gulp);
gulp.task('sub-task', [ 'common-task' ], function() { });
是的,這就是我想的。但我的項目在物理上是分開的。這就是爲什麼我正在考慮將「父」gulp文件打包到一個簡單的節點模塊中,將其用作子項目的依賴項,並從node_modules加載父gulp任務。這聽起來像是一個可靠的解決方案嗎? – cschuff
您也可以從節點環境變量中加載數據。這也很容易。 –
@cschuff看我的編輯。 –