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