Javascript requirejs包的预设包范围配置
我目前正在编写requirejs,为此我开始编写一个小程序包。该包包括一个Javascript requirejs包的预设包范围配置,javascript,configuration,package,requirejs,Javascript,Configuration,Package,Requirejs,我目前正在编写requirejs,为此我开始编写一个小程序包。该包包括一个main.js、应用程序的入口点和几个其他模块,这些模块将通过调用require加载到main.js 这个包有几个选项可以在运行时配置,为了便于维护,我有一个中央configuration.js,可以在需要时加载。configuration.js的内容只是一个将键映射到值的对象,没有任何功能或任何东西。只是一个键值映射 现在requirejs允许向包传递选项,配置是通过requirejs配置完成的。我的问题是,它只在mai
main.js
、应用程序的入口点和几个其他模块,这些模块将通过调用require
加载到main.js
这个包有几个选项可以在运行时配置,为了便于维护,我有一个中央configuration.js
,可以在需要时加载。configuration.js
的内容只是一个将键映射到值的对象,没有任何功能或任何东西。只是一个键值映射
现在requirejs允许向包传递选项,配置是通过requirejs配置完成的。我的问题是,它只在main.js
中可用,而在包中的其他模块中不可用,而且我无法找到设置默认值的方法,除非我将它们硬编码到main.js
中
我目前的方法(使用configuration.js
)是将给定给requirejs的配置与main.js
中我的configuration.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();
});
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
};
});
define(function(require, exports, module) {
var $ = require('jquery'); // need jQuery for extend
var config = {
key: value,
...
};
return $.extend(true, config, module.config());
});
anyotherfile.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();
});
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
};
});
define(function(require, exports, module) {
var $ = require('jquery'); // need jQuery for extend
var config = {
key: value,
...
};
return $.extend(true, config, module.config());
});
这种设置配置选项的方式使我依赖于一个额外的库或我自己的扩展
功能的实现(代码不多,但代码比没有代码还要多),另外还有两点我必须查找可能的配置错误,这使得查找错误变得更加困难
因此,现在我正在寻找一种更好的方法来传递包范围的配置,同时尝试避免多个故障点。(这可能很难,因为如果我不想硬编码默认值,我必须在某个地方存储它们。)当然,解决方案不应该依赖于任何其他库或我自己的
扩展功能。在与jrburke讨论了这个问题后,最好的解决方案是在configuration.js
中扩展配置数组
文件configuration.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();
});
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
};
});
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
中,您必须解决
包/配置
而非包
requirejs.config的示例
requirejs.config({
config: {
"package/configuration": {
key: value
}
}
});