Rails 6.1执行hotwire:install提示JS入口文件导入缺失如何解决?
问题原因
这不是未被发现的新bug,是Rails版本与Hotwire安装脚本的默认路径适配问题:
- Rails 6.1默认搭配Webpacker作为JS打包工具,约定的JS入口文件路径为
app/javascript/packs/application.js - 后续版本的Hotwire安装脚本默认适配Rails 7+自带的jsbundling-rails打包方案,默认检测的入口路径为
app/javascript/application.js,因此会出现路径不匹配的报错,且脚本不会自动将必要的导入规则写入你项目实际的入口文件,最终导致功能无法正常运行。
解决方法
直接手动修正入口文件内容即可,操作成本最低,步骤如下:
- 打开项目实际入口文件
app/javascript/packs/application.js - 删除原有的Turbolinks相关代码(Turbo已经替代Turbolinks,二者共存会出现冲突)
- 补充Hotwire所需的两行导入规则,修改后的完整内容参考如下:
// This file is automatically compiled by Webpack, along with any other files // present in this directory. You're encouraged to place your actual application logic in // a relevant structure within app/javascript and only use these pack files to reference // that code so it'll be compiled. import Rails from "@rails/ujs" import * as ActiveStorage from "@rails/activestorage" import "channels" // 新增Hotwire相关导入 import "@hotwired/turbo-rails" import "./controllers" Rails.start() ActiveStorage.start()
- 开发环境下重启Rails服务即可生效,无需重新执行
rails hotwire:install命令。
如果希望后续Hotwire相关脚本可以自动识别入口路径,也可以修改Webpacker配置,将入口文件从packs目录迁移到app/javascript/application.js,并同步调整webpacker.yml中的source_entry_path配置即可。
内容的提问来源于stack exchange,提问作者pitosalas
相关产品推荐
相关产品推荐

