Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JQuery Plugin (datatables) with Webpack and Typescript

I am trying to use datatables JQuery plugin with webpack and typescript. I already have JQuery up and running together with typings (intelliSense works), for datatables I have the intelliSense only, but after webpack build when I run the app the code fails when it comes to $('#id').dataTable() line.

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

I am not able to figure out how to attach this pluggin correctly, can anyone please help me?

The webpack.config.js is as follows; https://gist.github.com/marcingolenia/2fa78ed2cd42f9294da5edd22d351245

I hope this line will solve the problem;

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

as the doc of import loader says;

There are many modules that check for a define function before using CommonJS. Since webpack is capable of both, they default to AMD in this case, which can be a problem if the implementation is quirky.

datatables provides both, so I wanted to disable AMD using define=>false as mentioned here https://www.datatables.net/forums/discussion/32542/datatables-and-webpack

Now I'm stuck :(

like image 209
Jinx Avatar asked Apr 22 '16 10:04

Jinx


2 Answers

You are almost there!

Make sure both datatables.net and datatables.net-dt installed via NPM:

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

in your entry file ./src/main.js write:

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

after that, any code logic of following format $(...).DataTable will work as the examples shown on the DataTables' homepage.

like image 147
Sitian Liu Avatar answered Nov 17 '22 20:11

Sitian Liu


Disabling AMD seems to be the answer. Many of the solutions I found weren't working for me.

The simplest way to disable AMD is to add the following rule to your webpack config(webpack 2+)

module: {
    rules: [
        { parser: { amd: false } }
    ]
}
like image 5
Matt B Avatar answered Nov 17 '22 21:11

Matt B