带有 Webpack 和 Typescript 的 JQuery 插件(数据表)

Posted

技术标签:

【中文标题】带有 Webpack 和 Typescript 的 JQuery 插件(数据表)【英文标题】:JQuery Plugin (datatables) with Webpack and Typescript 【发布时间】:2016-08-15 22:41:55 【问题描述】:

我正在尝试将数据表 JQuery 插件与 webpack 和 typescript 一起使用。我已经启动了 JQuery 并与打字一起运行(智能感知有效),对于数据表我只有智能感知,但是在我运行应用程序时构建 webpack 后,代码在 $('#id').dataTable()行。

app.js:43Uncaught TypeError: $(...).dataTable is not a function

我无法弄清楚如何正确附加此插件,有人可以帮我吗?

webpack.config.js 如下; https://gist.github.com/marcingolenia/2fa78ed2cd42f9294da5edd22d351245

希望这条线能解决问题;

 test: require.resolve("dataTables.net"), loader: "imports?define=>false,$=jquery",

正如 import loader 的文档所说的那样;

有许多模块在使用之前检查定义函数 通用JS。由于 webpack 两者都具备,所以它们默认使用 AMD 这种情况下,如果实现是古怪的,这可能是一个问题。

datatables 两者都提供,所以我想使用 define=>false 禁用 AMD,如此处所述 https://www.datatables.net/forums/discussion/32542/datatables-and-webpack

现在我被卡住了:(

【问题讨论】:

你安装了 jquery 数据表类型吗? 是的,打字在那里,所以 $(...).dataTable 的 intellSense 运行良好,打字稿编译器没有显示任何错误。这来自我的打字; "jquery": "registry:dt/jquery#1.10.0+20160316155526", "jquery.datatables": "registry:dt/jquery.datatables#1.9.4+20160317120654" 【参考方案1】:

你快到了!

确保通过 NPM 安装了 datatables.netdatatables.net-dt

npm install datatables.net datatables.net-dt --save-dev

在你的入口文件./src/main.js写:

require( 'datatables.net' )( window, $ )
require( 'datatables.net-dt' )( window, $ )

之后,$(...).DataTable 格式的任何代码逻辑都将按照 DataTables 主页上显示的示例运行。

【讨论】:

您好,感谢您的输入!我明天试试这个!【参考方案2】:

禁用 AMD 似乎是答案。我发现的许多解决方案都不适合我。

禁用 AMD 的最简单方法是将以下规则添加到您的 webpack 配置中(webpack 2+)

module: 
    rules: [
         parser:  amd: false  
    ]

【讨论】:

【参考方案3】:

禁用 AMD 为我解决了这个问题。 如果您在 Symfony 4 中使用 Webpack Encore,以下是禁用 AMD 的方法:

var config = Encore.getWebpackConfig();

// disable amd, for datatable
config.module.rules.unshift(
  parser: 
    amd: false
  
);

module.exports = config;

【讨论】:

以上是关于带有 Webpack 和 Typescript 的 JQuery 插件(数据表)的主要内容,如果未能解决你的问题,请参考以下文章

带有 typescript 的 Webpack 得到 TypeScript 没有输出错误

在带有 Webpack 和 Typescript 的 AngularJS 1.5 组件中使用外部 HTML 模板

带有 es6 导入的 Module.exports 用于 typescript 中的 webpack.config.ts

带有 NestJS + Typescript + Webpack + node_modules 的单个文件包

找不到带有 Webpack、Typescript、自定义模块目录的模块

带有 webpack 别名的 Vue-typescript 错误,找不到路径