Babel babylon
Babylon 是 中使用的 JavaScript 解析器。
认启用最新的 ECMAScript 版本(ES2017)。
附加注释。
JSX, Flow, Typescript 语法。
实验阶段的语法提案(至少达到 阶段的 PR)。
API
parse() 将提供的 code 解析为完整的 ECMAScript 程序,而 parseExpression() 试图解析表达式,并会考虑问题。如果有疑问,请使用 .parse()。
allowImportExportEverywhere: 认情况下,import 和 export 声明只能出现在头部。设置该选项为 true 时,则允许他们在的任何地方使用。
allowReturnOutsideFunction: 认情况下,顶级的 return 语句会引发。设置该选项为 true 时,则会接受的。
allowSuperOutsideMethod: TODO
sourceType: 表明应该解析的模式。可以是 "script","module" 或者 "unambiguous" 中任意。认为 "script"。"unambiguous" 将使得 Babylon 尝试根据 ES6 的 import 或者 export 声明来进行推测。具有 ES6 import 和 export 的被认为是 "module",否则被认为是 "script"。
sourceFilename: 将的 AST 节点与其源名相关联。多用于多个输入的 AST 和 source map 时。
startLine: 认情况下,解析的第一行被视为第 1 行。你可以提供行号来作为起始。多用于与其他源工具集成。
plugins: 数组,包含要启用的。
strictMode: TODO
ranges: 为每个节点 ranges : [node.start, node.end]
tokens: 将所有解析的 token 到 File 节点的上的 tokens 中。
Babylon 根据 AST 。它基于 ,具有以下差别:
现在可以使用 estree 来取消掉这些差别
符号会被替换为,,,,
符号会被替换为 和
会被替换为
和的 directives 字段中包含额外的和
中的,和值的被强制/带入主节点。
JSX 的 AST 基于 并额外了节点类型:
JSXText
Babylon 在大多数情况下遵循 semver。唯一需要注意的是,某些规范遵从性的修复可能会在下补丁版本中发布。
例如:我们推送了修复早期的,就像 - 多个认导出多个。这被视为进行修复,即时它会导致构建失败。
require("babylon").parse("code", { // 以严格模式解析并允许模块声明 sourceType: "module", plugins: [ // 启用 jsx 和 flow 语法 "jsx", "flow" ]});
estree
jsx
flow
doExpressions
objectRestSpread
decorators(基于过时版本的 Decorators 提案。将在 Babylon 的未来版本中。)
classProperties
exportExtensions
asyncGenerators
functionBind
functionSent
dynamicImport
templateInvalidEscapes
鸣谢
该项目中使用了大量的 和 语法,感谢 和 出色的工作。