【问题标题】:Import jQuery and other 3rd Party Libraries into TypeScript as modules using AMD使用 AMD 将 jQuery 和其他第 3 方库作为模块导入 TypeScript
【发布时间】:2012-12-13 22:04:29
【问题描述】:

问题:有没有办法使用 AMD 支持(通过编译器)将 jquery 导入 TypeScript 模块,从而将 jquery 作为依赖项包含在内?

关键是获取import语句,使模块成为define语句中的依赖(见下文)。

define(["require", "exports", 'dataservice', 'jquery', 'knockout'], 
    function(require, exports, __ds__, $ , ko) { 
         ...
    }
)

详情: 我想将 jquery(和其他 3rd 方库)作为 TypeScript 模块与 AMD 一起导入。目标是使它们在require 列表中显示为依赖项。但是,使 TypeScript 执行此操作的唯一方法似乎是使用 import 语句。并且要进行导入,您需要一个模块来导入。但是......没有 jquery 模块指向。 到。

解决方法

  1. 我可以参考 main.js 中的 .d.ts 并预加载 jquery 以获得 require.js,但这意味着预加载所有 3rd 方库。不可怕,但也不理想,因为它没有利用我们已经可以用 JavaScript 和 AMD 做的事情。
  2. 我可以为每个第 3 方库创建一个模块并将其打包,但随后我得到了类似 $.$ 的东西。更糟糕的是,IMO(并且 Irisk 为每个模块编写了错误的模块代码并且不同步)。

所以现在我只是在 main.js 中预加载 jquery。但同样,但这并不理想。对于没有模块的任何库,如淘汰赛、主干等,都必须这样做。

有什么更好的建议或我缺少的东西吗?

更新/澄清:

我还可以在配置中使用 shims 来实现库之间的依赖关系。但这仍然会预加载第 3 方的。示例:

require.config({
    baseUrl: '../',
    paths: {
        'jquery': 'lib/jquery-1.7.2',
        'underscore': 'lib/underscore'
    }, 
    shim: {
        jquery: {
            exports: '$'
        },
        underscore: {
            exports: '_'
        }
    }
});

【问题讨论】:

  • 为了它的价值,我只是将它们全部加载到 main.js(或我的等价物)中。这有点难看,但它有效。
  • Ken - 是的,这基本上就是我对第 3 方的预加载所做的。当我们知道我们可以在 JavaScript 中做得更好时,只会觉得很脏。
  • 同意。 TS 中的模块系统看起来仍然有点原始 - 有点像语言的其他部分:-)。希望改进即将到来。
  • 我希望并且相信他们是。这是阿尔法,所以我很好。但如果今天有更好的方法,我很乐意看到。
  • @JohnPapa 自从被问到这个问题已经有一段时间了。在这个问题上是否有任何进展?无法导入非 TypeScript 模块似乎是一个巨大的疏忽。

标签: javascript requirejs typescript amd


【解决方案1】:

另一种解决方法是使用 requirejs 的类型定义并使用您自己的 require 语句,而不是 import 语句。

这样做的缺点是 TypeScript import 可以与 AMD 或 CommonJS 一起使用,只需更改编译器,因此与 import 相比,您将更多地在程序中结合 requirejs。

有一个现有的definition for requirejs on Definitely Typed

【讨论】:

  • 好点。我真的希望 TypeScript 团队能够更容易地将 3rd 方库视为外部模块。
  • 我认为目前除了“没有很好的答案”之外没有其他答案。所以我会把你的标记为最接近的:)
  • @Steve:TypeScript 有什么更新可以解决这个问题吗?
  • 随着在 ECMAScript 6 中引入本地模块加载,我认为随着越来越多的人编写他们的库以作为模块使用,一般问题将自行解决。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-03
  • 1970-01-01
  • 2019-11-19
  • 2015-01-25
  • 1970-01-01
  • 2017-04-24
  • 1970-01-01
相关资源
最近更新 更多