【发布时间】:2015-08-07 02:44:42
【问题描述】:
我正在尝试使用 TypeScript 和一些外部库设置 WebPack,但遇到了一些问题。
我正在导入 jQuery 的 src 版本,以便让 WebPack 选择所需的模块(这是让 Boostrap-SASS 加载器工作所必需的),所以我在我的 TS 中导入这样的库:
import jquery = require( 'jquery/src/jquery.js' );
编译时,这会引发错误cannot find external module 'jquery/src/jquery'。如果我创建一个手动 .d.ts 文件来定义库,如下所示:
declare module "jquery/src/jquery"{}
然后编译器工作,但警告:
cannot invoke an expression whose type lacks a call signature
或者,如果我将导入行更改为
var jquery = require( 'jquery/src/jquery' );
(我认为这是一个 CommonJS 样式的导入?)然后一切编译(和运行)都很好。所以,问题:
- 有没有更好的方法来使用 WebPack 要求/包含源文件?
- 什么是定义模块以使其不缺少调用信号的正确方法?
- 我应该担心使用
var而不是import还是只要它有效就继续使用它吗?
我刚刚开始使用 WebPack,所以我完全有可能在做一些愚蠢的事情。如果有请指正!
编辑:
当我在思考如何表达这个问题时,我想到了:
declare module "jquery/src/jquery" { export = $; }
这似乎让我可以使用“import...” - 但这是处理这个问题的好方法吗?
编辑 2:
在下面回复@basarat 的回答(我的评论有点长,没有换行符):
我已经在使用来自 distinctlyTyped 的 jquery def,但它本身不起作用,因为我需要的模块是 "jquery/src/jquery" 而不仅仅是 “jQuery”。如果我使用“jquery”,则会加载 jquery 的已编译 dist 版本,这不适用于 Bootstrap 加载器。
所以我认为declare module "jquery/src/jquery" { export = $; } 是对现有定义的扩展,但使用了我需要从中加载它的路径。
【问题讨论】:
-
Tom,我正在努力解决同样的问题 - 我似乎无法找到如何在 webpack/TypeScript 构建中正确包含第三方代码(如 jQuery 等)的好来源。您愿意分享更多您的解决方案吗?
-
@JasonBrubaker 我在下面添加了我的解决方案作为答案。希望对您有所帮助!
标签: javascript jquery typescript webpack