小编Kho*_*ham的帖子

从requirejs映射调用文本插件

我正在使用TypeScript,Backbone和Mustache编写Web应用程序.我想使用Requirejs进行依赖加载.

我还使用了针对TypeScript的Web Essentials visual studio插件,并启用了AMD编译选项.对于那些不熟悉它的人,如果导入外部模块,它会将您的类型脚本文件包装在AMD模块中.例如:

在类型脚本中,我在类型定义文件中导入以下模块.

export import Backbone = module("Backbone"); 
import mainTemplate = module("MainTemplate");
Run Code Online (Sandbox Code Playgroud)

输出类似于:

define(["require", "exports", "Backbone", "MainTemplate"], function(require, exports, __Backbone__, __mainTemplate__) {
//...code goes here ...
});
Run Code Online (Sandbox Code Playgroud)

对于模板,我在类型定义文件中声明了以下内容:

declare module "MainTemplate" { }
Run Code Online (Sandbox Code Playgroud)

为了支持requirejs插件,您需要将模块声明为:

declare module "text!MainTemplate.html" { }
Run Code Online (Sandbox Code Playgroud)

我想保持模块名称没有插件和文件扩展名.这将使我在未来具有一定的灵活性.

我在require中有以下映射.

require.config({
    map: {
        "MyModule": {
            "MainTemplate": "text!MainTemplate.html"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这成功调用了文本插件,但插件加载了错误的url.通过筛选文本插件的源代码,我发现以下代码是罪魁祸首.

load: function (name, req, onLoad, config) {
  ...
  url = req.toUrl(nonStripName),
  //returns "scripts/**text!**MainTemplate.html**.html**"
  ...
}
Run Code Online (Sandbox Code Playgroud)

如果我命名模块,'MainTemplate.html'它工作正常,但我想保留扩展模块名称.

我已经使用简单的正则表达式替换修改了文本插件,以去除插件引用和重复的扩展.

有没有更好的方法来处理这个?

requirejs requirejs-text typescript

10
推荐指数
3
解决办法
4944
查看次数

标签 统计

requirejs ×1

requirejs-text ×1

typescript ×1