我正在尝试将现有项目中的 webpack 版本从 3.6 升级到 4.46,并且遇到了一个我无法解决的问题(提供更多细节,它是一个 rails 应用程序,我正在从 3 升级 webpacker到 5,但我认为这是一个 webpack 问题)。
在这个程序中,jQuery 以 $ 的形式全局公开。还有一些代码可以像这样扩展全局值:
jQuery.browser = browser
问题是在代码中的各个点,jQuery 库似乎被重新加载/重新初始化,并且当 $ 存在时,$.browser 变得未定义。
请注意,我真的一点也不喜欢全局变量,也不喜欢以这种方式使用它们,但这是我已经被处理的一手牌,我只是想完成这次升级。
我尝试过的事情之一是调整分块,认为可能 jQuery 在不同的块中多次加载。所以我尝试了这个但没有成功:
optimization: {
runtimeChunk: 'single'
否则我的配置非常标准:
rules: [
{
test: require.resolve('jquery'),
use: [{
loader: 'expose-loader',
options: '$',
}, {
loader: 'expose-loader',
options: 'jQuery',
}],
},
在插件中:
new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery',
'window.jQuery': 'jquery',
'window.$': 'jquery',
任何建议将不胜感激。