Some older Node modules rely on window.jQuery
to be present. One
suggested solution
Show archive.org snapshot
is to use this config in the app/config/webpack/environment.js
:
const { environment } = require('@rails/webpacker')
const webpack = require('webpack')
environment.plugins.prepend(
'Provide',
new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery',
'window.jQuery': 'jquery'
})
)
module.exports = environment
This will work. But a side effect is that the following approach in the app/javascript/packs/application.js
to expose jQuery
to the browser window object will not work anymore:
import jQuery from 'jquery'
window.$ = jQuery
window.jQuery = jQuery
In the browser jQuery
will be undefined, whereas $
is still defined. The
issue
Show archive.org snapshot
is known (here $
is undefined as "window.jQuery": "jquery"
is used).
You can use global
instead of window
, which will solve the issue (Webpack will transform global to window in the context of a web application).
import jQuery from 'jquery'
global.$ = jQuery
global.jQuery = jQuery
Posted by Emanuel to makandra dev (2019-05-08 07:59)