常见问题
本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →
为什么 for...of 的输出如此冗长且丑陋?
为了符合规范,迭代器的 return 方法必须在错误发生时被调用。替代方案是使用 Babel 7.13 引入的假设,例如 ArrayLikeIsIterable 和 IterableIsArray,但请注意使用假设需要了解大量注意事项,这意味着您主动选择不遵守规范。
更多信息请参考 babel/rfcs#5、google/traceur-compiler#1773 和 babel/babel#838。
为什么箭头函数中的 this 和 arguments 会被重新映射?
箭头函数不等同于普通函数。箭头函数中的 arguments 和 this 引用的是其外层函数的对应值,例如:
const user = {
firstName: "Sebastian",
lastName: "McKenzie",
getFullName: () => {
// whoops! `this` doesn't actually reference `user` here
return this.firstName + " " + this.lastName;
},
// use the method shorthand in objects
getFullName2() {
return this.firstName + " " + this.lastName;
},
};
更多信息请参考 babel/babel#842、babel/babel#814、babel/babel#733 和 babel/babel#730。
为什么 this 会被重新映射为 undefined?
Babel 默认将所有输入代码视为 ES2015 模块。ES2015 模块隐式采用严格模式,这意味着顶层的 this 在浏览器中不是 window,在 Node 中也不是 exports。
如果不希望此行为,可以在 plugin-transform-modules-commonjs 中禁用 strict 选项。
请注意: 这样做意味着您主动偏离规范,可能导致未来的互操作问题。
求助!我只想像 5.x 版本那样使用 Babel!现在一切都太复杂了!
我们理解!Babel 6 需要少量配置才能运行。我们认为这是最佳实践,并添加了预设来简化过渡。
从 Babel 5.x 升级到 Babel 6
Babel 6 的核心是插件。所需插件完全取决于具体配置,但只需添加以下配置文件即可获得与 Babel 5 相同的转换:
{
"presets": ["env", "react", "stage-2"]
}
- npm
- Yarn
- pnpm
- Bun
npm install babel-preset-env babel-preset-react babel-preset-stage-2 --save-dev
yarn add babel-preset-env babel-preset-react babel-preset-stage-2 --dev
pnpm add babel-preset-env babel-preset-react babel-preset-stage-2 --save-dev
bun add babel-preset-env babel-preset-react babel-preset-stage-2 --dev
另请查阅我们的设置 Babel 6 博客文章。
所有文档都去哪儿了?!
Babel 6 removes a lot of the options in favor of plugins so a lot of the docs are no longer applicable.
For every removed option there should be a plugin for it. It's possible we may have missed something, if you think this is the case, please open an issue!
Babel 是开源项目,我们感谢任何形式的贡献。欢迎通过向 babel.github.io 仓库提交 pull request 来协助完善文档。
如何从源代码构建 Babel?
请参阅构建说明。
如何为 Babel 做贡献?
请参阅贡献指南。
为什么会出现语法错误/意外标记?
最可能的原因是您未包含支持该特性的插件或预设(也可能是解析器存在缺陷,或者确实是语法错误)。
为什么某个 babel-x 包没有更新?
我们当前采用 Lerna 的固定版本管理机制。
所有包共享全局版本号。发布新版本时,只有实际发生变更的包才会更新(我们会检查对应目录的 git diff)。
例如当仅更新 babel-plugin-transform-exponentiation-operator 到 6.x.x 时,由于其他依赖使用 ^ 版本限定符,我们不会为所有包发布新版本。
以 Babel v6.6.0 版本为例,这并不代表所有包都升级到了 6.6.0。
为确保使用最新包版本,您可能需要删除 node_modules 目录后重新执行 npm install。