Babel 6 升级到 7,你需要了解这些

阅读时长 4 分钟读完

Babel 是一个 JavaScript 编译器,可以将新版本的 JavaScript 代码转换成向后兼容的代码,使得开发者可以在老版本的浏览器上运行新版 JavaScript 代码。

最近,Babel 发布了 7.0 版本,相对于之前的 6.x 版本有很多变化和更新。如果你已经在使用 Babel 6,并打算升级到 7,请务必了解以下内容。

安装和使用

Babel 7 不再支持单独的 babel-cli 和 babel-core,而是将所有 Babel 相关的库都打包在一个单独的 npm 包中,即 @babel/cli 和 @babel/core。所以,第一步需要卸载旧版本并安装新版本:

接着,在 package.json 中配置 @babel/preset-env,让 Babel 可以根据目标环境自动转换代码。

在执行命令行操作时,需要使用新的 syntax,例如:

或者在 package.json 中添加 scripts 配置:

然后,可以使用 npm run build 命令运行程序。

插件

Babel 7 中,插件的命名和 package.json 的配置都发生了变化。

插件命名

Babel 6 插件的命名格式为 babel-plugin-NAME,例如 babel-plugin-transform-runtime。而 Babel 7 插件的命名格式为 @babel/plugin-NAME,例如 @babel/plugin-transform-runtime

package.json 配置

Babel 6 的 package.json 配置如下:

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

Babel 7 的 package.json 配置如下:

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

preset

Babel 7 中将启用 preset-env 代替 es2015、es2016、es2017、latest 等 preset。preset-env 会根据目标环境的配置,自动转换代码。

在 Babel 6 中,我们可能会使用这样的配置:

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

而在 Babel 7 中,我们应该改成:

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

preset-env 会根据目标环境的配置,自动转换代码。因此,我们无需手动指定 es2015 或 stage-2 之类的 preset。

Polyfill

在 Babel 7 中,使用 @babel/polyfill 代替 babel-polyfill。

然后在代码中导入即可。

总结

Babel 6 升级到 7,并不是一件很艰难的事情,只需注意其中变动的方面,然后相应地修改代码即可。

升级到 Babel 7,可以让我们使用更强大的 preset-env,更优雅的插件命名方式,更简便的 Polyfill 引入方式等等。

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

纠错
反馈