当前位置: 首页 > 知识库问答 >
问题:

如何在webpack中导入jquery

邢思淼
2023-03-14

我在WebPack上使用jquery时遇到了一个问题。我的代码:

const path = require('path');
const webpack = require('webpack');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const ExtractTextPlugin = require("extract-text-webpack-plugin");
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
const CompressionPlugin = require("compression-webpack-plugin");

module.exports = {
    entry: {
        vendor: [
            './src/main/webapp/js/vendor/jquery-3.3.1.min.js',
            // './src/main/webapp/js/vendor/fs.js',
            './src/main/webapp/js/vendor/google-adsense.js',
            './src/main/webapp/js/vendor/jquery.menu-aim.min.js',
            './src/main/webapp/js/vendor/jquery.touchSwipe.min.js',
        ],
        app: './src/main/assets/js/desktop/app.js',
        mobile: './src/main/assets/js/mobile/app.js',
        touch: './src/main/assets/js/touch/app.js',
    },
    module: {
        rules: [{
                test: /\.js$/,
                exclude: /(node_modules|bower_components)/,
                use: {
                    loader: 'babel-loader',
                    options: {
                        presets: ['@babel/preset-env']
                    }
                }
            },
            {
                test: require.resolve('jquery'),
                loader: 'expose-loader?jQuery!expose-loader?$'
            }
        ],
    },
    plugins: [
        // new CleanWebpackPlugin(['src/main/webapp/assets']),
        new webpack.optimize.CommonsChunkPlugin({
            name: 'common' // Specify the common bundle's name.
        }),
        new UglifyJsPlugin({
            test: /\.js$/,
            sourceMap: process.env.NODE_ENV === "development"
        }),
        new webpack.ProvidePlugin({
            $: "jquery",
            jQuery: "jquery"
        })
    ],
    output: {
        filename: '[name].js',
        path: path.resolve(__dirname, './src/main/webapp/js')
    }
};

编译上述代码时,控制台抛出此错误

vendor.js:1未捕获的引用Error:未在vendor.js:1中定义webpackJsonp

externals: {
  jquery: 'jQuery'
}
vendor.js:1 Uncaught ReferenceError: jQuery is not defined
    at Object.231 (vendor.js:1)
    at o (common.js:1)
    at Object.228 (vendor.js:1)
    at o (common.js:1)
    at window.webpackJsonp (common.js:1)
    at vendor.js:1

共有1个答案

狄鸿禧
2023-03-14

因此,webpack.config.js中的主题很少,其中一些主题存在冲突。我只是想列出它们,这样我就能更好地理解我认为你试图实现的目标。

主题1

您有一个名为vendor的条目,它显然引用了一个简化的jQuery库,您可能已经下载并放置在指定的目录中。

主题3

在jQuery的配置中还包含了provideplugin

provideplugin应该将依赖项注入到模块代码的作用域中,这意味着您不需要从'jquery'导入$,而是$jquery已经在所有模块中可用。

结论

根据我所收集的信息,我认为您正在尝试将jQuery从./src/main/webapp/js/vendor/jquery-3.3.1.min.js的静态文件捆绑到供应商包中。

然后尝试将供应商包中的库公开到全局范围(jQuery)。

首先,为jQuery签入package.json文件依赖项。如果您想要删除它,那么如果您要使用jquery-3.3.1.min.js文件来向应用程序提供jQuery,就不需要它了。

其次,将expose-loadertest更改为在条目中看到jquery-3.3.1.min.js文件时触发,而不是从node_modules中的jquery依赖项解析。

这个regex模式应该能做到这一点。

{
  test: /jquery.+\.js$/,
  use: [{
      loader: 'expose-loader',
      options: 'jQuery'
  },{
      loader: 'expose-loader',
      options: '$'
  }]
}

第三,删除provideplugin如果您要用import$from'jQuery'显式导入库,您不需要它。

最后,当webpack看到jQuery的导入时,您需要告诉它,它可以从全局范围内的window.jQuery中解决这个问题。您可以使用已经引用的外部配置来执行此操作。

externals: {
  jquery: 'jQuery'
}
const path = require('path');
const webpack = require('webpack');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const ExtractTextPlugin = require("extract-text-webpack-plugin");
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
const CompressionPlugin = require("compression-webpack-plugin");

module.exports = {
    entry: {
        vendor: [
            './src/main/webapp/js/vendor/jquery-3.3.1.min.js',
            // './src/main/webapp/js/vendor/fs.js',
            './src/main/webapp/js/vendor/google-adsense.js',
            './src/main/webapp/js/vendor/jquery.menu-aim.min.js',
            './src/main/webapp/js/vendor/jquery.touchSwipe.min.js',
        ],
        app: './src/main/assets/js/desktop/app.js',
        mobile: './src/main/assets/js/mobile/app.js',
        touch: './src/main/assets/js/touch/app.js',
    },
    module: {
        rules: [{
                test: /\.js$/,
                exclude: /(node_modules|bower_components)/,
                use: {
                    loader: 'babel-loader',
                    options: {
                        presets: ['@babel/preset-env']
                    }
                }
            },
            {
                test: /jquery.+\.js$/,
                use: [{
                    loader: 'expose-loader',
                    options: 'jQuery'
                },{
                    loader: 'expose-loader',
                    options: '$'
                }]
            }
        ],
    },
    plugins: [
        // new CleanWebpackPlugin(['src/main/webapp/assets']),
        new webpack.optimize.CommonsChunkPlugin({
            name: 'common' // Specify the common bundle's name.
        }),
        new UglifyJsPlugin({
            test: /\.js$/,
            sourceMap: process.env.NODE_ENV === "development"
        })
    ],
    output: {
        filename: '[name].js',
        path: path.resolve(__dirname, './src/main/webapp/js')
    },
    externals: {
        jquery: 'jQuery'
    }
};
 类似资料:
  • 我对Polymer和Webpack都是新手,正在尝试解决如何让Polymer Webpack loader正确传输。根据新的聚合物3。x将HTML导入JS的方式(Polymer 2.x是另一种方式),我创建了一个单独的。html文件,并试图将其导入我的“extends Polymerement”类。 这是我的简单template.html文件: 这是我的聚合物指数。js文件: 这是我的webpac

  • 问题内容: 我正在使用webpack来管理我的React应用程序。现在,我想从此URL导入依赖项: 传统上,我只是将上述代码放在index.html文件中。但是现在如何让webpack加载此网址?以及我的React JS如何使用该依赖关系? 当我启动webpack-dev-server时,将出现以下错误: 然后,我使用一点加载程序来加载URL。以下是使用加载程序的JavaScript代码: 但是启

  • 问题内容: 我在玩和使用和。我想在不同的文件中构建多个组件,将其导入单个文件并将其捆绑在一起 假设我有几个这样的组件: my-navbar.jsx main-page.jsx 使用webpack并按照其教程进行操作,我有: 构建项目并运行它之后,在浏览器控制台中出现以下错误: 我究竟做错了什么?如何正确导入和导出组件? 问题答案: 尝试 默认设置 组件中的导出: 通过使用默认值,您表示将成为该模块

  • 我将node.js API用于: 当我尝试将任何文件导入到条目文件-中时,就会出现此问题: 这将引发一个错误: “未找到模块:错误:无法解析”/srv/git/ditsmod/ditsmod/packages/openapi/src/swagger-ui“中的”./swagger.config“” 但是文件实际上与存在于同一个目录中。 我做错了什么,如何导入一些文件到入口文件为webpack?

  • 问题内容: 我已经为EE开发人员安装了eclipse ide,并且收到了的导入错误 我右键单击项目文件夹->单击属性->单击Java构建路径->添加库-> JRE系统库, 但是显示的依赖项已经导入。如何导入javax.json包? 问题答案: 如果使用Maven,请将此依赖项添加到您的 对于Gradle,请将其添加到您的

  • 问题内容: 如何在Eclipse中导入jar 问题答案: 你可以通过右键单击Project→Build Path→Configure Build Path在Eclipse中添加一个jar。在“库”选项卡下,单击“添加jar”或“添加外部JAR”,然后提供jar。 上述解决方案显然是一种“快速”解决方案。但是,如果你正在从事一个需要将文件提交到源代码控制存储库的项目,我建议将Jar文件添加到源代码控