解决 Babel 编译 ES6 代码时出现的 TypeError:Cannot read property 'resolve' of undefined 错误

阅读时长 4 分钟读完

背景

在前端开发中,我们常常会使用 Babel 编译 ES6 代码,从而在现代浏览器中运行。然而,在使用 Babel 进行编译时,有时候会出现 TypeError: Cannot read property 'resolve' of undefined 错误,这个错误会影响开发效率,让人十分头疼。

原因

造成该错误的原因是 Babel 的依赖项 @babel/core 与 webpack 的依赖项 webpack 版本不兼容。具体原因是 @babel/core 包中使用了 webpack 5.x 中的一个函数 webpack.util.parseJson,这个函数在 webpack 4.x 中是不存在的,从而导致了该错误。

解决方法

解决该错误的方法有两种,分别是升级 webpack 到 5.x 版本和降级 @babel/core 的版本。

升级 webpack 到 5.x 版本

如果你的项目中正在使用 webpack 4.x 版本,你可以直接升级 webpack 到 5.x 版本以解决该错误。具体方法如下:

  1. 安装最新版本的 webpack 包:

    npm install webpack --save-dev

  2. 修改 webpack.config.js 文件中的配置:

    -- -------------------- ---- -------
    ----- ---- - ----------------
    
    -------------- - -
      ------ -----------------
      ------- -
        --------- ------------
        ----- ----------------------- --------
      --
      ------- -
        ------ -
          -
            ----- --------
            -------- ----------------------------------
            ---- -
              ------- ---------------
              -------- -
                -------- ----------------------
              --
            --
          --
        --
      --
    --

    我们修改了 module.rules.use.options.presets 的值,将其改为 ['@babel/preset-env']

  3. 在项目中安装最新版本的 @babel/preset-env 包:

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

  4. 如果你之前使用了其他 @babel 包,请更新到最新版本。

降级 @babel/core 的版本

如果你不想升级 webpack 的版本,你也可以降级 @babel/core 的版本。具体方法如下:

  1. 安装 @babel/core 的 7.10.0 版本:

    npm install @babel/core@7.10.0 --save-dev

  2. 在项目中安装 @babel/preset-env 和其他 @babel 包的 7.10.0 版本:

    npm install @babel/preset-env@7.10.0 @babel/plugin-proposal-class-properties@7.10.0 --save-dev

  3. 修改 babel.config.js 文件中的配置:

总结

解决 Babel 编译 ES6 代码时出现的 TypeError:Cannot read property 'resolve' of undefined 错误,有两种方法:升级 webpack 到 5.x 版本或者降级 @babel/core 的版本。具体该如何选择,需要根据项目情况来决定,但无论哪种方法,我们都需要时刻关注这些工具的版本兼容性,避免出现各种奇怪的错误。

示例代码

下面是一个使用了 ES6 语法的示例文件:

-- -------------------- ---- -------
----- ------ -
  ----------------- ---- -
    --------- - -----
    -------- - ----
  -

  ------- -
    ---------------- -- ---- -- ------------- --- ----------- ----- -------
  -
-

----- - - --- ------------- ----
----------

如果你在使用 Babel 编译该文件时出现了 Cannot read property 'resolve' of undefined 错误,请根据上文的内容进行相应的处理。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64e95f0df6b2d6eab34abbe1

纠错
反馈