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

时间:2013-05-02 18:25:04

标签: javascript configuration angularjs

是否有一个普遍接受的最佳实践来维护客户端可用的配置文件(在ASP.NET应用程序中与服务器端的AppSettings部分等效)?

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

提前感谢任何见解!

3 个答案:

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

我认为这个问题的答案非常依赖于如何在应用程序的整体结构中设置角度层。

例如,我已经从基本服务器应用程序(Grails,node.js,RoR)以相同的方式为角度应用程序提供角度应用程序,并且角度应用程序始终是相同的代码库,因为我提供的数据angular由服务器端控制,角度调用都是相对于基本URL的。换句话说,我通过提供Angular应用程序的服务器应用程序代理所有数据,因此所有角度应用程序“知道”都是它自己的URL。

如果您直接调用其他服务而不使用基本服务器应用程序来代理数据,那么根据应用程序服务器端的某些配置,您仍然可以使用服务器为您提供网址。在这种情况下,您始终可以将这些配置值存储在数据库表中,以便可以即时更改它们。

答案 2 :(得分:1)

我有同样的困境,我现在所采取的措施是: 我有一组配置文件,如config-local.js,config-staging.js等。 然后我在config.js的任何地方创建一个符号链接,我想运行我的应用程序。 在我的本地桌面上,我在config-local.js中进行了符号链接,在staging环境中,我将符号连接到config-staging.js。 然后我将config.js放在.gitignore中。

优点:它有效。 缺点:在应用程序正常工作之前需要创建符号链接。

未来:也许在grunt中添加一个任务来创建符号链接?

相关问题