非常教程

Babel 参考手册

常规 | basics

常见问题 | FAQ

为什么 for...of 的输出那么冗长和难看?

为了符合规范,迭代器的返回方法必须被报错方法调用。另一种方法是启用松散模式, 但请注意,如果你启用松散模式那会有很多注意事项,而且你愿意选择非规范。

了解更多信息请查看 google/traceur-compiler#1773 和 babel/babel#838。

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

箭头函数与正常函数不同。在箭头函数中,argumentsthis 指向他们的外部函数,例如:

const user = {
  firstName: "Sebastian",
  lastName: "McKenzie",
  getFullName: () => {
    // 哎哟! `this` 在这里实际上并不指向 `user`
    return this.firstName + " " + this.lastName;
  },
  // 在对象中使用简写方法
  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

如果你不想要这种行为,那么你可以选择在 es2015-modules-transform 中禁用 strict

请注意: 如果你这样做,你将愿意偏离规范,这可能会导致未来的互操作问题。

求助?!我只是想使用 5.x 的 Babel!现在一切都太复杂了!

我们听到了! Babel 6 需要一点配置才能使用。 我们认为这是最好的并已经增加 presets 来缓解这种过渡。

从 Babel 5.x 升级到 Babel 6

Babel 6 的核心是插件。你需要什么插件完全取决于你指定的配置,但只需在 .babelrc 文件中添加以下内容, 将得到所有在 Babel 5 中相同的转换:

{
  "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 做贡献?

请查看贡献。

为什么会得到语法错误/意外标识?

很可能你没有包含支持该功能的插件/preset。(也可能是解析器的问题,或它实际上是一个语法错误)。

为什么不更新一个 babel-x 包?

我们目前使用 Lerna 的固定版本管理系统。

我们对所有包有一个全局版本。当我们发布一个版本的时候,唯一更新的包是实际上有更改的包(我们在那文件夹执行了 git diff)。

如果只更新 babel-plugin-transform-exponentiation-operator 到 6.x.x,由于其他依赖使用 ^,一般不用对所有包发布一个新的版本。

例如,Babel v6.6.0 版本并不意味着所有包现在都是 6.6.0。

为了确保你使用的包是最新版本,你可能要再次删除 node_modules 和 执行 npm install

Babel

Babel 是一个通用的多用途 JavaScript 编译器,通过 Babel 你可以使用(并创建)下一代的 JavaScript。

Babel 目录

1.工具 | instruction
2.预设 | Presets
3.常规 | basics
4.用法 | usages