从 Babel 6 到 Babel 7:常见问题解决方案

近年来,Babel 已成为前端开发中最常用的工具之一。它是用于将 ECMAScript 2015+ 代码编译成可以在现代浏览器和运行环境中运行的 JavaScript 的工具。Babel 6 曾经是其中一个受欢迎的版本,但现在更新的 Babel 7 换了一些东西并引入了一些新功能。在本文中,我们将回顾一些常见问题,并为你提供 Babel 6 到 Babel 7 的迁移方案。

Q. 我需要升级吗?

如果您在使用 Babel 6 并且不打算更改任何东西,那么升级到 Babel 7 可能不是必要的。但是,如果您正在冒着不兼容错误,通过使用不兼容的插件或者使用无法在 Babel 6 中得到支持的新语法来使用编译器,那么升级会是一个明智的选择。

Q. Babel 7 有什么新功能?

Babel 7 带来了很多有用的新功能,主要有以下几个方面:

1. 内置插件的替代方式

在 Babel 6 中,您必须明确地安装和使用各种插件和预设(设置插件的组合),而 Babel 7 简化了这一过程。其中一个选择是使用 @babel/preset-env,它只是一个预设,涵盖了在任何浏览器中执行任何 JavaScript 代码所需的配置。

2. 从 Polyfill 到 env

Polyfill 是让你的代码在目标浏览器中运行的一种方式,但是 Babel 7 引入了一个名为 @babel/preset-env 的新选项,这是更加灵活且更容易配置的选择。

3. 更好的 Tree Shaking

Tree Shaking 是指构建(打包)应用程序时,通过识别未使用的代码块来优化它的过程。在 Babel 7 中有更好的支持「side-effect-free」静态分析的插件,并且网络上也有许多好的教程和实际应用例子。

4. 更好的支持 TypeScript

如果您在使用 TypeScript,这也是讲述 Babel 7 的另一个理由。您现在可以使用 @babel/preset-typescript 预设,这将使您不需要转换整个 TypeScript 文件集,而只需要对其中一小部分进行转换或解析。同时你也可以使用 @babel/plugin-proposal-class-properties,让你在类声明中使用实例属性的属性初始化器。

5. Async generator functions

在 Babel 6 中您必须使用 regenerator-runtime 来转换 async/await 语法,但是现在,Babel 7 内置了该功能,并在其 core-package 之一 @babel/polyfill 中包含了 regenerator-runtime

Q. 如何从 Babel 6 迁移到 Babel 7?

迁移到 Babel 7 并不是完全平滑的过程,但是下面的几个步骤可以使迁移过程变得更加轻松和自动化。

1. 在 package.json 中更新值

首先,你需要在你的包管理器(通常是 Yarn 或者 npm)中更新值。在 package.json 文件中,将 "babel-core": "^6.x.x"(或其他版本)替换为 "@babel/core": "^7.x.x",并取消依赖项的安装以及对 .babelrc 文件的引用。

例如:

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

被更新为

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

2. 更新现有插件

您需要找到当前的 .babelrc 文件(如果有)并将其替换为以下内容:

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

这里我们添加了 @babel/plugin-transform-runtime 以及 @babel/plugin-proposal-class-properties 插件,这样在进行构建时就可以将 async/await 等 feature 转化改针对 env.

3. 配置 Webpack

如果您在使用 Webpack,则需要更新其配置以引用以前已经提到的最新 Babel 包。根据您的 Webpack 版本和使用情况,这个步骤会有所不同,但大多数集成过程都涉及到更新依赖的引用。您可以在 这个示例仓库 中找到更多关于如何更新 Webpack 的信息。

4. 运行所有新的命令

最后,你需要更新你的命令行中的所有相关命令。例如,如果您在使用 Jest 的话,则需要更新其配置文件来使用新的 babel-jest 包,该包是 Babel 版本 7 的完整包存储库。例如,您可以使用下面的命令将 Jest 更新到版本 23.0.1

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

结论

Babel 7 对于正在使用 JavaScript 的前端开发者来说是一个可行的升级选择。虽然存在一些变动,但是在您完成了所有必要步骤之后,使用体验会变得愉快和高效。在迁移过程中,建议您仔细阅读文档以避免出现任何意想不到的问题。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/67341cca0bc820c58246a452