我在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
因此,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-loader
的test
更改为在条目中看到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文件添加到源代码控