跳至主要内容

常见问题解答

为什么 for...of 的输出如此冗长和丑陋?

为了符合规范,迭代器的 return 方法必须在错误时被调用。另一种方法是使用 Babel 7.13 中引入的 假设,例如 ArrayLikeIsIterableIterableIsArray,但请注意,如果您使用假设,则有很多需要注意的地方,并且您愿意选择不遵守规范。

有关更多信息,请参阅 babel/rfcs#5google/traceur-compiler#1773babel/babel#838

为什么 thisarguments 在箭头函数中被重新映射?

箭头函数等同于普通函数。例如,箭头函数内的 argumentsthis 引用它们的外部函数

JavaScript
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#842babel/babel#814babel/babel#733babel/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 中所有相同的转换

babel.config.json
{
"presets": ["env", "react", "stage-2"]
}
npm install 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