@babel/plugin-transform-block-scoping
信息
此插件包含在 @babel/preset-env
中
示例
输入
JavaScript
{
let a = 3;
}
let a = 3;
输出
JavaScript
{
var _a = 3;
}
var a = 3;
常量检查
此插件还会验证所有 const
变量。常量重新赋值是一个运行时错误,它将为这些错误插入必要的错误代码。
安装
- npm
- Yarn
- pnpm
npm install --save-dev @babel/plugin-transform-block-scoping
yarn add --dev @babel/plugin-transform-block-scoping
pnpm add --save-dev @babel/plugin-transform-block-scoping
用法
使用配置文件(推荐)
无选项
babel.config.json
{
"plugins": ["@babel/plugin-transform-block-scoping"]
}
带选项
babel.config.json
{
"plugins": [
[
"@babel/plugin-transform-block-scoping",
{
"throwIfClosureRequired": true
}
]
]
}
通过 CLI
Shell
babel --plugins @babel/plugin-transform-block-scoping script.js
通过 Node API
JavaScript
require("@babel/core").transformSync("code", {
plugins: ["@babel/plugin-transform-block-scoping"],
});
选项
throwIfClosureRequired
boolean
,默认为 false
。
在以下情况下,在转换时不可能在不添加额外函数和闭包的情况下重写 let/const
JavaScript
for (let i = 0; i < 5; i++) {
setTimeout(() => console.log(i), 1);
}
在对性能极其敏感的代码中,这可能是不可取的。如果设置了 "throwIfClosureRequired": true
,Babel 会在转换这些模式时抛出异常,而不是自动添加额外的函数。
tdz
boolean
,默认为 false
。
默认情况下,此插件将忽略块级作用域变量的*时间死区 (TDZ)*。以下代码在使用 Babel 转译时**不会抛出错误,这不符合规范**
JavaScript
i;
let i;
如果您需要这些错误,可以通过为此插件设置 "tdz": true
来告诉 Babel 尝试找到它们。但是,当前的实现可能无法正确处理所有边缘情况,最好一开始就避免使用这样的代码。
提示
您可以阅读更多关于配置插件选项的信息 此处