# @babel/核心

var babel = require("@babel/core");
import { transform } from "@babel/core";
import * as babel from "@babel/core";

所有转换都将使用您的本地配置文件 (opens new window)

# 变换

babel.transform(代码:字符串,选项? (opens new window) :对象,回调:函数)

转换传入的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 中被删除。

# 转换同步

babel.transformSync(代码:字符串,选项? (opens new window) :对象)

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

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

例子

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

# 转换异步

babel.transformAsync(代码:字符串,选项? (opens new window) :对象)

转换传入的code. 使用生成的代码、源映射和 AST 返回对对象的承诺。

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

例子

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

# 转换文件

babel.transformFile(文件名:字符串,选项? (opens new window) :对象,回调:函数)

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

babel.transformFile(filename, options, callback);

例子

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

# transformFileSync

babel.transformFileSync(文件名:字符串,选项? (opens new window) :对象)

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

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

例子

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

# transformFileAsync

babel.transformFileAsync(文件名:字符串,选项? (opens new window) :对象)

的承诺版本babel.transformFile。返回对 的转换内容的承诺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 | 无效的

给定一个AST (opens new window) ,转换它。

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:对象,代码?:字符串,选项? (opens new window) :对象)

给定一个AST (opens new window) ,转换它。

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:对象,代码?:字符串,选项? (opens new window) :对象)

给定一个AST (opens new window) ,转换它。

const sourceCode = "if (true) return;";
babel
  .parseAsync(sourceCode, { parserOpts: { allowReturnOutsideFunction: true } })
  .then(parsedAst => {
    return babel.transformFromAstAsync(parsedAst, sourceCode, options);
  })
  .then(({ code, map, ast }) => {
    // ...
  });

# 解析

babel.parse(代码:字符串,选项? (opens new window) :对象,回调:函数)

给定一些代码,使用 Babel 的标准行为解析它。将加载引用的预设和插件,以便自动启用可选语法插件。

兼容注意事项:

在 Babel 7 的早期测试版中,这个方法是同步的,parseSync并不存在。为了向后兼容,如果没有给出回调,此函数将同步运行。如果您从 Babel 7 开始并需要同步行为,请使用,parseSync因为这种向后兼容性将在 Babel 8 中被删除。

# 解析同步

babel.parseSync(代码:字符串,选项? (opens new window) :对象)

返回一个 AST。

给定一些代码,使用 Babel 的标准行为解析它。将加载引用的预设和插件,以便自动启用可选语法插件。

# 解析异步

babel.parseAsync(代码:字符串,选项? (opens new window) :对象)

返回对 AST 的承诺。

给定一些代码,使用 Babel 的标准行为解析它。将加载引用的预设和插件,以便自动启用可选语法插件。

# 高级API (opens new window)

许多包装 Babel 的系统喜欢自动注入插件和预设,或覆盖选项。为了实现这个目标,Babel 公开了几个函数来帮助在不转换的情况下中途加载配置。

# 加载选项

babel.loadOptions(选项? (opens new window) :对象)

完全解析 Babel 的选项,生成一个选项对象,其中:

  • opts.plugins是实例的完整列表Plugin
  • opts.presets为空,所有预设都被展平为opts.
  • 它可以安全地传递回 Babel。* 像这样的字段* "babelrc" 已被设置为 false,以便以后调用 Babel 不会再次尝试加载配置文件。

Plugin实例并不意味着可以直接操作,但调用者通常会将其序列化为optsJSON,以将其用作表示 Babel 已接收到的选项的缓存键。对此进行缓存并不能 100% 保证正确失效,但这是我们目前拥有的最好的方法。

# loadPartialConfig

babel.loadPartialConfig( options? : Object): PartialConfig

为了让系统能够轻松地操作和验证用户的配置,此函数解析插件和预设,不再继续。期望调用者将获取配置的.options,按照他们认为合适的方式对其进行操作,然后再次将其传递回 Babel。

除了标准选项 之外,此函数还接受一个附加选项作为选项对象的一部分:showIgnoredFiles。设置为 true 时,loadPartialConfig忽略文件时始终返回结果,而不是js. 这对于允许调用者访问影响此结果的文件列表很有用,例如对于监视模式。调用者可以根据返回的属性判断文件是否被忽略fileHandling

  • babelrc: string | void-文件相关配置 (opens new window) 文件的路径,如果有的话。

  • babelignore: string | void- 文件的路径.babelignore,如果有的话。

  • config: string | void-项目范围配置 (opens new window) 文件的路径,如果有的话。

  • 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字段的信息,请参阅该函数。

# 创建配置项

babel.createConfigItem(value: string | {} | Function | [string | {} | Function, {} | void] , { dirname?: string, type?: "preset" | "plugin" }): ConfigItem

允许构建工具预先创建和缓存配置项。如果为给定的插件多次调用此函数,Babel 将多次调用插件的函数本身。如果您有一组明确的预期插件和预设要注入,建议预先构建配置项。

# ConfigItem类型 (opens new window)

每个都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:只读字符串[];

babel (.js", ".jsx", ".es6", ".es", ".mjs", "cjs") 支持的默认扩展列表。@babel/register 和@babel/cli 使用这个列表来确定哪些文件需要转译。扩展这个列表是不可能的,但是 @babel/cli 确实提供了支持其他扩展的方法--extensions

# 选项

请在此处查看完整的选项列表 (opens new window)

Last Updated: 6/7/2023, 9:06:23 AM