本节我们来学习 @babel/plugin-transform-runtime 和 @babel/runtime 。
Babel 中使用辅助函数来实现常见功能,例如 _extend() 函数,每个编译后的文件都需要定义它所需要使用的辅助函数。但这样显然会造成很多重复,所以 Babel 把所有的辅助函数都封装于 @babel/runtime,每个编译后的文件只需要引用 @babel/runtime 即可。
@babel/runtime 插件可以将工具函数的代码转换成 require 语句,指向为对 @babel/runtime 的引用。每当要转译一个 API 时,都要手动加上 require(’@babel/runtime’)。简单说 @babel/runtime 更像是一种按需加载的实现,比如哪里需要使用 Promise,只要在这个文件头部添加如下代码即可:
require Promise from '@babel/runtime/core-js/promise'
而为了方便使用 @babel/runtime 插件,解决手动 require 的苦恼。它会分析我们的 ast 中,是否有引用 @babel/runtime (通过映射关系),如果有就会在当前模块顶部插入我们需要的垫片。
transform-runtime 是利用插件自动识别并替换代码中的新特性,所以不需要再引入,只需要装好 @babel/runtime 和配置 plugin 就可以了。
大多数情况下,我们应该安装 @babel/plugin-transform-runtime 作为开发依赖项,即在安装命令中加上 --save-dev,并且将 @babel/runtime 作为生产依赖项,在安装命令中使用 --save。
安装命令如下所示:
> npm install --save-dev @babel/plugin-trabsform-runtime > npm install --save @babel/runtime
安装好后,我们可以在 .babelrc 配置文件中进行配置,@babel/plugin-transform-runtime 是否要开启某项功能,都是在配置项里设置的,某些配置项的设置是需要安装 npm 包。@babel/plugin-transform-runtime 在没有设置配置的时候,其配置项参数取默认值。
下面两个配置效果是一样的:
// 默认配置 { "plugins": [ "@babel/plugin-transform-runtime" ] } // 设置其配置项 { "plugins": [ [ "@babel/plugin-transform-runtime", { "helpers": true, "corejs": false, "regenerator": true, "useESModules": false, "absoluteRuntime": false, "version": "7.0.0-beta.0" } ] ] }
切换是否用对moduleName的调用替换内联的babel帮助程序(类调用检查、扩展等)。