Babel-plugin-transform-runtime 的使用教程

阅读时长 4 分钟读完

前言

现在的前端项目越来越复杂,使用了更多的 ES6+ 语言特性,为了在低版本浏览器上兼容这些特性,我们需要使用 Babel 来把 ES6+ 代码转成 ES5 代码。但是,Babel 转换后的代码会包含一些 helper 函数,这些函数会被插入到每一个文件中,导致打包后的文件较大。一个解决方案是使用 Babel-plugin-transform-runtime 插件来抽取 helper 函数到公共模块中,从而避免重复插入。

安装

首先需要安装 Babel-plugin-transform-runtime:

使用

配置

在 .babelrc 中,添加 "transform-runtime" 插件以及它的"corejs"选项:

注意,"corejs" 选项必须指定,因为它告诉 Babel-plugin-transform-runtime 使用哪个版本的 core-js 来作为 helper 函数的来源。

安装依赖

Babel-plugin-transform-runtime 还需要依赖 @babel/runtime,所以需要安装:

使用示例

下面来看一个使用示例,使用 async/await 特性。

1.安装依赖

2.配置.babelrc

-- -------------------- ---- -------
-
  ---------- -
    --------------------- -
      ---------- -
        ----- ----
      --
      -------------- --------
      --------- -
    --
  --
  ---------- -
    ----------------------------------- -
      --------- -
    --
  -
-
展开代码

3.编写代码

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

------------------- -- -
  ------------------
---
展开代码

此处,我们使用 async/await 来发送 ajax 请求,使用了 Promise 和 fetch 方法。Babel 会把这段代码转成 ES5 代码,但会在每个文件中插入 Promise 和 fetch 的 helper 函数,这会导致打包后的文件较大。

4.使用 Babel-plugin-transform-runtime

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

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

------------------- -- -
  ------------------
---
展开代码

在代码中,我们添加了一个 import 语句,导入了 Babel-runtime/regenerator 模块,这个模块提供了 async/await 执行所需的 helper 函数。我们还在入口文件中导入了 @babel/polyfill 模块,这个模块提供了一些 ES6+ 特性的 polyfill。

这样,Babel-plugin-transform-runtime 会把 fetch 等 helper 函数抽取到一个公共的 Babel-runtime 模块中,每次使用时再从 Babel-runtime 中引用,从而避免重复插入到每个文件中。

结语

使用 Babel-plugin-transform-runtime 可以有效减小打包后的 JS 文件体积,避免因为 helper 函数的重复插入,导致文件过大,加载缓慢。如果你的项目中使用了 async/await,Promise,Generator 等特性,不妨试试这个方式,把你的代码转成 ES5 代码。

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

纠错
反馈

纠错反馈