2014-09-19 109 views
1

與大多數js網絡應用程序一樣,我們有一個config.js文件,其中包含有關應用程序的全局配置信息,base api網址等。這些價值在地方發展中往往不同於生產。gruntjs/angularjs - 可選的開發配置?

我已經看過類似如下的答案:Development mode for AngularJS using GruntJS,還有像grunt-replace這樣的用於創建動態配置文件的東西。

我的問題是,「開發」部分因開發人員不同而不同,我們都需要一個API設置版本,因此基本API會有所不同。我希望允許每個開發人員以不需要他們將該信息提交給git倉庫的方式覆蓋配置中的特定變量(我同意這不是最佳實踐,所有內容都應該在倉庫中,但因爲這只是該項目的1/2變量,所以我可以忽略它)

有關如何實現此設置的任何想法?

回答

1

您可以使用grunt-preprocess。我會在文件中生成(和dev-server等)值,例如env.json。您可以使用grunt來查找可選文件,如overrides.jsondeveloper.json,這將擴展/覆蓋env.json中的值。

var envFile = require('./env.json'); 

您可以創建命令行選項grunt.option,例如以咕嚕var env = grunt.option('env') || undefined;,可用於關閉覆蓋。

可以使用fs.existsSync得到可選的文件數據:

var fs = require('fs'); 
var developerFile; 
if (fs.existsSync('./developer.json')) { 
    developerFile = require('./developer.json'); 
} 

定義咕嚕-預處理方面是,如果目前使用developer.json文件最簡單的辦法,或者env.json文件,如果沒有:

context: developerFile ? developerFile : envFile; 

這要求開發者文件是完整的。另一種方法是使用developerFile中的選項擴展envFile(如果存在)。

+0

我喜歡這樣的聲音。你可以擴展一些細節嗎?你如何使用grunt來查找可選文件?因爲那是我無法解決的問題。 – ptr 2014-09-19 08:06:21

+0

我更新了我的答案:) – Mikke 2014-09-19 08:18:35

+0

優秀,整潔的把戲:) – ptr 2014-09-19 09:01:25

1

在我的項目中,我們使用不同的配置文件(基本上是帶有JS對象的文件)。所以每個開發者都有他的app/configs/developer/config.js文件,這個文件在源代碼控制中沒有提到,所以每個開發者都有自己的設置。項目默認使用app/scripts/config.js鏈接,該文件只是開發者配置文件的軟鏈接。但是,也有app/configs/staging/config.jsapp/configs/production/config.js文件,使用gruntjj構建項目時將替換這些文件。這些配置只是複製生成解決方案,而不是軟鏈接文件。

我希望是有道理的..