jQuery 在使用 webpack 的 ProvidePlugin 时不能作为“$”使用

jQuery not available as "$" when using webpack's ProvidePlugin

我试图在我的 webpack 应用程序的条目 index.js 文件中使用 jQuery 作为 $,当我在浏览器中 运行 我的应用程序时收到此错误:

Uncaught TypeError: Cannot read property 'fn' of undefined

这是因为我正在导入的模块中有一行名为 bootstrap-switch,而有问题的行是:

$.fn.bootstrapSwitch = function() {

所以我没有 $ 作为全局变量。我按照 ProvidePlugin docs, as shown below. I also tried the answer provided in this question 上的说明进行操作,但没有用。

这是我的 webpack.config.js 文件的缩略版:

module.exports = {
    entry: {
        main: './src/index.js'
    },
    plugins: {
        new webpack.ProvidePlugin({
            $: 'jquery',
            jQuery: 'jquery'
        })
    }
}

这是我的 src/index.js 文件:

import 'bootstrap-switch';

console.log('I am running');

如有任何帮助,我们将不胜感激。

编辑

这个问题的前一个版本询问了一个实际上是 ESLint 错误的构建错误。感谢 @UjinT34 帮助我解决了这个问题并关注上面列出的实际错误。

no-undef 是 ESlint 错误。它不知道你的 webpack 设置。你可以 specify global variables in esling config:

{
    "globals": {
        "$": "readonly",
        "jQuery": "readonly"
    }
}

我将此添加为未来用户查找的答案。

尝试将 'window.jQuery': 'jquery' 添加到您的 webpack.ProvidePlugin() 设置中。

module.exports = {
    ...
    plugins: [
        new webpack.ProvidePlugin( {
            $: 'jquery',
            jQuery: 'jquery',
            'window.jQuery': 'jquery'
        } )
    ]
};