2013-05-02 65 views
6

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

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

在此先感谢您的任何见解!

+1

您可以将设置保存在专用配置中。js文件,编辑JSON并不困难然后编辑XML – Guillaume86 2013-05-02 20:13:53

+1

关于Angular,也许这个答案可以激发你更多 http://stackoverflow.com/questions/16339595/angular-js-configuration-for-different-enviroments – kfis 2013-05-03 07:38:32

回答

1

我认为这个问题的答案非常依赖于你如何在应用程序的整体结构中设置角度层。例如,我已经为来自基本服务器应用程序(Grails,node.js,RoR)的每个环境提供了一个角度应用程序,并且角度应用程序始终是相同的代码库,因为我要馈送的数据角度由服务器端控制,角度调用都是相对于基本URL。换句话说,我通过提供Angular应用程序的服务器应用程序代理所有数据,所有角度应用程序“知道”的是它自己的url。

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

1

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

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

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

3

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

相关问题