Javascript requirejs包的预设包范围配置

Javascript requirejs包的预设包范围配置,javascript,configuration,package,requirejs,Javascript,Configuration,Package,Requirejs,我目前正在编写requirejs,为此我开始编写一个小程序包。该包包括一个main.js、应用程序的入口点和几个其他模块,这些模块将通过调用require加载到main.js 这个包有几个选项可以在运行时配置,为了便于维护,我有一个中央configuration.js,可以在需要时加载。configuration.js的内容只是一个将键映射到值的对象,没有任何功能或任何东西。只是一个键值映射 现在requirejs允许向包传递选项,配置是通过requirejs配置完成的。我的问题是,它只在mai

我目前正在编写requirejs,为此我开始编写一个小程序包。该包包括一个
main.js
、应用程序的入口点和几个其他模块,这些模块将通过调用
require
加载到
main.js

这个包有几个选项可以在运行时配置,为了便于维护,我有一个中央
configuration.js
,可以在需要时加载。
configuration.js
的内容只是一个将键映射到值的对象,没有任何功能或任何东西。只是一个键值映射

现在requirejs允许向包传递选项,配置是通过requirejs配置完成的。我的问题是,它只在
main.js
中可用,而在包中的其他模块中不可用,而且我无法找到设置默认值的方法,除非我将它们硬编码到
main.js

我目前的方法(使用
configuration.js
)是将给定给requirejs的配置与
main.js
中我的
configuration.js
的内容合并

main.js

define(function(require, exports, module) {
    var $ = require('jquery'); // Could be any library that offers an "extend"
                               // feature that allows "deep" copies.

    var config = require('configuration'); // Load configuration file

    $.extend(true, config, module.config()); // Overwrite default values with 
                                             // set values


    var otherfile = require('anyotherfile);
    otherfile();
});
define(function(require, exports, module) {
    var config = require('config'); // Loads configuration, package-wide
                                    // options are set

    // module.config() will be empty. Unless I explicicy specify the
    // configuration for this one module in the "requirejs.config"

    return function() {
        // Something that can be configured
    };
});
define(function(require, exports, module) {
    var $ = require('jquery'); // need jQuery for extend
    var config = {
        key: value,
        ...
    };
    return $.extend(true, config, module.config());
});
anyotherfile.js

define(function(require, exports, module) {
    var $ = require('jquery'); // Could be any library that offers an "extend"
                               // feature that allows "deep" copies.

    var config = require('configuration'); // Load configuration file

    $.extend(true, config, module.config()); // Overwrite default values with 
                                             // set values


    var otherfile = require('anyotherfile);
    otherfile();
});
define(function(require, exports, module) {
    var config = require('config'); // Loads configuration, package-wide
                                    // options are set

    // module.config() will be empty. Unless I explicicy specify the
    // configuration for this one module in the "requirejs.config"

    return function() {
        // Something that can be configured
    };
});
define(function(require, exports, module) {
    var $ = require('jquery'); // need jQuery for extend
    var config = {
        key: value,
        ...
    };
    return $.extend(true, config, module.config());
});
这种设置配置选项的方式使我依赖于一个额外的库或我自己的
扩展
功能的实现(代码不多,但代码比没有代码还要多),另外还有两点我必须查找可能的配置错误,这使得查找错误变得更加困难


因此,现在我正在寻找一种更好的方法来传递包范围的配置,同时尝试避免多个故障点。(这可能很难,因为如果我不想硬编码默认值,我必须在某个地方存储它们。)当然,解决方案不应该依赖于任何其他库或我自己的
扩展功能。

在与jrburke讨论了这个问题后,最好的解决方案是在
configuration.js
中扩展配置数组

文件
configuration.js的示例

define(function(require, exports, module) {
    var $ = require('jquery'); // Could be any library that offers an "extend"
                               // feature that allows "deep" copies.

    var config = require('configuration'); // Load configuration file

    $.extend(true, config, module.config()); // Overwrite default values with 
                                             // set values


    var otherfile = require('anyotherfile);
    otherfile();
});
define(function(require, exports, module) {
    var config = require('config'); // Loads configuration, package-wide
                                    // options are set

    // module.config() will be empty. Unless I explicicy specify the
    // configuration for this one module in the "requirejs.config"

    return function() {
        // Something that can be configured
    };
});
define(function(require, exports, module) {
    var $ = require('jquery'); // need jQuery for extend
    var config = {
        key: value,
        ...
    };
    return $.extend(true, config, module.config());
});
因此不再需要在
main.js
中执行此操作

这种方法的唯一缺点是,在
requirejs.config
中,您必须解决
包/配置
而非

requirejs.config的示例

requirejs.config({
    config: {
        "package/configuration": {
             key: value
        }
    }
});