从Requirejs映射中调用文本插件 [英] Invoke the text plugin from requirejs mapping

查看:23
本文介绍了从Requirejs映射中调用文本插件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用TypeScript、Backbone和Mustache编写一个Web应用程序。我要使用Requirejs加载依赖项。

我还使用Web Essentials visual studio插件来执行TypeScript,同时打开了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" { }

我希望模块名称不包含插件和文件扩展名。这将给我将来留下一些灵活性。

我在Required中有以下映射。

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",它可以正常工作,但我希望在模块名称中保留扩展名。

我已经使用简单的regex替换修改了文本插件,去掉了插件引用和重复的扩展名。

是否有更好的方法来处理此问题?

推荐答案

遇到类似问题。终于解决了。请参见TypeScript: compiling removes unreferenced imports

/// <amd-dependency path="text!templates/application.htm" />

var applicationTemplate = require('text!templates/application.htm');

这篇关于从Requirejs映射中调用文本插件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆