Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 如何使用requirejs加载特定于环境的配置?_Backbone.js_Requirejs - Fatal编程技术网

Backbone.js 如何使用requirejs加载特定于环境的配置?

Backbone.js 如何使用requirejs加载特定于环境的配置?,backbone.js,requirejs,Backbone.js,Requirejs,我正在制作一个单页应用程序,并使用requirejs的主干。现在,我想根据环境变量包括不同的配置。我不知道如何才能做到这一点,什么是最佳实践 我有三个不同的配置文件: config.js:这将保留常见的配置 config.dev.js:这将保留特定于开发环境的配置 config.production.js:这将保留特定于生产的配置 我正在从特定于环境的模型扩展配置模型(在Config.js中),并且我需要其他模块的配置模型。 这可以正常工作,但是下载dev和production-config文件

我正在制作一个单页应用程序,并使用requirejs的主干。现在,我想根据环境变量包括不同的配置。我不知道如何才能做到这一点,什么是最佳实践

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

config.js
:这将保留常见的配置

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

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

我正在从特定于环境的模型扩展配置模型(在Config.js中),并且我需要其他模块的配置模型。 这可以正常工作,但是下载dev和production-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();

});
在其他模块中,我使用的配置样式如下:

define([
    'backbone',
    'modules/config/config'
], function(Backbone, Config) {

    var ProfileModel = Backbone.Model.extend({
        urlRoot: Config.get('apiRoot') + '/profiles'

        ...
    });

    return ProfileModel;
});

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

我不确定
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.production.js:

define({
    'env': 'development!'
}); 
define({
    'env': 'production!'
}); 
require(['config', 'env-config'], function(conf, envConfig) {
   console.log('The environment is: ', envConfig.env);
});
main.js:

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

所以你的问题是它同时下载两个文件?是的。我想下载只需要
config.dev.js
config.production.js
,不是两者都有。也许您可以找到一种方法来使用
require
,但由于它是异步的…我如何返回带有
require
的配置模型?。我正在尝试使用require,但由于异步,因此定义返回未从模块中隔离。我将
路径
移动到
main.js
中,它仍然有效,因此
env.js
只包含
window.env=“production”