使用require.js加载命名的TypeScript模块

3

问题简述:我想使用TypeScript生成AMD风格的命名模块,然后使用requires.js从捆绑和最小化的文件中加载它们。

问题:

  • 这是否可能?
  • 您是否建议其他方法?

我希望将所有脚本捆绑并最小化的好处与加载由TypeScript生成的命名AMD模块相结合,以便不需要额外的HTTP请求。


更新:我正在考虑以下JavaScript解决方案:

define("greeter", ["require", "exports", "jquery"], function(require, exports, $) {
    function greet() {
        alert("Hello World!");
    }

    exports.greet = greet;
});

那么我可以将生成的JavaScript模块捆绑并缩小成一个文件,这样浏览器就可以轻松地缓存它。此外,require.js不必通过多个GET请求来获取模块 - 它们已经被定义了。另外,我还能利用TypeScript生成这些模块带来的所有优势。

1个回答

2
我会通过在TypeScript中直接使用RequireJS来解决这个问题。
已经有一个定义文件了,我写了一个使用原始TypeScript RequireJS(而不是导入语句)与jQuery的示例,您可能可以进行调整。
下面是生成的TypeScript代码...
///<reference path="require.d.ts" />
///<reference path="jquery.d.ts" />
require(['jquery'], function ($) {
    $(document).ready(() => {
        alert('Your code executes after jQuery has been loaded.');
    });
});

如果这个不能实现你想要的功能,告诉我你会如何用 JavaScript 实现,我很乐意提供 TypeScript 的等效代码。

如果您捆绑并压缩了所有文件,我建议只需在脚本标签中包含这些文件,并放弃所有模块加载。这将是减少请求(至1个请求)的最简单解决方案。 - Fenton
那么您建议完全不使用外部TypeScript模块?相反,我可以使用内部TypeScript模块,对吗? - Marius Schulz
好的,听起来不错。但是,你知道是否可以让TypeScript生成命名的AMD模块吗? - Marius Schulz
是的,我已经做过了,而且它完美地运行着。不过,TypeScript并没有生成具名模块(请注意上面我的模块中的"greeter"名称)。你知道这是否可能吗? - Marius Schulz
1
啊,我明白了 - 我不知道有什么办法。 - Fenton
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接