gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 09:38:26 25 4
gpt4 key购买 nike

我目前正在研究 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com