使用Typescript定义模块名称

时间:2014-07-06 19:35:38

标签: asp.net-mvc requirejs typescript

我尝试将TypeScript与RequireJS一起使用,但我收到以下错误:

  

匿名的define()模块不匹配。

我理解这是因为Typescript没有发出模块名称,我自己将脚本加载到页面中(我这样做是因为它们被定义为MVC项目中的预定义包) )。

目前输出的.js看起来像这样:

define(["require", "exports", "jquery"], function(require, exports, $) {...

当我需要它发出时:

define("MODULE_NAME" ["require", "exports", "jquery"], function(require, exports, $) {...

这可以使用Typescript,还是应该用Require.js自己的优化来替换最小化的bundle?

2 个答案:

答案 0 :(得分:1)

问题不在于代码生成(这是正确的)。问题是您可能有一个加载此JavaScript文件的脚本标记。它只能由RequireJS加载,使用data-main或作为另一个模块的依赖项。

请参阅:http://requirejs.org/docs/errors.html#mismatch

删除脚本标记

答案 1 :(得分:1)

如果您使用的是ASP.NET和集成的script bundling,那么您是对的:问题是该捆绑包含多个匿名模块。虽然通常的做法是使用匿名模块(并让一些压缩器/优化器稍后进行命名),但这不适用于ASP.NET捆绑,因为它只连接输入的JS文件。解决方案是使TypeScript创建命名模块。这可以用TS,所以你的问题的答案

  

这是否可以使用Typescript

肯定是:是的!

TypeScript 1.4增加了向编译器发出AMD named modules的能力,如下所示:

2