块作用域转换插件
非官方测试版翻译
本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →
信息
此插件已包含在 @babel/preset-env 中
示例
输入
JavaScript
{
let a = 3;
}
let a = 3;
输出
JavaScript
{
var _a = 3;
}
var a = 3;
常量检查
此插件还会验证所有 const 变量。
重新赋值常量会导致运行时错误,插件会为此插入必要的错误代码。
安装
- npm
- Yarn
- pnpm
- Bun
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
bun add --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 会尝试定位这些错误。但当前实现可能无法覆盖所有边界情况,最佳实践仍是避免编写此类代码。
提示
你可以在此处阅读更多关于配置插件选项的信息。