我正在创建一个单页应用程序并使用带有requirejs的主干。现在我想根据环境变量包含不同的配置。我不知道如何做到这一点以及最佳做法是什么。
我有三个不同的配置文件:
config.js
:这保留了常见的配置。
config.dev.js
:这可以保持特定于开发环境的配置
config.production.js
:这会保留特定于生产的配置
我正在从环境特定模型扩展Config模型(在config.js中),我需要来自其他模块的Config模型。 这工作正常,但下载开发和生产配置文件。我只想加载config.dev.js或config.production.js而不是两者。
// config.js
define([
'backbone',
'modules/config/config.dev',
'modules/config/config.production'
], function(Backbone, DevConfig, ProdConfig) {
// Select environment model
EnvConfig = (ENV == 'dev') ? DevConfig : ProdConfig;
var ConfigModel = EnvConfig.extend({
// Extending attributes.
defaults: _.extend({
foo : 'bar'
}, EnvConfig.prototype.defaults)
});
return new ConfigModel();
});
在其他模块中,我使用Config作为以下样式:
define([
'backbone',
'modules/config/config'
], function(Backbone, Config) {
var ProfileModel = Backbone.Model.extend({
urlRoot: Config.get('apiRoot') + '/profiles'
...
});
return ProfileModel;
});
如何加载开发或生产特定的配置文件之一,而不是两者?
答案 0 :(得分:3)
我不确定ENV
变量的来源,但假设它只是一个全局变量,你可以这样做:
<强>的index.html 强>
<script type="text/javascript">
// adding it here so the example works on its own
window.ENV = 'production'; // or 'dev'
// this will be added to RequireJS configuration
var require = {
paths: {
// 'env-config' will be an alias for actual file name
'env-config': 'config.' + window.ENV
}
};
</script>
<script data-main="scripts/main" src="scripts/requirejs.js"></script>
<强> config.dev.js:强>
define({
'env': 'development!'
});
<强> config.production.js:强>
define({
'env': 'production!'
});
<强> main.js:强>
require(['config', 'env-config'], function(conf, envConfig) {
console.log('The environment is: ', envConfig.env);
});