含Webpack的Rails应用部署至Heroku出现tapPromise未定义错误如何解决
问题根因
该报错的核心是 compression-webpack-plugin 版本与 Webpack 版本不兼容:
- Rails Webpacker 5.x 内置依赖的是 Webpack 4
- compression-webpack-plugin v6 及以上版本仅支持 Webpack 5,
processAssets是 Webpack 5 才新增的钩子API,Webpack 4 环境下调用自然会报 undefined 错误 - 你在
package.json的resolutions配置里强制指定了compression-webpack-plugin: >=4.0.0,会自动拉取最新的高版本插件,直接触发了兼容性问题
可行解决方案
- 第一步:修改
package.json中的 resolutions 配置,将 compression-webpack-plugin 版本锁定在兼容 Webpack4 的最后一个稳定版本
把原配置中的
修改为"compression-webpack-plugin": ">=4.0.0","compression-webpack-plugin": "^4.0.1", - 第二步:清空本地依赖缓存和 lock 文件,重新安装依赖
若使用 yarn 包管理:
若使用 npm 包管理:rm -rf node_modules yarn.lock yarn installrm -rf node_modules package-lock.json npm install - 第三步:本地先验证打包功能是否正常
确认本地打包无报错后,重新推送到 Heroku 部署即可。bundle exec rails assets:precompile
后续你升级到 Webpacker 6.x 版本(内置 Webpack 5)后,再将 compression-webpack-plugin 版本升级到最新版即可正常使用。
内容的提问来源于stack exchange,提问作者GuilleLeopold
相关产品推荐
相关产品推荐

