babel-polyfill 和 babel-register 的区别和用法

阅读时长 6 min read

前言

当我们在开发前端项目的时候,我们需要使用许多新的语法特性和 API,比如 Promise 和 async/await,但是这些特性在一些老旧的浏览器中并不支持,在这种情况下,我们需要使用 Babel 进行编译。Babel 有许多插件和工具,其中两个非常常用的是 babel-polyfill 和 babel-register。

babel-polyfill

babel-polyfill 是一个 JavaScript 库,它通过在全局环境中添加一些新的特性来模拟出完整的 ES2015+ 运行时环境,从而使得可以使用新的 ES2015+ API。它可以在代码中的任何地方使用,但是需要在代码执行之前被加载进来。

因为它会改变全局环境,因此不建议在库中使用,因为库的行为可能会被影响,比如会污染全局作用域。在工程项目中,请尽可能使用预设以减小体积。

安装

使用 NPM 或者 Yarn 进行安装:

或者

使用

在 entry 文件的头部中引入:

或者使用 script 标签引入:

然后就可以在代码中使用 ES2015+ 的 API,比如:

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

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

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

指导意义

由于 polyfill 会改变全局环境,因此不建议在各类开发的库中使用,而是在 Web 应用程序(例如 Ember,React)中使用。这种方式在之前是最常见的使用方法。

但是需要注意的是,polyfill 会在项目中增加大量的代码,使项目打包后的大小变得更大,所以现在更多的 Web 应用程序使用的是 @babel/preset-env 其中需要配置使用重要的 ES6+ API。

babel-register

babel-register 是一个工具,它可以自动编译 ES6+ 的代码。它可以安装一次,在整个项目中使用它,也可以在需要编译的文件中使用。由于它改变了 Node 的 require() 函数,因此它只在开发阶段使用,并且不适用于 Webpack 等 Bundler 工具,因为这些工具自己处理 require 函数。

成为本地开发时的调试工具。现在已经被许多工具抛弃。

安装

使用 NPM 或者 Yarn 进行安装:

或者

使用

在运行代码或测试之前,添加以下代码段:

它会自动引入 Babel,并且编译所有 require 的文件。这个方法在 Web 应用程序中使用的时候非常不实用,但是在测试应用程序或者其他类型的应用程序中是非常有用的。

指导意义

由于 babel-register 编译时间过长而不够稳定,建议在生产环境中不要使用,因为会降低应用程序的性能。

总结

babel-polyfill 用于垫片,它模拟完整的 ES2015+ 运行时环境,使得可以使用新的 ES2015+ API,但是会增加大量文件大小。babel-register 是一种工具,它可以自动编译 ES6+ 代码,但是由于它改变了 Node 的 require() 函数,在 Web 应用程序中不适用于使用。

应该在 Web 应用程序中使用 @babel/preset-env。 它仅仅包括了你的项目使用的必要的方法和代码。在开发测试中,建议使用 babel-register 以获得更良好的体验。

如果您发现自己正在使用 babel-polyfill 并正在构建库,则最好使用 @babel/preset-env 代替,因为 @babel/preset-env 将会使您的项目更小,同时包括更多的代码支持,更小型的体积。

示例如下:

.babelrc

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

package.json

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

Webpack 配置

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

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

Source: FunTeaLearn,Please indicate the source for reprints https://funteas.com/post/645c5372968c7c53b0ea6cb2

Feed
back