【发布时间】:2016-11-24 04:06:14
【问题描述】:
我正在使用 TypeScript、Backbone 和 Mustache 编写一个 Web 应用程序。我想使用 Requirejs 进行依赖加载。
我还在使用用于 TypeScript 的 Web Essentials Visual Studio 插件,并打开了 AMD 编译选项。对于那些不熟悉这一点的人,如果您导入外部模块,它会将您的类型脚本文件包装在 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”,它可以正常工作,但我希望将扩展名保留在模块名称之外。
我已经用一个简单的正则表达式替换修改了文本插件,以去除插件引用和重复的扩展名。
有没有更好的方法来处理这个问题?
【问题讨论】:
标签: requirejs typescript requirejs-text