迁移至Webpack集成版Rails6后出现tablesorter非函数报错
问题核心原因
- 报错本质是
tablesorter没有作为jQuery插件正确挂载到jQuery原型对象上。该库作为jQuery生态插件,只有在运行时检测到全局jQuery对象存在,才会把排序方法绑定到$.fn原型上,支持通过$('表格选择器').tablesorter()的链式调用 - 当前
ProvidePlugin的配置仅将tablesorter作为独立全局变量引入,没有按插件的绑定逻辑完成和jQuery的关联,因此无法通过jQuery实例访问到tablesorter方法 - 其余配置的插件可正常运行,是因为bootstrap、plain-draggable的模块导出逻辑刚好匹配当前Provide的加载规则,不存在和jQuery原型绑定的流程差异
修复操作步骤
- 先确认本地已安装tablesorter依赖,通过
yarn add tablesorter完成包安装 - 修改
config/webpack/environment.js中的插件配置:删除ProvidePlugin配置块内tablesorter: 'tablesorter'的声明,其余插件的原有配置保持不变即可 - 调整JS入口文件(默认路径为
app/javascript/packs/application.js)的加载顺序:先完成jQuery的全局挂载,再引入tablesorter的jQuery插件入口,触发内部的原型绑定逻辑,参考写法如下:import $ from 'jquery' // 暴露jQuery为全局变量,供插件识别 window.$ = $ window.jQuery = $ // 引入tablesorter插件,执行jQuery绑定逻辑 import 'tablesorter/dist/js/jquery.tablesorter.min.js' - 重启Webpack开发服务,清空浏览器缓存后测试表格排序功能即可
内容的提问来源于stack exchange,提问作者Kenyounot
相关产品推荐
相关产品推荐

