首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何修复Webpack 5中的Babel/运行时/帮助器问题?

如何修复Webpack 5中的Babel/运行时/帮助器问题?
EN

Stack Overflow用户
提问于 2021-01-27 01:09:13
回答 1查看 1.9K关注 0票数 1

我想升级到webpack 5。我已经按照官方指南,升级了所有的关键库(react17,babel,loaders等)。当启动应用程序时,它崩溃并出现23个错误。其中21人来自

..。

典型的错误如下所示:

../../node中出错

_

modules/@babel/runtime/helpers/esm/createSuper.js 1:0-46找不到模块:错误:无法解析'./getPrototypeOf‘in '/Users/myName/Desktop/myapp/node

_

modules/@babel/esm/helpers/esm‘

另外两个错误是:

找不到模块:错误:无法解决FaviconsWebpackPlugin中的'url-loader‘错误-此FaviconsWebpackPlugin版本与您当前的HtmlWebpackPlugin版本不兼容。请升级到HtmlWebpackPlugin >= 5或降级到FaviconsWebpackPlugin 2.x

注意:我的html-webpack-plugin版本在5以上,而favicons webpack-plugin也是最新版本……

不管怎样,这是我的webpack文件:

代码语言:javascript
运行
复制
const FaviconsWebpackPlugin = require("favicons-webpack-plugin");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const OptimizeCSSAssetsPlugin = require("optimize-css-assets-webpack-plugin");
const path = require("path");
const TerserPlugin = require("terser-webpack-plugin");
const webpack = require("webpack");
const { BundleAnalyzerPlugin } = require("webpack-bundle-analyzer");
const getKonf = require("./konf");
const getWebpackServerOptions = require("./server");

function buildWebpackConfiguration() {
  const konfiguration = getKonf("development"); // returns a large json with proxies, token, etc.
  const rootPath = path.resolve(__dirname, "../../../");
  return {
    devtool: "eval-source-map",
    mode: "development",
    node: {
      global: false,
      __filename: false,
      __dirname: false,
    },
    resolve: {
      extensions: [".json", ".jsx", ".js", ".tsx", ".ts"],
      alias: {
        "@componens": "./components",
        "react-dom": "@hot-loader/react-dom",
      },
    },
    module: {
      rules: [
        {
          test: /\.jsx?$/,
          exclude: /node_modules\/(?!(redux-logger|strict-uri-encode|query-string)\/).*/,
          use: [
            {
              loader: "babel-loader",
              options: {
                configFile: path.resolve(rootPath, "./babel.config.js"),
              },
            },
            "react-hot-loader/webpack",
          ],
        },
        {
          test: /\.html$/,
          use: ["html-loader"],
        },
        {
          test: /\.less$/,
          exclude: /\.m\.less$/,
          use: [MiniCssExtractPlugin.loader, "css-loader", "less-loader"],
        },
        {
          test: /\.(eot|gif|jpg|png|svg|ttf|woff)$/,
          exclude: [
            path.resolve(rootPath, "./assets/svg"),
            path.resolve(rootPath, "./icon/glyphs"),
            path.resolve(rootPath, "./search/assets"),
          ],
          use: "url-loader?limit=1024",
        },
        {
          test: /\.m\.less$/,
          use: [
            MiniCssExtractPlugin.loader,
            {
              loader: "css-loader",
              options: {
                modules: {
                  localIdentName: "[local]___[hash:base64:5]",
                },
              },
            },
            "less-loader",
          ],
        },
        {
          test: /\.svg$/,
          use: {
            loader:
              "svg-inline-loader?{'removeTags': true, 'removingTags': ['title', 'desc']",
          },
        },
        {
          test: /\.tsx?$/,
          use: [{ loader: "ts-loader", options: { transpileOnly: true } }],
          exclude: /node_modules/,
        },
        {
          include: /assets\/sw/,
          test: /\.js$/,
          loader: "file-loader",
        },
      ],
    },
    plugins: [
      new HtmlWebpackPlugin({
        title: "My app",
        template: path.resolve(__dirname, "./template/index.ejs"),
        minify: true,
        hash: true,
        scripts: [],
        styles: [],
      }),
      new webpack.DefinePlugin({
        "process.env.NODE_ENV": JSON.stringify("development"),
        "process.env.MOCK_REQUESTS": JSON.stringify(
          process.env.MOCK_REQUESTS || "0"
        ),
        KONF: JSON.stringify(konfiguration),
      }),
      new FaviconsWebpackPlugin({
        logo: path.resolve(rootPath, "./assets/logo.svg"),
        inject: true,
        title: "My App",
      }),
      new webpack.HotModuleReplacementPlugin(),
      new webpack.ContextReplacementPlugin(/moment[/\\]locale$/, /de|en|fr|zh/),
      new MiniCssExtractPlugin({
        filename: "[name].[contenthash].css",
        chunkFilename: "[id].[contenthash].css",
      }),
      new BundleAnalyzerPlugin(),
    ],
    optimization: {
      minimize: true,
      minimizer: [new OptimizeCSSAssetsPlugin({}), new TerserPlugin()],
      moduleIds: "deterministic",
      splitChunks: {
        chunks: "all",
        cacheGroups: {
          defaultVendors: {
            test: /[\\/]node_modules[\\/]/,
            name: "node_vendors",
            chunks: "all",
          },
        },
      },
    },
    devServer: getWebpackServerOptions(konfiguration),
  };
}

module.exports = buildWebpackConfiguration;

这是我的Babel配置文件:

代码语言:javascript
运行
复制
module.exports = {
  ignore: ["node_modules"],
  babelrcRoots: [".", "./packages/*", "./app/*"],
  presets: [
    "@babel/preset-typescript",
    [
      "@babel/preset-env",
      {
        targets: {
          browsers: ["defaults"],
        },
      },
    ],
    "@babel/preset-react",
  ],
  env: {
    test: {
      plugins: [
        [
          "babel-plugin-react-css-modules",
          {
            generateScopedName: "[local]",
            filetypes: {
              ".less": {
                syntax: "postcss-less",
              },
            },
          },
        ],
      ],
    },
    development: {
      plugins: [
        [
          "babel-plugin-react-css-modules",
          {
            webpackHotModuleReloading: true,
            generateScopedName: "[local]___[hash:base64:5]",
            handleMissingStyleName: "warn",
            filetypes: {
              ".less": {
                syntax: "postcss-less",
              },
            },
          },
        ],
      ],
    },
    production: {
      plugins: [
        [
          "babel-plugin-react-css-modules",
          {
            webpackHotModuleReloading: true,
            generateScopedName: "[hash:base64]",
            filetypes: {
              ".less": {
                syntax: "postcss-less",
              },
            },
          },
        ],
      ],
    },
  },
  plugins: [
    "@babel/plugin-transform-object-assign",
    "@babel/plugin-transform-regenerator",
    "@babel/plugin-transform-runtime",
    "@babel/plugin-syntax-dynamic-import",
    "@babel/plugin-transform-modules-commonjs",
    ["@babel/plugin-proposal-class-properties", { loose: true }],
    [
      "module-resolver",
      {
        cwd: "babelrc",
        root: "./",
        alias: {
          "@components": "./components",
          "@assets": "./assets",
        },
      },
    ],
  ],
};

如何解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-01 14:53:28

相关至

https://github.com/babel/babel/issues/8462

,运行时问题可以通过将@babel/runtime pkg版本升级到7.12.0以上来解决

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65905907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档