首页 > 解决方案 > jQuery 在 webpack 4 中多次加载

问题描述

我正在尝试将现有项目中的 webpack 版本从 3.6 升级到 4.46,并且遇到了一个我无法解决的问题(提供更多细节,它是一个 rails 应用程序,我正在从 3 升级 webpacker到 5,但我认为这是一个 webpack 问题)。

在这个程序中,jQuery 以 $ 的形式全局公开。还有一些代码可以像这样扩展全局值:

jQuery.browser = browser

问题是在代码中的各个点,jQuery 库似乎被重新加载/重新初始化,并且当 $ 存在时,$.browser 变得未定义。

请注意,我真的一点也不喜欢全局变量,也不喜欢以这种方式使用它们,但这是我已经被处理的一手牌,我只是想完成这次升级。

我尝试过的事情之一是调整分块,认为可能 jQuery 在不同的块中多次加载。所以我尝试了这个但没有成功:

  optimization: {
    runtimeChunk: 'single'

否则我的配置非常标准:

  rules: [
    {
      test: require.resolve('jquery'),
      use: [{
        loader: 'expose-loader',
        options: '$',
      }, {
        loader: 'expose-loader',
        options: 'jQuery',
      }],
    },

在插件中:

  new webpack.ProvidePlugin({
    $: 'jquery',
    jQuery: 'jquery',
    'window.jQuery': 'jquery',
    'window.$': 'jquery',

任何建议将不胜感激。

标签: webpackwebpackerexpose-loader

解决方案


推荐阅读