是否有一种普遍接受的最佳实践来维护客户端可用的配置文件(类似于 ASP.NET 应用程序中服务器端的 AppSettings 部分)?
我们的应用程序基于 Angular。我们的愿望是从代码本身外部化特定于环境的设置(如远程系统 URL 等),以便理想情况下运维人员而不是开发人员可以在一个地方修改设置。
提前感谢您的任何见解!
是否有一种普遍接受的最佳实践来维护客户端可用的配置文件(类似于 ASP.NET 应用程序中服务器端的 AppSettings 部分)?
我们的应用程序基于 Angular。我们的愿望是从代码本身外部化特定于环境的设置(如远程系统 URL 等),以便理想情况下运维人员而不是开发人员可以在一个地方修改设置。
提前感谢您的任何见解!
我认为在开发 AngularJS 应用程序时使用 config.js 文件不是一个好主意。原因是,您将打破自动测试的任何可能性。
相反,我创建了一个“设置”服务,在其中我指定了我的应用程序特定的上下文。例如:
angular.module('settings',[]).factory('SettingsService',function(){
var service={};
// Insert your settings here
service.ServerPath = 'whateverwhatever';
service.ImagePath = 'bla bla bal';
return service;
});
然后将 SettingsService 注入需要访问设置的控制器中。
当然,(为了简单起见,我在这里省略了),您可以改为使用空主体创建 ServiceService,然后在应用程序的 .run() 方法中从服务器获取设置。
我使用简单描述的方式,并为每种部署类型(“开发”、“测试”、“生产”等)维护一个 SettingsService。然后根据目标在构建脚本中包含正确的 SettingsService(我使用 Grunt,但您也可以使用 Ant)。
我也有同样的困境,我现在求助的是:我有一组配置文件,如 config-local.js、config-staging.js 等。然后我在任何地方创建一个指向 config.js 的符号链接我想运行我的应用程序。在我的本地桌面上,我符号链接到 config-local.js,在暂存环境中,我符号链接到 config-staging.js。然后我把 config.js 放到 .gitignore 中。
优点:它有效。缺点:需要在应用程序正常工作之前创建符号链接。
未来:也许在 grunt 中添加一个任务来创建符号链接?
我认为这个问题的答案很大程度上取决于你如何在应用程序的整体结构中设置你的角度层。
例如,我为基础服务器应用程序(Grails、node.js、RoR)的每个环境提供了一个角度应用程序,并且角度应用程序始终是相同的代码库,因为我提供给角度的数据是受控制的由服务器端和角度调用都是相对于基本 URL。换句话说,我通过为 Angular 应用程序提供服务的服务器应用程序代理所有数据,因此所有 Angular 应用程序“知道”都是它自己的 url。
如果您直接调用其他服务而不使用基本服务器应用程序来代理数据,那么也许您仍然可以使用服务器为您提供 url,具体取决于应用程序服务器端的某些配置。在这种情况下,您始终可以将这些配置值存储在数据库表中,以便随时更改它们。