关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 还有14分钟九点半 2024-04-17 11:01
采纳率: 0%
浏览 11 首页/
前端
/ webpack解析ol依赖的时候报错 vue.jsjavascriptwebpack 自己配的webpack 下载ol之后解析报错,应该如何解决in ./node_modules/ol/structs/LRUCache.js
Module parse failed: Unexpected token (229:30)
You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders
| */
| peek(key) {
> return this.entries_[key]?.value_;
| }
|
webpack配置如下
const path = require("path");
// 导入compression-webpack-plugin
const CompressionWebpackPlugin = require("compression-webpack-plugin");
// 定义压缩文件类型
const productionGzipExtensions = ["js", "css"];
const webpack = require("webpack");
function resolve(dir) {
return path.join(__dirname, dir);
}
console.log(process.env.VUE_APP_SERVER_API);
module.exports = {
publicPath: "/", // 根路径
// 输出文件路径,默认为dist
// 放置生成的静态资源 (js、css、img、fonts) 的 (相对于 outputDir 的) 目录。
//assetsDir: 'static',
// 指定生成的 index.html 的输出路径 (相对于 outputDir)。也可以是一个绝对路径
// indexPath: '',
// 保存时 lint 代码
lintOnSave: process.env.NODE_ENV === "development",
// 生产环境是否生成 sourceMap 文件
productionSourceMap: false,
chainWebpack: (config) => {
// 忽略的打包文件
config.externals({
axios: "axios",
});
const entry = config.entry("app");
entry.add("babel-polyfill").end();
entry.add("classlist-polyfill").end();
},
css: {
// 忽略 CSS order 顺序警告
extract: { ignoreOrder: true },
loaderOptions: {
// 给 sass-loader 传递选项
sass: {
//引用全局css文件
data: `@import "@/styles/var.scss";`,
},
},
},
configureWebpack: (config) => {
config.resolve.alias["@"] = resolve("src");
config.performance = {
hints: "warning",
//入口起点的最大体积 整数类型(以字节为单位)
maxEntrypointSize: 50000000,
//生成文件的最大体积 整数类型(以字节为单位 300k)
maxAssetSize: 30000000,
//只给出 js 文件的性能提示
assetFilter: function(assetFilename) {
return assetFilename.endsWith(".js");
},
};
config.plugins.push(
new webpack.ProvidePlugin({
$: "jquery",
jQuery: "jquery",
"windows.jQuery": "jquery",
})
);
if (process.env.NODE_ENV === "production") {
// 生产环境
// 编译时删除console.log
config.optimization.minimizer[0].options.terserOptions.compress.drop_console = true;
// 配置productionGzip-高级的方式
// 配置参数详解
// asset: 目标资源名称。 [file] 会被替换成原始资源。[path] 会被替换成原始资源的路径, [query] 会被替换成查询字符串。默认值是 "[path].gz[query]"。
// algorithm: 可以是 function(buf, callback) 或者字符串。对于字符串来说依照 zlib 的算法(或者 zopfli 的算法)。默认值是 "gzip"。
// test: 所有匹配该正则的资源都会被处理。默认值是全部资源。
// threshold: 只有大小大于该值的资源会被处理。单位是 bytes。默认值是 0。
// minRatio: 只有压缩率小于这个值的资源才会被处理。默认值是 0.8。
config.plugins.push(
new CompressionWebpackPlugin({
filename: "[path].gz[query]",
algorithm: "gzip",
test: new RegExp("\\.(" + productionGzipExtensions.join("|") + ")$"),
threshold: 10240,
minRatio: 0.8,
deleteOriginalAssets: true, // 删除原文件
})
);
} else {
// 开发环境
}
},
chainWebpack(config) {
config.plugins.delete("preload"); // TODO: need test
config.plugins.delete("prefetch"); // TODO: need test
// set svg-sprite-loader
config.module.rule("svg").exclude.add(resolve("src/icons")).end();
config.module
.rule("icons")
.test(/\.svg$/)
.include.add(resolve("src/icons"))
.end()
.use("svg-sprite-loader")
.loader("svg-sprite-loader")
.options({
symbolId: "icon-[name]",
})
.end();
// set preserveWhitespace
config.module
.rule("vue")
.use("vue-loader")
.loader("vue-loader")
.tap((options) => {
options.compilerOptions.preserveWhitespace = true;
return options;
})
.end();
// https://webpack.js.org/configuration/devtool/#development
config.when(process.env.NODE_ENV === "development", (config) =>
config.devtool("cheap-source-map")
);
},
devServer: {
disableHostCheck: true,
port: 8090, // 配置端口
open: false, // 自动开启浏览器
compress: true, // 开启压缩
overlay: {
warnings: false,
errors: true,
},
// 设置请求代理
proxy: {
"/": {
target: process.env.VUE_APP_SERVER_API,
ws: false, // 需要websocket 开启
pathRewrite: {
"^/": "/",
},
},
},
},
};
展开全部
收起
写回答
好问题
0 提建议
追加酬金
关注问题
微信扫一扫 点击复制链接 分享 邀请回答
编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0
(可追加 ¥500)
¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付
二维码出错
点击刷新
支付金额
15 元
提供问题酬金的用户不参与问题酬金结算和分配
支付即为同意
《付费问题酬金结算规则》 结题 再想想 删除 再等等
5条回答 默认 最新
-
上午好☀️☀️☀️️
本答案参考ChatGPT-3.5
根据您的问题描述,问题原因是在使用Webpack解析ol依赖文件时,报错提示需要配置合适的loader处理该文件类型。
解决方案如下:
-
确认项目中是否已经安装了处理JavaScript文件的loader,例如babel-loader。
-
在webpack配置文件中添加对JavaScript文件的处理配置。可以在module.rules中添加如下配置:
module: {
rules: [
// ...其它规则
{
test: /\.(js|jsx)$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader'
}
}
]
}
-
如果已经安装了babel-loader但仍然报错,可能是由于相关babel配置不正确。请确认项目根目录下是否有.babelrc或babel.config.js等babel配置文件,并确保配置文件中包含了需要的插件和预设,例如处理ES6语法的@babel/preset-env。
-
如果安装了以上loader和配置仍然无效,可以尝试升级webpack和相关loader的版本,以确保使用了最新版本的解析器。
注意:以上是一般性的解决方案,具体问题需要根据实际情况进行调查和处理。如果能提供更多相关的配置文件和错误信息,可以更准确地定位问题并提供解决方案。
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?
解决
无用
评论
打赏
微信扫一扫 点击复制链接
分享 举报
-
让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
这个报错是因为在Webpack中没有处理ol库中的LRUCache.js文件的加载器,需要手动配置使用babel-loader处理这个文件。具体的处理方式如下:
- 安装babel-loader和相关babel依赖
npm install --save-dev babel-loader @babel/core @babel/preset-env
- 在Webpack配置文件中添加如下规则:
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: "babel-loader",
options: {
presets: ["@babel/preset-env"]
}
}
}
]
}
这个规则表示对所有的.js文件使用babel-loader加载器,并使用@babel/preset-env预设来处理ES6语法。 附上完整的Webpack配置文件示例:
const path = require("path");
const CompressionWebpackPlugin = require("compression-webpack-plugin");
const webpack = require("webpack");
function resolve(dir) {
return path.join(__dirname, dir);
}
console.log(process.env.VUE_APP_SERVER_API);
module.exports = {
publicPath: "/",
outputDir: "dist",
assetsDir: "static",
indexPath: "index.html",
lintOnSave: process.env.NODE_ENV === "development",
productionSourceMap: false,
chainWebpack: (config) => {
config.externals({
axios: "axios",
});
const entry = config.entry("app");
entry.add("babel-polyfill").end();
entry.add("classlist-polyfill").end();
config.module
.rule("js")
.test(/\.js$/)
.exclude(/node_modules/)
.use("babel-loader")
.loader("babel-loader")
.options({
presets: ["@babel/preset-env"],
});
},
css: {
extract: { ignoreOrder: true },
loaderOptions: {
sass: {
data: `@import "@/styles/var.scss";`,
},
},
},
configureWebpack: (config) => {
config.resolve.alias["@"] = resolve("src");
config.performance = {
hints: "warning",
maxEntrypointSize: 50000000,
maxAssetSize: 30000000,
assetFilter: function (assetFilename) {
return assetFilename.endsWith(".js");
},
};
config.plugins.push(
new webpack.ProvidePlugin({
$: "jquery",
jQuery: "jquery",
"windows.jQuery": "jquery",
})
);
if (process.env.NODE_ENV === "production") {
config.optimization.minimizer[0].options.terserOptions.compress.drop_console = true;
config.plugins.push(
new CompressionWebpackPlugin({
filename: "[path].gz[query]",
algorithm: "gzip",
test: new RegExp("\\.(" + productionGzipExtensions.join("|") + ")$"),
threshold: 10240,
})
);
}
},
};
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?
解决
无用
评论
打赏
微信扫一扫 点击复制链接
分享 举报
关注
关注
该回答引用自GPT-3.5,由博主GISer Liu编写:
根据你提供的错误信息和 webpack 配置,问题出现在解析 LRUCache.js 文件时,webpack 报错说是遇到了意外的
token,这可能是由于 webpack 默认不知道如何处理这种文件类型导致的。
解决这个问题的思路是告诉 webpack 如何处理 .js 文件,以及哪些 loader 应该用于处理它们。对于 LRUCache.js 文件中的语法,可能是因为使用了不被当前环境所支持的新语法,比如这里报错的地方使用了可选链语法 ?.,这是
ES2020 中的语法,需要使用相应的 babel 转换器来转换。
首先,需要安装 @babel/plugin-proposal-optional-chaining 插件,它可以帮助我们处理可选链语法。
bashCopy code
npm install --save-dev @babel/plugin-proposal-optional-chaining
然后,在你的 babel.config.js 文件中配置该插件:
javascriptCopy code
module.exports = {
presets: [
// other presets
],
plugins: [
"@babel/plugin-proposal-optional-chaining"
// other plugins
]
}
接着,确保你的 webpack 配置中配置了相应的 babel loader 来处理 .js 文件。你可以使用 babel- loader 并与 Babel 相关的配置一起使用,以确保正确转换 JavaScript 代码。在你的 webpack 配置中添加以下代码:
javascriptCopy code
module.exports = {
// 其他配置...
module: {
rules: [
// 其他规则...
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env'],
plugins: [
"@babel/plugin-proposal-optional-chaining"
// 可以添加其他需要的插件
]
}
}
}
]
}
};
这样配置后,webpack 就能正确地解析和转换 LRUCache.js 文件中的语法,包括可选链语法。
记得重新运行 webpack 构建,看看问题是否已解决。
如果该回答解决了您的问题,请采纳!如果没有,请私信联系或评论您的疑惑
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?
解决
无用
评论
打赏
微信扫一扫 点击复制链接
分享 举报
-
【相关推荐】
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?
解决
无用
评论
打赏
微信扫一扫 点击复制链接
分享 举报