我们正在构建一个使用一组REST API的主干应用程序。我们理想的做法是为dev和live提供不同的配置文件,这些配置文件由环境变量决定。是否可能。
提前致谢
答案 0 :(得分:11)
我建议您以这样的方式拥有一个文件:
var YourProject = {};
YourProject.Config = {
Local : {
db : 'mysql:dumy:dummy@localhost',
relativeUrl : 'blabla',
otherConfig : '123456'
},
Dev : {
db : 'mysql:dumy:dummy@localhost',
relativeUrl : 'blabla',
otherConfig : '123456'
},
Production : {
db : 'mysql:dumy:dummy@localhost',
relativeUrl : 'blabla',
otherConfig : '123456'
}
}
然后在你的实用程序中有这样的东西:
YourProject.ConfigHandler = {
getValue : function(key){
var env;
switch( window.location.hostname ){
case "localhost":
case "127.0.0.1":
env = 'Local';
break;
case "dev.yourdomain.com":
env = 'Dev';
break;
case "yourdomain.com":
env = 'Production';
break;
default:
throw('Unknown environment: ' + window.location.hostname );
}
return YourProject.Config[env][key];
}
};
因此,您只需要一个文件,而对于不同的API DB URL,您只需要调用一行:
YourProject.ConfigHandler.getValue( 'db' );
答案 1 :(得分:2)
您的问题可以针对任何JavaScript应用程序,而不仅仅是骨干应用程序,因此以下答案更为通用:
我所做的是有一个config.js文件,这是HTML中加载的第一件事。内容只是一个配置的JSON对象:
var CONFIG = {
debug : false,
server : 'http://production.foo.com'
};
现在,您的应用的每个组件都可以访问配置,因为CONFIG是一个全局对象。所以你可以在你的应用程序的任何地方写这个:
if (CONFIG.debug) {
console.log('my debug stuff...');
}
诀窍是拥有2个config.js文件。一个用于开发,一个用于生产。如果要发布应用程序,请捆绑生产config.js文件并将其上载到服务器。
您可以创建构建脚本来构建生产应用程序。作为第一步,它可以将正确的config.js文件复制到正确的位置。您还可以添加步骤来缩小js文件,将它们捆绑到一个文件中等等。
答案 2 :(得分:1)
我改编了Daniel对Coffeescript / CommonJS的好回答,所以在config.coffee
我有:
env = switch window.location.hostname
when "localhost", "127.0.0.1"
"development"
when "www.example.com", "example.com"
"production"
config =
development:
urlRoot: "http://localhost:3000"
production:
urlRoot: "http://www.example.com"
module.exports = config[env]
然后客户端代码如下:
config = require("config")
config.urlRoot