2016-03-24 31 views
1

我正在使用node/gulp來運行/構建我的項目。在這些項目中,我的g look文件看起來非常相似。由於我來自Java/Maven背景,所以我正在尋找某物。像一個父gulpfile可以繼承基本任務(這很容易通過maven中的父pom.xml實現)。gulp,父gulpfile.js中的任務繼承

這是以某種方式構建成吞嚥,有沒有模塊做這個或我需要自己來確定?

我能想到的,其具有節點模塊裏什麼也不做,然後提供一個可能需要從他的依賴一飲而盡文件的基本一飲而盡任務。任何這種方法的經驗?

BR 克里斯

回答

3

你可以只導出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() { }); 

運行subtaskproject/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-appmy-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() { }); 
+0

是的,這就是我想的。但我的項目在物理上是分開的。這就是爲什麼我正在考慮將「父」gulp文件打包到一個簡單的節點模塊中,將其用作子項目的依賴項,並從node_modules加載父gulp任務。這聽起來像是一個可靠的解決方案嗎? – cschuff

+0

您也可以從節點環境變量中加載數據。這也很容易。 –

+0

@cschuff看我的編輯。 –