跳至主要内容

@babel/plugin-transform-block-scoping

信息

此插件包含在 @babel/preset-env

示例

输入

JavaScript
{
let a = 3;
}

let a = 3;

输出

JavaScript
{
var _a = 3;
}

var a = 3;

常量检查

此插件还会验证所有 const 变量。常量重新赋值是一个运行时错误,它将为这些错误插入必要的错误代码。

安装

npm install --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 尝试找到它们。但是,当前的实现可能无法正确处理所有边缘情况,最好一开始就避免使用这样的代码。

提示

您可以阅读更多关于配置插件选项的信息 此处