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 :(
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.
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 } }
]
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With