webpack - jQuery 在 webpack 4 中多次加载
问题描述
我正在尝试将现有项目中的 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',
任何建议将不胜感激。
解决方案
推荐阅读
- mysql - 在 Cypress 中获取“客户端不支持服务器请求的身份验证协议;考虑升级 MySQL 客户端”
- javascript - 如何动态渲染美人鱼流程图?
- typescript - 使用属性访问器的打字稿不解析接口
- amazon-s3 - 将具有特定标题或具有关键字“日志”的标题的文件从 S3 存储桶复制到另一个存储桶中的文件夹
- vaticle-typedb - 如何将数据在线导入 Grakn
- javascript - 即使使用 .on 使用的数据表,动态按钮也不会在其他元素上触发事件
- postgresql - NOT IN 确实适用于字符串数组
- android - 在使用位图类型转换器类时从 ROOM 数据库中多次查询行会使应用程序崩溃
- sqlite - 在 mysqlite 中计算中位数
- git - 如何授予语义释放权限以将代码推送到 master