【问题标题】:Including additional jQuery plugins globally with Webpack 4使用 Webpack 4 在全局范围内包含额外的 jQuery 插件
【发布时间】:2018-09-22 13:43:34
【问题描述】:

我正在尝试使用 Webpack 4 使内联 JavaScript 可以访问 jQuery 插件。

我正在使用PluginProvider 使 jQuery 可用于我的网站:

  plugins: [
    new webpack.ProvidePlugin({
      "$": "jquery",
      "jQuery": "jquery"
    }),
  ],

这工作正常,我可以从包含我的包的任何页面访问 jQuery。

我尝试通过创建一个名为 vendor.js 的包来添加 bootstrap-datepicker,其中包含以下内容:

import 'bootstrap-datepicker';

我可以从vendor.js 包中调用$('input').datepicker(),但是如果我尝试使用内联<script> 调用它,我会得到:

Uncaught TypeError: $(...).datepicker is not a function

如何配置 Webpack 4 以使 bootstrap-datepicker 可用于全局范围?


更新

我已在此处上传了演示此问题的源代码:https://github.com/LondonAppDev/webpack-global-jquery-issue

看来问题是第二个包导入是在没有 datpicker 附加组件的情况下重新添加 jQuery。有没有办法解决这个问题?

【问题讨论】:

  • 你能创建一个小 git repo 来重现你的问题,这样我就可以更容易地解决它
  • 嘿@Legends,当然!我在这里推了这个例子:github.com/LondonAppDev/webpack-global-jquery-issue
  • 抱歉,我在您的存储库中找不到您的 vendor.js 包。但是我可以在您当前的 repo 中看到问题,那就是您将 main.js 作为入口点,这是错误的。在 webpack 4 中,入口点仅适用于真正的入口点——没有像 wp3 和 CommonsChunkPlugin 这样的供应商脚本。
  • 只需更新您的存储库并重新创建您帖子中提到的问题。
  • 我也遇到了这个问题,第二个包导入是在没有安装其他插件的情况下重新添加 jQuery 到全局 jQuery 变量。有人知道解决方案吗?

标签: javascript jquery webpack webpack-4


【解决方案1】:

我已经在这类问题上进行了几轮,并且在expose-loader 上取得了最大的成功。在你的 webpack 配置中,你应该使用以下暴露加载器配置为 jQuery 设置一个部分:

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

这里有类似的SO帖子:

How to import jquery in webpack(他们的正则表达式模式对我不起作用)

Expose jQuery to real Window object with Webpack

Webpack 2 loading, exposing, and bundling jquery and bootstrap

您应该能够找到使用此配置的其他几篇文章/帖子,这是我迄今为止能够成功开始工作的唯一一篇。

另外值得注意的是,bootstrap 4 似乎也在内部加载或对 jQuery 执行要求,因此如果您在 jQuery 导入/要求和插件之后包含导入或要求,它将重新启动 jQuery 并导致您的插件失去作用域。

【讨论】:

  • 这真的很有帮助。我知道还有其他方法,但这是我让它也能正常工作的唯一方法。
  • 经过数小时的战斗后,这对我有用......每个 $ 都是不同的实例,因此插件不会将自己添加到窗口的 $ 中。我还必须从 ProvidePlugin 中重新调用 jQuery/$ 配置。
猜你喜欢
  • 2018-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
相关资源
最近更新 更多