2016-01-11 33 views
1

我的團隊目前在多個項目上工作,這些項​​目都有自己的gruntfile.js文件。但他們都是一樣的,複製粘貼在每個新項目上......哪一個都不好!如何在多個項目之間共享gruntfile.js文件或grunt任務?

我正在尋找一種方法來維護只有一個gruntfile.js並共享所有項目之間的最新版本。我看到這樣的方法有兩種:部署共享gruntfile.js通過我們的內部網絡和訪問了一些路徑...

  • ...在每次調用使用grunt --gruntfile = /path/to/share/gruntfile.js taskName到咕嚕任務的任何項目目錄內。 Jenkins構建可以使共享文件保持最新,並在提交時重新部署它。通過這種方式,一個項目不再有自己的gruntfile.js文件。

  • ...正確gruntfile.js每個項目的裏面,找到一個方法來告訴咕嚕進口一切(任務,configInit等)共享gruntfile.js聲明。就像使用Maven pom.xml文件來完成父級pom一樣。

有沒有人看到一個或兩個解決方案不工作的原因?

有沒有人知道一個簡單的方法來做到這一點,也許使用現有的工具或插件?

編輯:我們使用SVN,而不是GIT。

+0

爲什麼不有一個grunt文件,並有建設任務參數,參數是什麼目錄建立?然後檢查它的來源,你很好。 –

+0

我可能會採用第二種方法,它似乎是最具擴展性和可移植性的想法。 –

+0

@still_learning:這也是我更喜歡的解決方案。但這是我不知道該怎麼做的。 :( – Eria

回答

1

最後,我找到了一種在多個項目上共享任務聲明的方法:我創建了一個自定義的grunt插件。這個插件包含:

custom-grunt-plugin 
|_ config 
    |_ config.js : contains all the tasks configurations 
|_ tasks 
    |_ custom-grunt.js : contains all the tasks declarations 
|_ package.json : package info 
|_ README.md : package documentation 

我發佈了我的插件,並添加它作爲devDependency我所有的項目。

最後,我的所有項目的grunfile.js:

module.exports = function (grunt) { 

    // Load custom tasks 
    grunt.loadNpmTasks('custom-grunt-plugin'); 

    // Load grunt tasks automatically 
    require('load-grunt-tasks')(grunt); 

    // Load configuration from the custom grunt plugin 
    var config = require('custom-grunt-plugin/config/config'); 

    // Add project specific variables to the config 
    config.pkg = grunt.file.readJSON('package.json'); 
    config.paths = { 
    app: 'app', 
    dist: 'dist/<%= pkg.name %>/<%= pkg.version %>' 
    };  

    grunt.initConfig(config); 

}; 

這一切!可能不是最好的解決方案。但是這個工作。

下一步是將項目的package.json中的依賴項列表傳遞給自定義插件的package.json,並使用'npm install'遞歸地安裝所有依賴項。但似乎npm無法加載和安裝依賴關係的依賴關係...

相關問題