[英]require.js require a module with index.js
所以我正在嘗試設置Typescript和Chutzpah用於測試目的。 Typescript設置為以這種格式輸出:
define(['require', 'exports', './someModule'], function(require, exports, someModule) {
//examplecode
});
哪個工作正常,當someModule實際上是一個index.js目錄時,會出現問題。
/app
app.js
/someModule
index.js
require.js無法以這種方式解析someModule並且測試失敗。
有沒有辦法告訴require.js這是一個模塊?
RequireJS不會自動檢查是否存在index.js
並將其作為模塊加載。 你需要告訴RequireJS,當你想加載someModule
,它應該加載someModule/index
。 我在調用require.config
設置了一個map
:
require.config({
[ ... ]
map: {
'*': {
someModule: 'someModule/index',
}
},
});
您必須調整您在那里提供的名稱,以便它是相對於您的baseUrl
的路徑。 從你在問題中提供的信息來看,這一點並不清楚。
(為了記錄,還有一個packages
設置,您可以調整以執行您想要的操作但放置一些packages
說“這是一個軟件包”,這不是您在此處所看到的。所以我不會將它用於什么你正試圖這樣做。)
我也不喜歡map
的配置。 我完成此操作的最簡單方法是編寫一個require的插件。
讓我們命名插件mod
,它是用來作為mod!module/someModule
,你也可以把它稱為index
作為index!module/someModule
,不管你最適合。
define(function(require, exports, module) {
// loading module/someModule/index.js with `mod!`
var someModule = require('mod!module/someModule');
// whatever this is about ..
module.exports = { .. };
});
因此,假設您在require的配置中設置了某種項目結構的paths
:
- app
- modules
- someModule/index.js // the index we want to load
- someModule/..
- someModule/..
- etc
- plugins
- mod.js // plugin to load a module with index.js
需要配置:
require.config({
paths: {
'module': 'app/modules',
// the plugin we're going to use so
// require knows what mod! stands for
'mod': 'app/plugins/mod.js'
}
});
要閱讀有關如何編寫插件的所有方面,請閱讀requirejs.org上的文檔 。 最簡單的版本是重寫您嘗試訪問的請求“模塊”的name
,並將其傳遞回load
。
應用程序/插件/ mod.js
(function() {
define(function () {
function parse(name, req) {
return req.toUrl(name + '/index.js');
}
return {
normalize: function(name, normalize) {
return normalize(name);
},
load:function (name, req, load) {
req([parse(name, req)], function(o) {
load(o);
});
}
};
});
})();
這不是生產代碼 ,它只是一種簡單的方式來證明需要配置並不意味着解決這樣的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.