@babel/core
var babel = require("@babel/core");
import { transform } from "@babel/core";
import * as babel from "@babel/core";
所有转换都将使用您的本地配置文件。
transform
babel.transform(code: string, options?: Object, callback: Function)
转换传入的code
。使用包含生成的代码、源映射和 AST 的对象调用回调函数。
babel.transform(code, options, function(err, result) {
result; // => { code, map, ast }
});
示例
babel.transform("code();", options, function(err, result) {
result.code;
result.map;
result.ast;
});
在 Babel 6 中,此方法是同步的,并且不存在transformSync
。为了向后兼容,如果没有给出回调函数,此函数将同步运行。如果您从 Babel 7 开始并且需要同步行为,请使用transformSync
,因为此向后兼容性将在 Babel 8 中删除。
transformSync
babel.transformSync(code: string, options?: Object)
转换传入的code
。返回一个包含生成的代码、源映射和 AST 的对象。
babel.transformSync(code, options); // => { code, map, ast }
示例
var result = babel.transformSync("code();", options);
result.code;
result.map;
result.ast;
transformAsync
babel.transformAsync(code: string, options?: Object)
转换传入的code
。返回一个包含生成的代码、源映射和 AST 的对象的承诺。
babel.transformAsync(code, options); // => Promise<{ code, map, ast }>
示例
babel.transformAsync("code();", options).then(result => {
result.code;
result.map;
result.ast;
});
transformFile
babel.transformFile(filename: string, options?: Object, callback: Function)
异步转换文件的全部内容。
babel.transformFile(filename, options, callback);
示例
babel.transformFile("filename.js", options, function(err, result) {
result; // => { code, map, ast }
});
transformFileSync
babel.transformFileSync(filename: string, options?: Object)
babel.transformFile
的同步版本。返回filename
的转换后的内容。
babel.transformFileSync(filename, options); // => { code, map, ast }
示例
babel.transformFileSync("filename.js", options).code;
transformFileAsync
babel.transformFileAsync(filename: string, options?: Object)
babel.transformFile
的 Promise 版本。返回一个包含filename
的转换后的内容的承诺。
babel.transformFileAsync(filename, options); // => Promise<{ code, map, ast }>
示例
babel.transformFileAsync("filename.js", options).then(result => {
result.code;
});
transformFromAst
babel.transformFromAst(ast: Object, code?: string, options?: Object, callback: Function): FileNode | null
给定一个AST,对其进行转换。
const sourceCode = "if (true) return;";
const parsedAst = babel.parseSync(sourceCode, {
parserOpts: { allowReturnOutsideFunction: true },
});
babel.transformFromAst(parsedAst, sourceCode, options, function(err, result) {
const { code, map, ast } = result;
});
在 Babel 6 中,此方法是同步的,并且不存在transformFromAstSync
。为了向后兼容,如果没有给出回调函数,此函数将同步运行。如果您从 Babel 7 开始并且需要同步行为,请使用transformFromAstSync
,因为此向后兼容性将在 Babel 8 中删除。
transformFromAstSync
babel.transformFromAstSync(ast: Object, code?: string, options?: Object)
给定一个AST,对其进行转换。
const sourceCode = "if (true) return;";
const parsedAst = babel.parseSync(sourceCode, {
parserOpts: { allowReturnOutsideFunction: true },
});
const { code, map, ast } = babel.transformFromAstSync(
parsedAst,
sourceCode,
options
);
transformFromAstAsync
babel.transformFromAstAsync(ast: Object, code?: string, options?: Object)
给定一个AST,对其进行转换。
const sourceCode = "if (true) return;";
babel
.parseAsync(sourceCode, { parserOpts: { allowReturnOutsideFunction: true } })
.then(parsedAst => {
return babel.transformFromAstAsync(parsedAst, sourceCode, options);
})
.then(({ code, map, ast }) => {
// ...
});
parse
babel.parse(code: string, options?: Object, callback: Function)
给定一些代码,使用 Babel 的标准行为对其进行解析。引用的预设和插件将被加载,以便自动启用可选的语法插件。
在 Babel 7 的早期测试版中,此方法是同步的,并且不存在parseSync
。为了向后兼容,如果没有给出回调函数,此函数将同步运行。如果您从 Babel 7 稳定版开始并且需要同步行为,请使用parseSync
,因为此向后兼容性将在 Babel 8 中删除。
parseSync
babel.parseSync(code: string, options?: Object)
返回一个 AST。
给定一些代码,使用 Babel 的标准行为对其进行解析。引用的预设和插件将被加载,以便自动启用可选的语法插件。
parseAsync
babel.parseAsync(code: string, options?: Object)
返回一个包含 AST 的承诺。
给定一些代码,使用 Babel 的标准行为对其进行解析。引用的预设和插件将被加载,以便自动启用可选的语法插件。
高级 API
许多包装 Babel 的系统都喜欢自动注入插件和预设,或覆盖选项。为了实现此目标,Babel 公开了一些函数,这些函数有助于在不进行转换的情况下加载部分配置。
loadOptions
babel.loadOptions(options?: Object)
完全解析 Babel 的选项,生成一个选项对象,其中
opts.plugins
是Plugin
实例的完整列表。opts.presets
为空,所有预设都被展平到opts
中。- 可以安全地将其传递回 Babel。像
"babelrc"
这样的字段已设置为false
,以便以后调用 Babel 时不会再次尝试加载配置文件。
不应直接操作Plugin
实例,但调用者通常会将此opts
序列化为 JSON,以将其用作表示 Babel 已接收到的选项的缓存键。不能 100% 保证缓存失效,但这是我们目前拥有的最佳选择。
loadPartialConfig
babel.loadPartialConfig(options?: Object): PartialConfig
为了允许系统轻松地操作和验证用户的配置,此函数解析插件和预设,并且不进行进一步的操作。期望调用者获取配置的.options
,根据需要对其进行操作,然后将其传递回 Babel。
除了标准选项之外,此函数还接受一个附加选项作为选项对象的一部分:showIgnoredFiles
。当设置为 true 时,当文件被忽略时,loadPartialConfig
始终返回一个结果,而不是null
。这很有用,因为它允许调用者访问影响此结果的文件列表,例如用于监视模式。调用者可以根据返回的fileHandling
属性确定文件是否被忽略。
babelrc: string | void
- 文件相对配置文件的路径(如果有)。babelignore: string | void
-.babelignore
文件的路径(如果有)。config: string | void
- 项目范围配置文件的路径(如果有)。options: ValidatedOptions
- 部分解析的选项,可以对其进行操作并将其传递回 Babel。plugins: Array<ConfigItem>
- 见下文。presets: Array<ConfigItem>
- 见下文。- 可以安全地将其传递回 Babel。像
"babelrc"
这样的选项已设置为 false,以便以后调用 Babel 时不会再次尝试加载配置文件。
hasFilesystemConfig(): boolean
- 检查解析后的配置是否从文件系统加载了任何设置。fileHandling
- 设置为"transpile"
、"ignored"
或"unsupported"
,以指示调用者如何处理此文件。files
- 用于构建结果配置的已读取文件路径的Set
,包括项目范围配置文件、本地配置文件、扩展配置文件、忽略文件等。对实现监视模式或缓存失效很有用。
ConfigItem
实例公开了用于自省值的属性,但每个项目都应视为不可变的。如果需要更改,则应从列表中删除该项目,并将其替换为普通的 Babel 配置值,或由babel.createConfigItem
创建的替换项目。有关ConfigItem
字段的信息,请参阅该函数。
createConfigItem
babel.createConfigItem(value: string | {} | Function | [string | {} | Function, {} | void], { dirname?: string, type?: "preset" | "plugin" }): ConfigItem
允许构建工具预先创建和缓存配置项目。如果多次调用此函数来处理给定的插件,则 Babel 将多次调用插件的函数本身。如果您有一组明确的预期插件和预设要注入,则建议预先构建配置项目。
ConfigItem
类型
每个ConfigItem
都公开了 Babel 已知的所有信息。字段为
value: {} | Function
- 插件的解析值。options: {} | void
- 传递给插件的选项对象。dirname: string
- 选项相对于的路径。name: string | void
- 用户为插件实例提供的名称,例如plugins: [ ['env', {}, 'my-env'] ]
file: Object | void
- 有关插件文件的信息(如果 Babel 知道)。request: string
- 用户请求的文件,例如"@babel/env"
resolved: string
- 解析后的文件的完整路径,例如"/tmp/node_modules/@babel/preset-env/lib/index.js"
DEFAULT_EXTENSIONS
babel.DEFAULT_EXTENSIONS: readonly string[];
babel 支持的默认扩展名列表(".js"、".jsx"、".es6"、".es"、".mjs"、"cjs")。@babel/register 和 @babel/cli 使用此列表来确定需要转译的文件。无法扩展此列表,但是 @babel/cli 确实提供了使用--extensions
支持其他扩展名的方法。
选项
请参阅此处的完整选项列表。