我在寫一個使用TypeScript,Backbone和Mustache的Web應用程序。我想使用Requirejs進行依賴加載。從requirejs映射調用文本插件
我還在使用打開AMD編譯選項的TypeScript的Web Essentials visual studio插件。對於那些不熟悉這個的人來說,如果你導入外部模塊,它會把你的類型腳本文件包裝在AMD模塊中。 例如:
在類型腳本中,我將以下模塊導入到類型定義文件中。
export import Backbone = module("Backbone");
import mainTemplate = module("MainTemplate");
的輸出是一樣的東西:
define(["require", "exports", "Backbone", "MainTemplate"], function(require, exports, __Backbone__, __mainTemplate__) {
//...code goes here ...
});
爲模板,我宣佈一個類型定義文件中的以下內容:
declare module "MainTemplate" { }
爲了支持requirejs插件,您需要聲明您的模塊爲:
declare module "text!MainTemplate.html" { }
我想保持模塊名稱不含插件和文件擴展名。這將使我在未來有一定的靈活性。
我在require中有以下映射。
require.config({
map: {
"MyModule": {
"MainTemplate": "text!MainTemplate.html"
}
}
}
這成功地調用了文本插件,但是該插件加載了錯誤的url。通過篩選文本插件的源代碼,我發現下面的代碼是罪魁禍首。
load: function (name, req, onLoad, config) {
...
url = req.toUrl(nonStripName),
//returns "scripts/**text!**MainTemplate.html**.html**"
...
}
如果我命名模塊,「MainTemplate.html」它工作正常,但我想繼續擴展出來的模塊名稱。
我用一個簡單的正則表達式替換修改了文本插件去掉插件引用和重複的擴展。
有沒有更好的方法來處理這個問題?
這是一個體面的解決方法,希望他們將在未來支持此模塊語法。 – thomaux