# @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
实例并不意味着可以直接操作,但调用者通常会将其序列化为opts
JSON,以将其用作表示 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) 。