@babel/core
var babel = require("@babel/core");
import { transform } from "@babel/core";
import * as babel from "@babel/core";
所有轉換都會使用您本地的設定檔。
轉換
babel.transform(代碼: 字串, 選項?: 物件, 回呼函式: 函式)
轉換傳入的代碼
。呼叫回呼函式,其中包含物件,其具有產生的代碼、原始碼對應表和 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(代碼: 字串, 選項?: 物件)
轉換傳入的代碼
。傳回包含產生的代碼、原始碼對應表和 AST 的物件。
babel.transformSync(code, options); // => { code, map, ast }
範例
var result = babel.transformSync("code();", options);
result.code;
result.map;
result.ast;
transformAsync
babel.transformAsync(代碼: 字串, 選項?: 物件)
轉換傳入的代碼
。傳回包含產生的代碼、原始碼對應表和 AST 的物件承諾。
babel.transformAsync(code, options); // => Promise<{ code, map, ast }>
範例
babel.transformAsync("code();", options).then(result => {
result.code;
result.map;
result.ast;
});
transformFile
babel.transformFile(檔案名稱: 字串, 選項?: 物件, 回呼函式: 函式)
非同步轉換檔案的全部內容。
babel.transformFile(filename, options, callback);
範例
babel.transformFile("filename.js", options, function(err, result) {
result; // => { code, map, ast }
});
transformFileSync
babel.transformFileSync(檔案名稱: 字串, 選項?: 物件)
babel.transformFile
的同步版本。傳回檔案名稱
的轉換後內容。
babel.transformFileSync(filename, options); // => { code, map, ast }
範例
babel.transformFileSync("filename.js", options).code;
transformFileAsync
babel.transformFileAsync(filename: string, options?: Object)
babel.transformFile
的 Promise 版本。傳回 filename
轉換後內容的 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.parseSync(sourceCode, {
parserOpts: { allowReturnOutsideFunction: true },
});
babel.transformFromAst(parsedAst, sourceCode, options, function(err, result) {
const { code, map, ast } = result;
});
在 Babel 6 中,此方法是同步的,且 transformFromAstSync
不存在。為了向後相容,若未提供 callback,此函式將會以同步方式執行。如果您從 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
不存在。為了向後相容,若未提供 callback,此函式將會以同步方式執行。如果您從 Babel 7 穩定版開始,且需要同步行為,請使用 parseSync
,因為此向後相容性將會在 Babel 8 中移除。
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 的選項,產生選項物件,其中
opts.plugins
是Plugin
實例的完整清單。opts.presets
為空,且所有預設值都扁平化到opts
。- 可以安全地傳回 Babel。像
"babelrc"
這樣的欄位已設定為false
,因此後續呼叫 Babel 時不會再次嘗試載入組態檔。
Plugin
實例不應直接操作,但呼叫者通常會將此 opts
序列化為 JSON,以用作代表 Babel 已接收選項的快取金鑰。在此快取並非 100% 保證能適當地失效,但這是我們目前最好的方法。
loadPartialConfig
babel.loadPartialConfig(選項?: 物件): PartialConfig
為了讓系統可以輕鬆操作和驗證使用者的設定檔,此函式會解析外掛和預設值,然後不再繼續進行。預期呼叫者會採用設定檔的 .options
,並依據需要進行操作,然後再傳回 Babel。
此函式會接受一個額外的選項作為選項物件的一部分,除了標準的 選項 之外:showIgnoredFiles
。當設為 true 時,loadPartialConfig
會在檔案被忽略時傳回結果,而不是 null
。這有助於讓呼叫者可以存取影響此結果的檔案清單,例如用於監控模式。呼叫者可以根據傳回的 fileHandling
屬性來判斷檔案是否被忽略。
babelrc: 字串 | 空值
- 檔案相關設定檔 檔案的路徑(如果有的話)。babelignore: 字串 | 空值
-.babelignore
檔案的路徑(如果有的話)。config: 字串 | 空值
- 專案範圍設定檔 檔案的路徑(如果有的話)。options: ValidatedOptions
- 部分解析的選項,可以進行操作並傳回 Babel。plugins: Array<ConfigItem>
- 請參閱下方。presets: Array<ConfigItem>
- 請參閱下方。- 可以安全地傳回 Babel。
"babelrc"
等選項已設為 false,以便後續呼叫 Babel 時不會再次嘗試載入設定檔。
hasFilesystemConfig(): boolean
- 檢查已解析的設定是否從檔案系統載入任何設定。fileHandling
- 設定為"transpile"
、"ignored"
或"unsupported"
,以指示呼叫者如何處理這個檔案。files
- 一組檔案路徑,已讀取以建構結果設定,包括專案範圍設定檔、本機設定檔、延伸設定檔、忽略檔等。可用於實作監控模式或快取失效。
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
- 外掛的已解析值。選項: {} | 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
支援其他副檔名的方法。
選項
請參閱 此處的完整選項清單。