【问题标题】:How to load environment specific configuration with requirejs?如何使用 requirejs 加载特定于环境的配置?
【发布时间】:2013-04-21 10:48:21
【问题描述】:

我正在制作一个单页应用程序并使用带有 requirejs 的主干。现在我想根据环境变量包含不同的配置。我不知道该怎么做以及最佳做法是什么。

我有三个不同的配置文件:

config.js : 这保持通用配置。

config.dev.js :这会保留开发环境的特定配置

config.production.js :这会保留生产特定的配置

我正在从特定于环境的模型扩展配置模型(在 config.js 中),并且我需要来自其他模块的配置模型。 这工作正常,但同时下载开发和生产配置文件。我只想加载 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;
});

如何加载开发或生产特定配置文件之一,而不是两者?

【问题讨论】:

  • 所以你的问题是它下载了两个文件?
  • 是的。我只想下载。 config.dev.jsconfig.production.js,不能同时使用。
  • 也许你可以找到一种使用require的方法,但因为它是异步的......
  • 如何返回带有require 的配置模型?我正在尝试使用 require 但定义从模块返回 unifened 因为异步。

标签: backbone.js requirejs


【解决方案1】:

我不确定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!'
}); 

ma​​in.js:

require(['config', 'env-config'], function(conf, envConfig) {
   console.log('The environment is: ', envConfig.env);
});

【讨论】:

  • 我将paths 移到main.js 中,它仍然有效,所以env.js 只包含window.ENV = "production";
猜你喜欢
  • 1970-01-01
  • 2018-01-20
  • 2011-06-28
  • 1970-01-01
  • 1970-01-01
  • 2013-08-16
  • 2014-04-25
  • 1970-01-01
  • 2019-08-24
相关资源
最近更新 更多