2014-09-19 67 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构建项目时将替换这些文件。这些配置只是复制生成解决方案,而不是软链接文件。

我希望是有道理的..