我目前正在研究 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
功能。