我目前正在使用requirejs,为此我开始编写一个小包。该软件包包含一个main.js
,应用程序的入口点以及将通过调用main.js
加载到require
的其他几个模块。
该软件包有几个可以在运行时配置的选项,以便于维护我有一个在需要时加载的中心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
功能实现(代码不多,但代码多于无代码)加上我有两点寻找可能的配置错误,这使得更难找到错误。
所以现在我正在寻找一种更好的方法来传递一个包范围的配置,同时试图避免多个故障点。 (如果我不想对它们进行硬编码,这可能很难在某处我存储默认值。)当然,解决方案不应该依赖于任何其他库或我自己的extend
功能。
答案 0 :(得分:0)
在与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
}
}
});