Javascript 使用WebPack+;定义导入的外部模块;打字稿
我正在尝试用TypeScript和一些外部库设置WebPack,但遇到了一些问题 我正在导入jQuery的src版本,以便WebPack选择所需的模块(这是使Boostrap SASS加载程序工作所必需的),因此我在TS中导入库时如下所示:Javascript 使用WebPack+;定义导入的外部模块;打字稿,javascript,jquery,typescript,webpack,Javascript,Jquery,Typescript,Webpack,我正在尝试用TypeScript和一些外部库设置WebPack,但遇到了一些问题 我正在导入jQuery的src版本,以便WebPack选择所需的模块(这是使Boostrap SASS加载程序工作所必需的),因此我在TS中导入库时如下所示: import jquery = require( 'jquery/src/jquery.js' ); 编译时,会抛出错误找不到外部模块“jquery/src/jquery”。如果我创建一个手动.d.ts文件来定义库,如下所示: declare module
import jquery = require( 'jquery/src/jquery.js' );
编译时,会抛出错误找不到外部模块“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' );
(我认为这是一个常见的JS风格的导入?)然后所有的编译(和运行)都很好。因此,问题是:
- 是否有更好的方法使用WebPack要求/包含源文件
- 定义模块的正确方法是什么,这样它就不会缺少调用信号
- 我是否应该担心使用
而不是var
,或者如果它起作用,就直接使用它import
declare module "jquery/src/jquery" { export = $; }
这似乎让我可以使用“导入…”-但这是处理这个问题的好方法吗
编辑2:
以下是对@basarat的回答的回复(我的评论有点长,没有换行):
我已经在使用DefinitelyTyped中的jquery定义,但它本身无法工作,因为我需要的模块是“jquery/src/jquery”,而不仅仅是“jquery”。如果我使用“jquery”,那么将加载jquery的编译dist版本,这不适用于引导加载程序
因此,我认为,声明模块“jquery/src/jquery”{export=$;}
扩展了现有的定义,但使用了我需要从中加载它的路径
import jquery=require('jquery/src/jquery.js')
改用jquery的明确类型定义:它已经允许您执行
import jquery=require('jquery')
来回答我自己的问题,这就是我最后要做的
NB我不知道这是否是实现这一目标的“正确”方式(我怀疑不是),因此我愿意向任何有更好答案的人开放强>
在我的TS定义文件tsd.d.TS中,我有明确类型的jQuery定义:
/// <reference path="jquery/jquery.d.ts" />
编译器现在可以找到jQuery源文件
我还必须编辑一个jQuery源文件,以便WebPack编译器能够很好地使用它:selector.js默认情况下没有包含工厂函数,WebPack需要一个工厂函数
有一个错误,但我无法让它工作,所以我只是将selector.js中的代码更改为:
define([ "./selector-sizzle" ], function(){});
这一切都让人觉得有点不舒服。。。但它让我克服了这个特殊的障碍。谢谢——不过我已经在使用这个定义了。我已经更新了我的问题并给出了答复。Tom,我正在努力解决这个问题-我似乎找不到一个好的源代码来说明如何在网页包/打字脚本构建中正确地包含第三方代码,如jQuery等。你愿意多分享一点你的解决方案吗?@JasonBrubaker我在下面添加了我的解决方案作为答案。希望有帮助!
define([ "./selector-sizzle" ], function(){});