跳至主内容

块作用域转换插件

非官方测试版翻译

本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →

信息

此插件已包含在 @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
}
]
]
}

通过命令行

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 会尝试定位这些错误。但当前实现可能无法覆盖所有边界情况,最佳实践仍是避免编写此类代码。

提示

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