还有14分钟九点半 2024-04-17 11:01 采纳率: 0%
浏览 29

webpack解析ol依赖的时候报错

自己配的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: {
                    "^/": "/",
                },
            },
        },
    },
};


  • 写回答

6条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-17 11:01
    关注

    引自免费微信小程序:皆我百晓生

    根据您提供的信息,错误发生在./node_modules/ol/structs/LRUCache.js文件中,这通常是因为Webpack没有正确地处理某些模块,可能是由于ES6语法未被转换为浏览器兼容的ES5版本。

    为了修复这个问题,你需要确保你的项目中有一个Babel loader来编译这些模块。目前看来,你的配置文件中并没有明确设置Babel loader。你需要在Webpack配置中添加一个Babel预处理器,以便将Node_module中的现代JavaScript代码转换为浏览器可以理解的格式。

    首先,确保你已经安装了@babel/core, @babel/preset-env, 和 @babel/cli 这些包。如果没有,可以通过运行以下命令进行安装:

    npm install --save-dev @babel/core @babel/preset-env @babel/cli
    

    接下来,在你的项目根目录创建一个.babelrc文件,并添加以下内容:

    {
      "presets": [
        [
          "@babel/preset-env",
          {
            "targets": {
              "browsers": "> 1%",
              "uglify": true
            },
            "modules": false
          }
        ]
      ]
    }
    

    然后,你需要在chainWebpack函数中添加Babel loader到规则中,这样Webpack才能正确处理.js文件。修改chainWebpack部分如下:

    chainWebpack: (config) => {
      // ...其他配置...
    
      // 添加Babel加载器
      config.module
        .rule('babel')
        .test /\.m?js$/i // 匹配所有.js和.mjs文件
        .use('babel-loader')
        .loader('babel-loader')
        .options({
          presets: ['@babel/preset-env'],
        });
    
      // ...其他配置...
    }
    

    最后,确保在项目的package.json中,对开发脚本进行更新,使其使用Babel运行:

    "scripts": {
      "serve": "vue-cli-service serve",
      "build": "vue-cli-service build --mode production && npm run optimize",
      "optimize": "npx optimize-css-assets && npx terser -c -m -o dist/bundle.min.js dist/bundle.js"
    },
    

    这里我们假设你已经安装了optimize-css-assetsterser这两个优化工具。如果没有,可以使用npm install --save-dev optimize-css-assets terser命令安装。

    现在,重新运行npm run servenpm run build应该能成功编译并运行项目。如果还有其他问题,可能需要检查其他依赖项是否有类似的问题,或者查看Webpack配置中是否有遗漏的部分。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月17日

悬赏问题

  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表