与大多数js网络应用程序一样,我们有一个config.js文件,其中包含有关应用程序,基本API等的全局配置信息。这些价值在地方发展中往往与生产中不同。
我已经查看过像Development mode for AngularJS using GruntJS这样的答案,还有像grunt-replace这样的内容,用于创建即时配置文件。
我的问题是"开发"部分因开发人员而异,我们都需要一个API设置版本,因此基本API会有所不同。我希望允许每个开发人员以一种不要求他们将该信息提交给git repo的方式覆盖配置中的特定变量(我同意这不是最佳实践,一切应该在回购中,但由于这只是该项目的1/2变量,我可以忽略它。)
有关如何实现此设置的任何想法?
答案 0 :(得分:1)
在我的项目中,我们使用不同的配置文件(基本上是带有JS对象的文件)。因此,每个开发人员都有他的app/configs/developer/config.js
文件,该文件未在源代码管理中进行注释,因此每个开发人员都有自己的设置。项目默认使用app/scripts/config.js
的链接,此文件只是开发人员配置文件的软链接。但是,还有app/configs/staging/config.js
和app/configs/production/config.js
个文件,在使用gruntjj构建项目时会被替换。这些配置只是复制到构建解决方案而不是软链接文件。
我希望这是有道理的。
答案 1 :(得分:1)
您可以使用grunt-preprocess。我会在文件中生成(和dev-server等)值,比如env.json
。您可以使用grunt查找可选文件,例如overrides.json
或developer.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');
}
定义grunt-preprocess上下文的最简单方法是使用developer.json
文件(如果存在)或env.json
文件(如果不存在):
context: developerFile ? developerFile : envFile;
这需要开发人员文件完整。另一种方法是使用developerFile中的选项扩展envFile(如果它存在)。