Heroku部署Rails+Svelte项目时Svelte组件样式未编译问题求助
问题根本原因
该问题是svelte-react gem的版本不兼容导致的导入路径变更问题:
- 旧版本
getSvelteEnvironments的导出路径为svelte_ujs_ng/svelte_ujs/getSvelteEnvironments - 后续版本对导出路径做了精简调整,变更为
svelte_ujs_ng/getSvelteEnvironments
本地开发环境和Heroku部署环境的依赖版本不一致:本地安装的是匹配现有配置的版本,而Heroku部署时拉取了版本浮动后的其他版本,导致getSvelteEnvironments导入失败,Svelte编译配置未被正确加载,组件内样式无法被webpack处理,最终出现样式丢失问题。
规范解决方案
- 锁定依赖版本
在Gemfile中为svelte-react指定和本地运行正常的版本一致的固定版本,示例:gem 'svelte-react', '2.5.0'(替换为你本地实际使用的版本号);同时在package.json中为svelte_ujs_ng指定匹配的固定版本,移除版本号前的^、~等浮动标识。 - 提交锁文件到仓库
将Gemfile.lock、package-lock.json(或yarn.lock)提交到版本仓库,保证Heroku部署时安装的依赖和本地完全一致,不会出现版本自动升级的情况。 - 清理Heroku构建缓存
部署前执行heroku builds:cache:purge -a 你的应用名清理Heroku的构建缓存,避免缓存的旧依赖导致异常。 - 统一导入路径
确定依赖版本对应的正确导入路径后,直接使用固定导入语句即可,不需要额外的try/catch兼容逻辑。如果使用新版本路径,直接写:const getSvelteEnvironments = require('svelte_ujs_ng/getSvelteEnvironments')
内容的提问来源于stack exchange,提问作者user3817234
相关产品推荐
相关产品推荐

