babel工具之@babel/core(翻译)

5,523 阅读5分钟

原文:www.babeljs.cn/docs/babel-…

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)

转换传入的代码。使用生成的代码、源映射和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;
});

兼容注释: 在babel6中,这种方法是同步的,transformSync不存在。为了向后兼容,如果没有回调函数,这个函数将同步运行。如果您从babel7开始,需要同步行为,请使用transformSync,因为这个向后兼容可能会在Babel的未来主要版本中被删除。

transformSync

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

转换传入的代码。返回包含生成的代码、源映射和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)

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

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的同步版本. 返回文件名的已转换内容

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

示例

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

transformFileAsync

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

Promise 版本babel.transformFile. 返回文件名转换后内容的Promise。

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.parse(sourceCode, { parserOpts: { allowReturnOutsideFunction: true } });
babel.transformFromAst(parsedAst, sourceCode, options, function(err, result) {
  const { code, map, ast } = result;
});

兼容注释: 在babel6中,这个方法是同步的,transformFromAstSync不存在。为了向后兼容,如果没有回调函数,这个函数将同步运行。如果您从babel7开始,需要同步行为,请使用transformFromAstSync,因为这个向后兼容可能会在Babel的未来主要版本中被删除。

transformFromAstSync

babel.transformFromAstSync(ast: Object, code?: string, options?: Object)

给定一个AST,转换它。

const sourceCode = "if (true) return;";
const parsedAst = babel.parse(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的标准行为解析它。引用的预置和插件将被加载,以便自动启用可选语法插件。

兼容注释: 在babel7的早期betas中,这个方法是同步的,parseSync不存在。为了向后兼容,如果没有回调函数,这个函数将同步运行。如果您开始使用babel7稳定版并且需要同步行为,请使用parseSync,因为这个向后兼容可能会在Babel的未来主要版本中被删除。

parseSync

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

返回AST。

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

parseAsync

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

返回AST的promise 。

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

高级API

许多包装Babel的系统喜欢自动注入插件和预置,或者覆盖选项。为了实现这个目标,Babel公开了几个函数,这些函数有助于在不进行转换的情况下部分加载配置。

loadOptions

babel.loadOptions(options?: Object)

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

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

插件实例并不是要直接操作的,但调用方通常会将此opts序列化为JSON,以将其用作表示Babel接收到的选项的缓存键。缓存不能100%保证正确失效,但这是目前最好的。

loadPartialConfig

babel.loadPartialConfig(options?: Object): PartialConfig

为了使系统能够轻松地操作和验证用户的配置,此函数解析插件和预置,不再继续。我们的期望是,调用者将使用config.options,在他们认为合适的时候操作它,并再次将其传递回Babel。

  • babelrc: string | void - 文件相对配置文件的路径(如果有)。
  • babelignore: string | void - .babelignore文件的路径,如果有的话。
  • config: string | void - 项目范围配置文件的路径(如果有)。
  • options: ValidatedOptions -部分解决的选项,可以操纵和传递回Babel 。
    • plugins: Array - 见下文
    • presets: Array -见下文
    • 它可以安全地传递回Babel。像“babelrc”这样的选项已经被设置为false,这样以后对Babel的调用将不会再次尝试加载配置文件。
  • hasFilesystemConfig(): boolean -检查已解析的配置是否从文件系统加载了任何设置。

ConfigItem实例公开属性以内省值,但每个项都应视为不可变的。如果需要更改,则应该从列表中删除该项,并将其替换为正常的Babel config值,或者使用由创建的替换项babel.createConfigItem. 有关ConfigItem字段的信息,请参见该函数。

createConfigItem

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

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

ConfigItem type

每个ConfigItem公开Babel知道的所有信息。字段包括:

  • value: {} | Function - 插件的解析值。
  • options: {} | void -传递给插件的options对象。
  • 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"

默认扩展名

babel.DEFAULT_EXTENSIONS: ReadonlyArray

babel支持的默认扩展列表(“.js”、“.jsx”、“.es6”、“.es”、“.mjs”)。此列表由@babel/register和@babel/cli用于确定哪些文件需要传输。扩展这个列表是不可能的,但是@babel/cli提供了一些方法来支持带有--extensions的其他扩展。

选项

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