【问题标题】:Use require.js to load named TypeScript modules使用 require.js 加载命名的 TypeScript 模块
【发布时间】:2013-01-23 11:12:16
【问题描述】:

简要问题描述:我想使用 TypeScript 生成 AMD 样式的 named 模块,然后我想使用 requires 从捆绑和缩小的文件中加载这些模块.js。

问题:

  • 这可能吗?
  • 或者您建议其他方法?

我想将捆绑和缩小所有脚本(因此不需要额外的 HTTP 请求)与加载由 TypeScript 生成的命名 AMD 模块结合起来。


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

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

    exports.greet = greet;
});

然后,我可以将生成的 JavaScript 模块打包并压缩到一个文件中,这样浏览器就可以轻松地对其进行缓存。此外,require.js 不必去那里通过几个 GET 请求来获取模块——它们已经被定义了。另外,我拥有使用 TypeScript 生成这些模块的所有优势。

【问题讨论】:

    标签: javascript requirejs typescript amd bundling-and-minification


    【解决方案1】:

    我会直接在 TypeScript 中使用 RequireJS 来解决这个问题。

    它有一个定义文件,我已经编写了一个使用 jQuery 的原始 RequireJS in TypeScript(而不是 import 语句)的示例,您可能能够适应。

    这是生成的 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 个请求)的最简单解决方案。
    • 所以你建议不要使用外部 TypeScript 模块?相反,我可以使用内部 TypeScript 模块,对吗?
    • 好吧,这听起来像是一个计划。但是,您知道是否可以让 TypeScript 生成命名的 AMD 模块?
    • 啊,我明白了——我不知道有什么办法。
    猜你喜欢
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    • 2016-02-26
    • 1970-01-01
    相关资源
    最近更新 更多