常见问题解答
为什么 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.js 中也不是 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
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
另请查看我们的 设置 Babel 6 博客文章。
所有文档都去哪儿了?!
Babel 6 删除了许多选项,转而使用 插件,因此许多文档不再适用。
对于每个删除的选项,都应该有一个插件。我们可能遗漏了一些内容,如果您认为是这样,请 提出问题!
Babel 是一个开源项目,我们感谢我们能得到的任何和所有贡献。如果您能通过向 babel.github.io 存储库提交拉取请求来帮助我们编写文档,我们将不胜感激。
如何从源代码构建 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
。