如何在Rails中移除Trix?解决Rails6升级后的Trix冲突问题
解决Rails 6.0升级后Trix重复定义的DOMException错误
这个错误完全是因为你的项目里加载了两份Trix核心代码导致的——毕竟你从Rails 5.2(依赖asset pipeline的trix gem)升级到6.0(默认用Webpacker管理JS),很容易出现新旧加载方式的残留冲突。我给你一步步排查解决:
第一步:彻底清理trix gem的残留
- 确认Gemfile里已经删掉了
trix,然后跑一遍bundle install确保gem完全卸载 - 检查
app/assets/javascripts/application.js,如果之前有//= require trix这行,立刻删掉;同理,app/assets/stylesheets/application.css里的//= require trix也要移除 - 看看
app/assets/javascripts或stylesheets目录下有没有单独的trix.js/trix.css文件,直接删掉
- 确认Gemfile里已经删掉了
第二步:检查Webpacker的Trix引入是否重复
Rails 6用Webpacker管理JS,你大概率是通过yarn add trix安装了Trix,这时候要确保只引入一次:- 打开
app/javascript/packs/application.js,确认只有一行import "trix"(如果需要样式的话加上import "trix/dist/trix.css") - 检查项目里其他自定义JS文件(比如编辑器组件的代码),有没有重复写
import "trix"的,删掉多余的
- 打开
第三步:清理所有缓存,确保配置生效
旧缓存很容易导致残留代码依旧被加载,必须清干净:- 运行
rails assets:clobber清除asset pipeline的编译缓存 - 运行
yarn cache clean清除yarn的依赖缓存,然后重新yarn install - 彻底重启Rails服务器,不要用热重载,确保新的加载配置生效
- 运行
第四步:排查第三方gem的隐式依赖
有些第三方gem(比如ActiveAdmin、某些表单构建器)可能自带了Trix的依赖,会偷偷加载一份Trix代码。你可以:- 查看Gemfile里的其他gem文档,看看有没有开关可以禁用它们自带的Trix
- 用浏览器开发者工具的Network标签,刷新页面后搜索
trix.js,看看加载的文件来源——如果有来自第三方gem的asset路径,就针对性处理那个gem
最后验证
处理完以上步骤后,刷新页面打开JS控制台,如果错误消失,再去Network标签确认只有一份trix.js被加载,就搞定了!
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

