javascript - requirejs 包的预设包范围配置

标签 javascript configuration package requirejs

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

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

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

我当前的方法(带有 configuration.js 的方法)是将给 requirejs 的配置与我的 configuration.js 的内容合并到 main.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();
});

anyotherfile.js

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
    };
});

这种设置配置选项的方式使我依赖于额外的库或我自己的 extend 功能实现(代码不多,但代码仍然比没有代码多)加上有两点我必须查找可能的配置错误,这使得查找错误变得更加困难。

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

最佳答案

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

文件示例configuration.js

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 中你必须解决 package/configuration而不是package .

requirejs.config 的示例

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

关于javascript - requirejs 包的预设包范围配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12686710/

相关文章:

javascript - 使用 jquery 将 css 类添加到行的特定列

使用 POST 上传 PHP 图片

r - 生存包错误R

javascript - 如何使用 Array.sort() 正确排序数字?

javascript - jQuery 中的一个简单字典列表

javascript - 为什么 module.exports 可以保存一个 String 对象和一个模块实例,而不是一个 String 文字和一个模块实例?

c# - 逐步应用更好的设计

configuration - Rails 5 测试版 : Put eager_load_paths config on initializer throw frozen array exception

python - 包括带有 python 模块的二进制文件,这样做是好的做法吗?

java - 是否可以将 Android 包导入普通的 Java 代码