跳转到主要内容

@babel/core

JavaScript
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 的对象调用回调函数。

JavaScript
babel.transform(code, options, function(err, result) {
result; // => { code, map, ast }
});

示例

JavaScript
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 的对象。

JavaScript
babel.transformSync(code, options); // => { code, map, ast }

示例

JavaScript
var result = babel.transformSync("code();", options);
result.code;
result.map;
result.ast;

transformAsync

babel.transformAsync(code: string, options?: Object)

转换传入的code。返回一个包含生成的代码、源映射和 AST 的对象的承诺。

JavaScript
babel.transformAsync(code, options); // => Promise<{ code, map, ast }>

示例

JavaScript
babel.transformAsync("code();", options).then(result => {
result.code;
result.map;
result.ast;
});

transformFile

babel.transformFile(filename: string, options?: Object, callback: Function)

异步转换文件的全部内容。

JavaScript
babel.transformFile(filename, options, callback);

示例

JavaScript
babel.transformFile("filename.js", options, function(err, result) {
result; // => { code, map, ast }
});

transformFileSync

babel.transformFileSync(filename: string, options?: Object)

babel.transformFile 的同步版本。返回filename 的转换后的内容。

JavaScript
babel.transformFileSync(filename, options); // => { code, map, ast }

示例

JavaScript
babel.transformFileSync("filename.js", options).code;

transformFileAsync

babel.transformFileAsync(filename: string, options?: Object)

babel.transformFile 的 Promise 版本。返回一个包含filename 的转换后的内容的承诺。

JavaScript
babel.transformFileAsync(filename, options); // => Promise<{ code, map, ast }>

示例

JavaScript
babel.transformFileAsync("filename.js", options).then(result => {
result.code;
});

transformFromAst

babel.transformFromAst(ast: Object, code?: string, options?: Object, callback: Function): FileNode | null

给定一个AST,对其进行转换。

JavaScript
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,对其进行转换。

JavaScript
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,对其进行转换。

JavaScript
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.pluginsPlugin 实例的完整列表。
  • 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 支持其他扩展名的方法。

选项

请参阅此处的完整选项列表