前言
当我们在开发前端项目的时候,我们需要使用许多新的语法特性和 API,比如 Promise 和 async/await,但是这些特性在一些老旧的浏览器中并不支持,在这种情况下,我们需要使用 Babel 进行编译。Babel 有许多插件和工具,其中两个非常常用的是 babel-polyfill 和 babel-register。
babel-polyfill
babel-polyfill 是一个 JavaScript 库,它通过在全局环境中添加一些新的特性来模拟出完整的 ES2015+ 运行时环境,从而使得可以使用新的 ES2015+ API。它可以在代码中的任何地方使用,但是需要在代码执行之前被加载进来。
因为它会改变全局环境,因此不建议在库中使用,因为库的行为可能会被影响,比如会污染全局作用域。在工程项目中,请尽可能使用预设以减小体积。
安装
使用 NPM 或者 Yarn 进行安装:
npm install --save @babel/polyfill
或者
yarn add @babel/polyfill
使用
在 entry 文件的头部中引入:
import "@babel/polyfill";
或者使用 script 标签引入:
<script src="node_modules/@babel/polyfill/dist/polyfill.min.js"></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 进行安装:
npm install --save-dev @babel/register
或者
yarn add --dev @babel/register
使用
在运行代码或测试之前,添加以下代码段:
require("@babel/register");它会自动引入 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