我目前正在將自己的工作轉移到requirejs,爲此我開始編寫一個小軟件包。該軟件包由一個main.js
(應用程序的入口點)和若干其他模塊組成,這些模塊將通過致電require
加載到main.js
中。requirejs軟件包的預置軟件包配置
該軟件包有幾個選項,可以在運行時配置,以便於維護我有一箇中心的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
。