You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级Webpacker 6后jQuery及其他插件无法正常工作

解决Webpacker 6升级后jQuery与Rails UJS失效问题

1. 修复rails-ujs has already been loaded!错误

Webpacker 6默认已自动加载@rails/ujs,你在ProvidePlugin中重复配置Rails: ["@rails/ujs"]会导致重复加载,直接移除该行即可:

new webpack.ProvidePlugin({
  $: "jquery",
  jQuery: "jquery",
  Popper: ["popper.js", "default"],
  // 移除下面这行
  // Rails: ["@rails/ujs"],
}),

2. 解决$ is not defined错误

步骤1:确认依赖安装

确保已安装jquery和popper.js:

yarn add jquery popper.js

步骤2:调整Webpack配置

Webpacker 6推荐通过environment对象扩展配置,修改config/webpack/environment.js(而非base.js)来配置全局变量:

const { environment } = require('@rails/webpacker');
const webpack = require('webpack');

// 配置ProvidePlugin注入全局变量
environment.plugins.append('Provide', new webpack.ProvidePlugin({
  $: 'jquery',
  jQuery: 'jquery',
  Popper: ['popper.js', 'default']
}));

// 将jQuery暴露到window全局对象(部分依赖可能需要)
environment.loaders.get('javascript').use.forEach(loader => {
  if (loader.loader === 'babel-loader') {
    loader.options.plugins.push(['transform-expose', {
      exposes: ['$', 'jQuery']
    }]);
  }
});

module.exports = environment;

步骤3:移除冗余插件

Webpacker 6已内置MiniCssExtractPlugin的处理逻辑,直接从customConfig.plugins中移除new MiniCssExtractPlugin(),避免配置冲突。

3. 验证修复

修改完成后重启Webpack开发服务器:

bin/webpack-dev-server

刷新页面后检查控制台,确认错误消失,jQuery及相关插件可正常调用。

内容的提问来源于stack exchange,提问作者DavidM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 20:22:49