Angular/RequireJS应用程序配置文件的最佳方法是什么?

6

在客户端上维护配置文件的最佳实践是否有共识(类似于 ASP.NET 应用程序中的服务器端的 AppSettings 部分)?

我们的应用程序基于 Angular。 我们希望将特定于环境的设置(如远程系统 URL 等)从代码本身外部化,这样理想情况下,运维人员而不是开发人员可以在一个地方修改设置。

提前感谢您的任何见解!


1
你可以将设置保存在专用的config.js文件中,编辑JSON并不比编辑XML更困难。 - Guillaume86
1
关于Angular,也许这个答案可以进一步启发您 https://dev59.com/82Qo5IYBdhLWcg3wE7-2 - kfis
3个回答

4
我认为在开发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)。


1
我认为这个答案非常依赖于你如何在整个应用程序的结构中设置angular层。例如,我已经为每个环境从基础服务器应用程序(Grails、node.js、RoR)提供了相同的angular应用程序,并且angular应用程序始终是相同的代码库,因为我向angular提供的数据受到服务器端的控制,而angular调用都是相对于基本URL的。换句话说,我通过服务于Angular应用程序的服务器应用程序代理所有数据,因此Angular应用程序“知道”的只有自己的URL。如果您直接调用其他服务而不使用基础服务器应用程序来代理数据,则也许您仍然可以使用服务器来提供url,具体取决于应用程序的服务器端上的某些配置。在这种情况下,您可以始终将这些配置值存储在数据库表中,以便可以实时更改它们。

1
我有同样的困惑,目前我采取的解决方法是: 我有一组配置文件,如config-local.js、config-staging.js等。 然后我在任何想运行我的应用程序的地方创建一个到config.js的符号链接。 在我的本地桌面上,我将符号链接创建到config-local.js,在staging环境中,我将符号链接创建到config-staging.js。 然后我在.gitignore中放置了config.js。
优点:它可以工作。 缺点:需要在应用程序正确工作之前创建符号链接。
未来:也许可以在grunt中添加一个任务来创建符号链接?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接