我在写一个使用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