gruntjs / angularjs - 可选的开发配置?

时间:2014-09-19 07:32:55

标签: angularjs gruntjs typescript

与大多数js网络应用程序一样,我们有一个config.js文件,其中包含有关应用程序,基本API等的全局配置信息。这些价值在地方发展中往往与生产中不同。

我已经查看过像Development mode for AngularJS using GruntJS这样的答案,还有像grunt-replace这样的内容,用于创建即时配置文件。

我的问题是"开发"部分因开发人员而异,我们都需要一个API设置版本,因此基本API会有所不同。我希望允许每个开发人员以一种不要求他们将该信息提交给git repo的方式覆盖配置中的特定变量(我同意这不是最佳实践,一切应该在回购中,但由于这只是该项目的1/2变量,我可以忽略它。)

有关如何实现此设置的任何想法?

2 个答案:

答案 0 :(得分:1)

在我的项目中,我们使用不同的配置文件(基本上是带有JS对象的文件)。因此,每个开发人员都有他的app/configs/developer/config.js文件,该文件未在源代码管理中进行注释,因此每个开发人员都有自己的设置。项目默认使用app/scripts/config.js的链接,此文件只是开发人员配置文件的软链接。但是,还有app/configs/staging/config.jsapp/configs/production/config.js个文件,在使用gruntjj构建项目时会被替换。这些配置只是复制到构建解决方案而不是软链接文件。

我希望这是有道理的。

答案 1 :(得分: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');
}

定义grunt-preprocess上下文的最简单方法是使用developer.json文件(如果存在)或env.json文件(如果不存在):

context: developerFile ? developerFile : envFile;

这需要开发人员文件完整。另一种方法是使用developerFile中的选项扩展envFile(如果它存在)。