Vai al contenuto principale

Opzioni

Traduzione Beta Non Ufficiale

Questa pagina è stata tradotta da PageTurner AI (beta). Non ufficialmente approvata dal progetto. Hai trovato un errore? Segnala problema →

Le opzioni possono essere passate a Babel in diversi modi. Quando passate direttamente a Babel, è sufficiente fornire l'oggetto delle opzioni. Quando Babel viene utilizzato tramite un wrapper, potrebbe essere necessario, o quantomeno più utile, passare le opzioni tramite file di configurazione.

Se si passano opzioni tramite @babel/cli, è necessario utilizzare la notazione kebab-case per i nomi. Ad esempio:

npx babel --root-mode upward file.js # equivalent of passing the rootMode config option

Opzioni principali

Queste opzioni sono consentite solo come parte delle opzioni programmatiche di Babel, quindi sono principalmente destinate a strumenti che racchiudono Babel o a chi chiama direttamente babel.transform. Gli utenti delle integrazioni di Babel, come babel-loader o @babel/register, difficilmente le utilizzeranno.

cwd

Tipo: string
Predefinito: process.cwd()

La directory di lavoro rispetto alla quale verranno risolti tutti i percorsi nelle opzioni programmatiche.

caller

Tipo: Un oggetto con la forma di

interface CallerData {
name: string;
supportsStaticESM?: boolean;
supportsDynamicImport?: boolean;
supportsTopLevelAwait?: boolean;
supportsExportNamespaceFrom?: boolean;
}
History
VersionChanges
v7.11.0Add supportsExportNamespaceFrom
v7.7.0Add supportsTopLevelAwait
v7.5.0Add supportsDynamicImport

Le utility possono passare un oggetto caller per identificarsi presso Babel e trasmettere flag relativi alle capacità da utilizzare in configurazioni, preset e plugin. Ad esempio

JavaScript
babel.transformFileSync("example.js", {
caller: {
name: "my-custom-tool",
supportsStaticESM: true,
},
});

permetterebbe a plugin e preset di decidere che, poiché i moduli ES sono supportati, salteranno la compilazione dei moduli ES in moduli CommonJS.

filename

Tipo: string

Il nome del file associato al codice attualmente in compilazione, se presente. Il filename è opzionale, ma non tutte le funzionalità di Babel sono disponibili quando il filename è sconosciuto, poiché un sottoinsieme di opzioni dipende dal filename per il loro funzionamento.

I tre casi principali che gli utenti potrebbero incontrare sono:

  • Il filename è esposto ai plugin. Alcuni plugin potrebbero richiederne la presenza.

  • Opzioni come "test", "exclude" e "ignore" richiedono il filename per il matching con stringhe/espressioni regolari.

  • I file .babelrc.json o .babelrc vengono caricati relativamente al file in compilazione. Se questa opzione viene omessa, Babel si comporterà come se fosse impostato babelrc: false.

filenameRelative

Tipo: string
Predefinito: path.relative(opts.cwd, opts.filename) (se è stato passato "filename")

Utilizzato come valore predefinito per l'opzione sourceFileName di Babel e come parte della generazione dei nomi file per le trasformazioni dei moduli AMD / UMD / SystemJS.

code

Tipo: boolean
Predefinito: true

Il valore restituito predefinito di Babel include proprietà code e map con il codice generato risultante. In alcuni contesti dove vengono effettuate chiamate multiple a Babel, può essere utile disabilitare la generazione del codice e utilizzare invece ast: true per ottenere direttamente l'AST ed evitare lavoro non necessario.

ast

Tipo: boolean
Predefinito: false

Babel genera predefinitamente una stringa e una sourcemap, ma in alcuni contesti può essere utile ottenere direttamente l'AST. Il caso d'uso principale riguarda catene di trasformazioni multiple, come:

JavaScript
const filename = "example.js";
const source = fs.readFileSync(filename, "utf8");

// Load and compile file normally, but skip code generation.
const { ast } = babel.transformSync(source, {
filename,
ast: true,
code: false,
});

// Minify the file in a second pass and generate the output code here.
const { code, map } = babel.transformFromAstSync(ast, source, {
filename,
presets: ["minify"],
babelrc: false,
configFile: false,
});

Nota: Questa opzione non è attiva di default perché la maggior parte degli utenti non ne ha bisogno e perché intendiamo aggiungere un layer di caching a Babel. La memorizzazione nella cache della struttura AST richiederebbe spazio significativamente maggiore.

cloneInputAst

Tipo: boolean
Default: true
Aggiunto in v7.11.0

Per impostazione predefinita babel.transformFromAst clona l'AST di input per evitare mutazioni. Specificare cloneInputAst: false può migliorare le prestazioni del parsing se l'AST di input non viene utilizzato altrove.

Opzioni di caricamento configurazione

Il caricamento della configurazione può risultare complesso poiché gli ambienti possono avere diversi tipi di file di configurazione, e tali file possono contenere vari oggetti di configurazione annidati che si applicano in base al contesto.

root

Tipo: string
Default: opts.cwd
Posizionamento: Consentito solo nelle opzioni programmatiche di Babel

Il percorso iniziale che verrà elaborato in base alla "rootMode" per determinare la cartella root concettuale per il progetto Babel corrente. Utilizzato principalmente in due casi:

rootMode

Tipo: "root" | "upward" | "upward-optional"
Default: "root"
Posizionamento: Consentito solo nelle opzioni programmatiche di Babel
Aggiunto in: v7.1.0

Questa opzione, combinata con il valore "root", definisce come Babel seleziona la propria root di progetto. Le diverse modalità definiscono modi alternativi in cui Babel può elaborare il valore "root" per ottenere la root finale del progetto.

Nota: babel.config.json è supportato a partire da Babel 7.8.0. Nelle versioni precedenti di Babel 7 è supportato solo babel.config.js.

"root" è la modalità predefinita perché evita il rischio che Babel carichi accidentalmente un babel.config.json completamente esterno alla cartella del progetto corrente. Se usi "upward-optional", tieni presente che risalirà la struttura delle directory fino alla radice del filesystem, ed è sempre possibile che qualcuno abbia un babel.config.json dimenticato nella propria home directory, che potrebbe causare errori imprevisti nelle tue build.

Gli utenti con strutture di progetto monorepo che eseguono build/test per singolo pacchetto potrebbero voler usare "upward" poiché i monorepo spesso includono un babel.config.json nella root del progetto. Eseguire Babel in una sottodirectory di un monorepo senza "upward" causerà il mancato caricamento dei file babel.config.json nella root del progetto, portando potenzialmente a errori imprevisti e fallimenti nella compilazione.

envName

Tipo: string
Default: process.env.BABEL_ENV || process.env.NODE_ENV || "development"
Posizionamento: Consentito solo nelle opzioni programmatiche di Babel

L'ambiente attivo corrente utilizzato durante il caricamento della configurazione. Questo valore funge da chiave per risolvere le configurazioni "env" ed è disponibile all'interno di funzioni di configurazione, plugin e preset tramite la funzione api.env().

configFile

Tipo: string | boolean
Default: path.resolve(opts.root, "babel.config.json"), se esiste, altrimenti false
Posizionamento: Consentito solo nelle opzioni programmatiche di Babel

Cerca per impostazione predefinita un file babel.config.json, ma può ricevere il percorso di qualsiasi file di configurazione JS o JSON5.

NOTA: Questa opzione non influisce sul caricamento dei file .babelrc.json. Sebbene possa essere allettante impostare configFile: "./foo/.babelrc.json", non è raccomandato. Se il dato .babelrc.json viene caricato tramite la logica standard relativa al file, finiresti per caricare lo stesso file di configurazione due volte, fondendolo con se stesso. Se devi collegare un file di configurazione specifico, è preferibile adottare una convenzione di naming indipendente dal nome "babelrc".

babelrc

Tipo: boolean
Default: true se è stata specificata l'opzione filename
Posizionamento: Consentito nelle opzioni programmatiche di Babel o all'interno del "configFile" caricato. Un'opzione programmatica sovrascriverà quella del file di configurazione.

true abiliterà la ricerca di file di configurazione e del file legacy .babelignore relativi al "filename" fornito a Babel.

Un valore babelrc passato nelle opzioni programmatiche sovrascriverà quello impostato all'interno di un file di configurazione.

Nota: i file .babelrc.json vengono caricati solo se l'attuale "filename" si trova all'interno di un pacchetto corrispondente a uno dei pacchetti "babelrcRoots".

babelrcRoots

Tipo: boolean | MatchPattern | Array<MatchPattern>
Default: opts.root
Posizionamento: Consentito nelle opzioni programmatiche di Babel o all'interno del configFile caricato. Un'opzione programmatica sovrascriverà quella del file di configurazione.

Per impostazione predefinita, Babel cerca file .babelrc.json solo all'interno del package "root" perché altrimenti non può determinare se un determinato .babelrc.json debba essere caricato, o se i suoi "plugins" e "presets" siano installati, dato che il file compilato potrebbe trovarsi in node_modules o essere stato collegato simbolico al progetto.

Questa opzione consente di specificare altri package da considerare come "root" durante la ricerca di file .babelrc.json.

Ad esempio, in una configurazione monorepo che permette ai singoli package di avere configurazioni proprie:

JavaScript
babelrcRoots: [
// Keep the root as a root
".",

// Also consider monorepo packages "root" and load their .babelrc.json files.
"./packages/*",
];

Opzioni per plugin e preset

plugins

Tipo: Array<PluginEntry | Plugin> (PluginEntry)
Default: []

Array di plugin da attivare durante l'elaborazione del file. Per informazioni sulle interazioni tra le singole voci, specialmente quando utilizzate in più configurazioni nidificate "env" e "overrides", consultare unione.

Nota: L'opzione accetta anche istanze Plugin di Babel, ma il loro utilizzo diretto non è consigliato. Per creare una rappresentazione persistente di plugin o preset, utilizzare babel.createConfigItem().

presets

Tipo: Array<PresetEntry> (PresetEntry)
Default: []

Array di preset da attivare durante l'elaborazione del file. Per informazioni sulle interazioni tra le singole voci, specialmente quando utilizzate in più configurazioni nidificate "env" e "overrides", consultare unione.

Nota: Il formato dei preset è identico ai plugin, eccetto che per la normalizzazione dei nomi che prevede "preset-" invece di "plugin-", e che i preset non possono essere istanze di Plugin.

passPerPreset

Tipo: boolean
Default: false
Stato: Deprecato

Indica a Babel di eseguire ogni preset nell'array presets come passaggio indipendente. Questa opzione può creare confusione sull'ordine esatto dei plugin, ma è utile quando è necessario eseguire operazioni come passaggi di compilazione separati.

Nota: Questa opzione potrebbe essere rimossa nelle versioni future di Babel con il miglioramento del supporto per la definizione dell'ordine tra i plugin.

Target di output

targets

Tipo: string | Array<string> | { [string]: string }
Default: {}
Posizionamento: Consentito nelle opzioni programmatiche o file di configurazione
Aggiunto in: v7.13.0

History
VersionChanges
v7.20.0Support deno target
v7.15.0Support rhino target

Descrive gli ambienti supportati/destinati per il tuo progetto.

Può essere una query compatibile con browserslist (con limitazioni):

babel.config.json
{
"targets": "> 0.25%, not dead"
}

Oppure un oggetto con le versioni minime degli ambienti da supportare:

babel.config.json
{
"targets": {
"chrome": "58",
"ie": "11"
}
}

Ambienti supportati: android, chrome, deno, edge, electron, firefox, ie, ios, node, opera, rhino, safari, samsung.

Se non viene specificata una versione minore, Babel la interpreterà come MAJOR.0. Ad esempio, "node": 12 corrisponde a Node.js 12.0.

Nessun target specificato

Quando non vengono specificati target: Babel presuppone che tu stia puntando ai browser più vecchi possibili. Ad esempio, @babel/preset-env trasformerà tutto il codice ES2015-ES2020 per essere compatibile con ES5.

consiglio

Raccomandiamo di impostare targets per ridurre le dimensioni del codice generato.

babel.config.json
{
"presets": ["@babel/preset-env"]
}

Per questo motivo, il comportamento di Babel è diverso da browserslist: non utilizza la query defaults quando non vengono trovati target nella tua configurazione Babel o browserslist. Se vuoi usare la query defaults, devi specificarla esplicitamente come target:

babel.config.json
{
"targets": "defaults"
}

Riconosciamo che questa situazione non è ideale e la affronteremo nuovamente in Babel v8.

targets.esmodules

Tipo: boolean | "intersect"

History
VersionChanges
v7.13.0Support "intersect"

Puoi anche puntare a browser che supportano ES Modules. Quando l'opzione esmodules è "intersect", intersecherà il target browsers con i target di browserslist. Puoi usare questo approccio in combinazione con <script type="module"></script> per servire script più piccoli condizionatamente agli utenti (https://jakearchibald.com/2017/es-modules-in-browsers/#nomodule-for-backwards-compatibility).

babel.config.json
{
// Resolve to "Chrome 61+, FF60+, Safari 11+"
"targets": {
"esmodules": "intersect", // Chrome 61+, FF 60+, Safari 10.1+
"browsers": "chrome 58, firefox 60, safari 11"
}
}

Quando l'opzione esmodules è true, sovrascriverà il target browsers o i target di browserslist.

consiglio

Se usi defaults di browserslist come target, o intendi supportare browser mainstream rilasciati dal 2019 in poi, puoi rimuovere esmodules in sicurezza poiché questi browser supportano già ES Modules.

targets.node

Tipo: string | "current" | true.

Per compilare contro la versione corrente di Node.js, puoi specificare "node": true o "node": "current", equivalente a "node": process.versions.node.

In alternativa, puoi specificare la versione Node.js tramite una query browserslist:

babel.config.json
{
"targets": "node 12" // not recommended
}

In questo caso, browserslist la risolverà nell'ultima versione disponibile nella libreria node-releases. Poiché Node.js può introdurre nuove funzionalità linguistiche nelle release minori, un programma generato per Node.js 12.22 potrebbe generare errori di sintassi su Node.js 12.0. Raccomandiamo di specificare sempre una versione minore quando si usano query node con browserslist:

babel.config.json
{
"targets": "node 12.0"
}

targets.safari

Tipo: string | "tp".

Per compilare contro la versione technology preview di Safari, specifica "safari": "tp".

targets.browsers

Tipo: string | Array<string>.

Query per selezionare browser (es: last 2 versions, > 5%, safari tp) usando browserslist.

Nota: i risultati dei browser vengono sovrascritti da elementi espliciti in targets.

targets.deno

Tipo: string.

La versione minima supportata è 1.0.

babel.config.json
{
"targets": {
"deno": "1.9"
}
}

browserslistConfigFile

Tipo: boolean
Predefinito: true
Posizione: Consentito nelle opzioni programmatiche di Babel o nei file di configurazione
Aggiunto in: v7.13.0

Attiva/disattiva l'utilizzo delle fonti di configurazione browserslist, che include la ricerca di file browserslist o il riferimento alla chiave browserslist in package.json. Utile per progetti che utilizzano una configurazione browserslist per file non compilati con Babel.

Se viene specificata una stringa, deve rappresentare il percorso di un file di configurazione browserslist. I percorsi relativi vengono risolti rispetto al file di configurazione che specifica questa opzione, o rispetto a cwd quando passata come parte delle opzioni programmatiche.

browserslistEnv

Tipo: string
Predefinito: undefined
Posizione: Consentito nelle opzioni programmatiche di Babel o nei file di configurazione
Aggiunto in: v7.13.0

L'ambiente Browserslist da utilizzare.

Opzioni di unione della configurazione

extends

Tipo: string
Posizione: Non consentito all'interno dei preset

Le configurazioni possono "estendere" altri file di configurazione. I campi nella configurazione corrente verranno uniti sopra la configurazione del file esteso.

env

Tipo: { [envKey: string]: Options }
Posizione: Non può essere annidato all'interno di un altro blocco env.

Consente opzioni di configurazione annidate complete che verranno abilitate solo se envKey corrisponde all'opzione envName.

Nota: le opzioni env[envKey] verranno unite sopra le opzioni specificate nell'oggetto principale.

overrides

Tipo: Array<Options>
Posizione: Non può essere annidato all'interno di un altro oggetto overrides o in un blocco env.

Consente di fornire un array di opzioni che verranno unite alla configurazione corrente una alla volta. Questa funzionalità è utilizzata al meglio insieme alle opzioni "test"/"include"/"exclude" per definire le condizioni di applicazione di un override. Ad esempio:

JavaScript
overrides: [{
test: "./vendor/large.min.js",
compact: true,
}],

potrebbe essere utilizzato per abilitare l'opzione compact per un file specifico noto per essere grande e minificato, indicando a Babel di non preoccuparsi della formattazione.

test

Tipo: MatchPattern | Array<MatchPattern> (MatchPattern)

Se tutti i pattern non corrispondono, la configurazione corrente viene considerata inattiva e ignorata durante l'elaborazione. Questa opzione è più utile all'interno di un oggetto overrides, ma è consentita ovunque.

Nota: questi interruttori non influenzano le opzioni programmatiche e di caricamento della configurazione nelle sezioni precedenti, poiché vengono prese in considerazione molto prima della configurazione preparata per il merging.

include

Tipo: MatchPattern | Array<MatchPattern> (MatchPattern)

Questa opzione è un sinonimo di "test".

exclude

Tipo: MatchPattern | Array<MatchPattern> (MatchPattern)

Se uno qualsiasi dei pattern corrisponde, l'oggetto di configurazione corrente viene considerato inattivo e ignorato durante l'elaborazione della configurazione. Questa opzione è particolarmente utile quando utilizzata all'interno di un oggetto overrides, ma è consentita ovunque.

Nota: questi interruttori non influenzano le opzioni programmatiche e di caricamento della configurazione nelle sezioni precedenti, poiché vengono prese in considerazione molto prima della configurazione preparata per il merging.

ignore

Tipo: Array<MatchPattern> (MatchPattern)
Posizionamento: Non consentito all'interno dei preset

Se uno qualsiasi dei pattern corrisponde, Babel interromperà immediatamente tutte le elaborazioni della build corrente. Ad esempio, un utente potrebbe voler fare qualcosa come

JavaScript
ignore: ["./lib"];

per disabilitare esplicitamente la compilazione Babel dei file all'interno della directory lib.

Nota: questa opzione disabilita tutte le elaborazioni Babel di un file. Pur avendo i suoi utilizzi, vale anche la pena considerare l'opzione "exclude" come alternativa meno aggressiva.

only

Tipo: Array<MatchPattern> (MatchPattern)
Posizionamento: Non consentito all'interno dei preset

Se tutti i pattern non corrispondono, Babel interromperà immediatamente tutte le elaborazioni della build corrente. Ad esempio, un utente potrebbe voler fare qualcosa come

JavaScript
only: ["./src"];

per abilitare esplicitamente la compilazione Babel dei file nella directory src disabilitando tutto il resto.

Nota: questa opzione disabilita tutte le elaborazioni Babel di un file. Pur avendo i suoi utilizzi, vale anche la pena considerare le opzioni "test"/"include" come alternative meno aggressive.

Opzioni Source Map

inputSourceMap

Tipo: boolean | SourceMap
Default: true

true tenterà di caricare una sourcemap di input dal file stesso, se contiene un commento //# sourceMappingURL=.... Se non viene trovata alcuna mappa, o se il caricamento/parsing fallisce, verrà scartata silenziosamente.

Se viene fornito un oggetto, verrà trattato come l'oggetto source map stesso.

sourceMaps

Tipo: boolean | "inline" | "both"
Default: false

  • true per generare una sourcemap per il codice e includerla nell'oggetto risultato.

  • "inline" per generare una sourcemap e aggiungerla come data URL alla fine del codice, senza includerla nell'oggetto risultante.

  • "both" è uguale a inline, ma includerà la mappa nell'oggetto risultante.

Le opzioni nei file di configurazione non influenzano la scrittura di file .map separati su disco da @babel/cli. Quando l'opzione CLI --source-maps viene passata a @babel/cli, controllerà anche la scrittura dei file .map:

  • true scriverà la mappa su un file .map su disco

  • "inline" scriverà il file direttamente, quindi conterrà un data: con la mappa

  • "both" scriverà il file con un URL data: e anche un file .map.

Nota: queste opzioni sono un po' particolari, quindi potrebbe avere più senso usare true e gestire il resto nel proprio codice, a seconda del caso d'uso.

sourceMap

Sinonimo di sourceMaps. Si raccomanda di usare sourceMaps.

sourceFileName

Tipo: string
Default: path.basename(opts.filenameRelative) se disponibile, altrimenti "unknown"

Il nome da utilizzare per il file all'interno dell'oggetto source map.

sourceRoot

Tipo: string

Il campo sourceRoot da impostare nella source map generata, se desiderata.

Opzioni varie

sourceType

Tipo: "script" | "module" | "commonjs" | "unambiguous"
Predefinito: "module"

  • "script" - Analizza il file utilizzando la grammatica ECMAScript Script. Non sono consentite istruzioni import/export e i file non sono in strict mode.

  • "module" - Analizza il file utilizzando la grammatica ECMAScript Module. I file sono automaticamente in strict mode e sono consentite istruzioni import/export.

  • "commonjs" - Analizza il file come se fosse eseguito in un ambiente CommonJS. Questa opzione è consigliata quando si trasformano sorgenti .cjs. Consulta la documentazione del parser per le differenze sintattiche tra "script" e "commonjs".

  • "unambiguous" - Considera il file un "modulo" se sono presenti istruzioni import/export, altrimenti consideralo uno "script".

unambiguous può essere utile in contesti dove il tipo è sconosciuto, ma può portare a falsi positivi poiché è perfettamente valido avere un file modulo che non utilizza istruzioni import/export.

Questa opzione è importante perché il tipo del file corrente influenza sia l'analisi dei file di input, sia alcune trasformazioni che potrebbero voler aggiungere utilizzi di import/require al file corrente.

Ad esempio, @babel/plugin-transform-runtime si basa sul tipo del documento corrente per decidere se inserire una dichiarazione import o una chiamata require(). Anche @babel/preset-env fa lo stesso per la sua opzione "useBuiltIns". Poiché Babel tratta predefinitamente i file come moduli ES, generalmente questi plugin/preset inseriranno istruzioni import. Impostare il corretto sourceType può essere cruciale perché un tipo errato può portare a casi in cui Babel inserirebbe istruzioni import in file destinati a essere CommonJS. Ciò è particolarmente importante in progetti dove viene eseguita la compilazione di dipendenze node_modules, poiché l'inserimento di istruzioni import può far sì che Webpack e altri strumenti interpretino un file come modulo ES, compromettendo ciò che altrimenti sarebbe un file CommonJS funzionante.

Nota: Questa opzione non influenzerà l'analisi dei file .mjs, poiché attualmente sono impostati per essere sempre analizzati come file "module".

assumptions

Tipo: { [assumption: string]: boolean }
Predefinito: {}
Aggiunto in: v7.13.0
Posizionamento: Consentito nelle opzioni programmatiche, file di configurazione e preset.

Imposta assunzioni che Babel può fare per produrre output più compatto:

babel.config.json
{
"assumptions": {
"iterableIsArray": true
},
"presets": ["@babel/preset-env"]
}

Per maggiori informazioni, consulta la pagina di documentazione sulle assunzioni.

highlightCode

Tipo: boolean
Predefinito: true

Evidenzia i token negli snippet di codice nei messaggi di errore di Babel per renderli più leggibili.

wrapPluginVisitorMethod

Tipo: (key: string, nodeType: string, fn: Function) => Function

Consente agli utenti di aggiungere un wrapper su ogni visitor per ispezionare il processo di visita mentre Babel esegue i plugin.

  • key è una stringa opaca semplice che rappresenta il plugin in esecuzione.

  • nodeType è il tipo di nodo AST attualmente visitato.

  • fn è la funzione visitor stessa.

Gli utenti possono restituire una funzione sostitutiva che dovrebbe richiamare la funzione originale dopo aver eseguito le operazioni di logging e analisi desiderate.

parserOpts

Tipo: {}

Un oggetto opaco contenente le opzioni da passare al parser utilizzato.

Per le opzioni disponibili del parser, consultare Opzioni del parser.

generatorOpts

Tipo: {}

Un oggetto opaco contenente le opzioni da passare al generatore di codice utilizzato. Vedere Opzioni del generatore di codice per le opzioni più comuni.

Opzioni del generatore di codice

retainLines

Tipo: boolean
Predefinito: false

Babel si sforzerà di generare codice mantenendo gli elementi sulle stesse righe del file originale. Questa opzione esiste per utenti che non possono usare le source map, ma è solo un tentativo e non garantita in tutti i casi con tutti i plugin.

compact

Tipo: boolean | "auto"
Predefinito: "auto"

"auto" imposta il valore valutando code.length > 500_000

In modalità compatta, tutti gli a capo e spazi opzionali verranno omessi nella generazione del codice.

minified

Tipo: boolean
Predefinito: false

Include compact: true, omette i punti e virgola finali, omette () da new Foo() quando possibile e può produrre versioni più brevi dei letterali.

auxiliaryCommentBefore

Tipo: string

Consente di specificare un commento prefisso da inserire prima di parti di codice non presenti nel file originale.

Nota: La definizione di cosa sia presente o meno nel file originale può essere complessa, quindi l'uso di questa opzione è sconsigliato. Per annotare il codice è preferibile utilizzare un plugin Babel.

auxiliaryCommentAfter

Tipo: string

Consente di specificare un commento prefisso da inserire dopo parti di codice non presenti nel file originale.

Nota: La definizione di cosa sia presente o meno nel file originale può essere complessa, quindi l'uso di questa opzione è sconsigliato. Per annotare il codice è preferibile utilizzare un plugin Babel.

comments

Tipo: boolean
Predefinito: true

Fornisce uno stato predefinito per shouldPrintComment se non viene fornita alcuna funzione. Vedere il valore predefinito di quell'opzione per maggiori informazioni.

shouldPrintComment

Tipo: (value: string) => boolean
Predefinito senza minified: (val) => opts.comments || /@license|@preserve/.test(val)
Predefinito con minified: () => opts.comments

Funzione che decide se un dato commento debba essere incluso nel codice generato da Babel.

Utilizzo avanzato

Per altre opzioni del generatore, vedere Opzioni del generatore.

Opzioni per moduli AMD / UMD / SystemJS

moduleIds

Tipo: boolean
Predefinito: !!opts.moduleId

Abilita la generazione degli ID modulo.

moduleId

Tipo: string

Un ID predefinito da utilizzare per il modulo. Non può essere usato insieme a getModuleId.

getModuleId

Tipo: (name: string) => string

Dato il nome del modulo generato da Babel, restituisce il nome da utilizzare. Restituire un valore falsy farà utilizzare il name originale.

moduleRoot

Tipo: string

Un percorso root da includere nei nomi dei moduli generati.

Concetti delle opzioni

MatchPattern

Tipo: string | RegExp | (filename: string | void, context: { caller: { name: string } | void, envName: string, dirname: string ) => boolean

Diverse opzioni di Babel eseguono test sui percorsi dei file. In generale, queste opzioni supportano un approccio comune ai pattern dove ogni pattern può essere:

  • string - Un percorso file con supporto semplice per **, * e *.ext. Qualsiasi file o cartella genitore che corrisponde al pattern viene considerato una corrispondenza. Il percorso segue la normale logica dei percorsi di Node, quindi su POSIX deve essere separato da /, mentre su Windows sono supportati sia / che \.

  • RegExp - Un'espressione regolare per confrontare con il nome file normalizzato. Su POSIX, l'espressione regolare del percorso verrà eseguita su un percorso separato da /, mentre su Windows sarà su un percorso separato da \.

È importante notare che, se viene utilizzato uno di questi, Babel richiede che l'opzione filename sia presente e la considererà un errore in caso contrario.

  • (filename: string | void, context: { caller: { name: string } | void, envName: string, dirname: string }) => boolean è una callback generale che dovrebbe restituire un booleano per indicare se è una corrispondenza o meno. Alla funzione viene passato il filename o undefined se non è stato dato a Babel. Vengono anche passate le opzioni correnti envName e caller specificate dalla chiamata di primo livello a Babel e dirname che è la directory del file di configurazione o la directory di lavoro corrente (se la trasformazione è stata chiamata programmaticamente).
nota

La corrispondenza basata su stringhe non supporta pattern glob completi. ** corrisponde a 0 o più parti del percorso, * corrisponde esattamente a 1 parte del percorso e *.ext corrisponde a un carattere jolly con estensione. L'uso di * in qualsiasi altro modo, ad esempio come parte di un percorso o del nome di un file, non è supportato. Se hai bisogno di una corrispondenza di pattern complessa, utilizza la corrispondenza regex o una funzione auto-definita nella configurazione.

Ecco alcuni esempi su come funziona la corrispondenza:

DescriptionPatternMatchesDoes Not Match
Exact path matchingfoo/bar/src/foo/bar/src/foo, /src/foo/baz, /src/foo/bar/baz
Single wildcard (*)*/bar/src/foo/bar, /src/xyz/bar/src/foo/baz, /src/bar, /src/foo/bar/baz
Double wildcard (**)**/bar/src/bar, /src/foo/bar, /src/a/b/c/bar/src/bar/foo, /src/barfoo
File extension pattern (*.ext)foo/*.js/src/foo/test.js, /src/foo/index.js//src/foo/test.ts, /src/foo/test.js.map
Combined patterns**/test/*.js/src/test/file.js, /src/a/b/test/file.js/src/test.js, /src/test/sub/file.js

Ecco esempi in cui * non ha una funzione di carattere jolly:

DescriptionPatternDoes Not Match
Star in pathtest*me/*.js/src/testme/1.js, /src/testme/2.js, /src/test-me/3.js
Star in file namefoo*bar.js/src/foobar.js, /src/foo-bar.js
Star in extensionfile.ts*/src/file.ts, /src/file.tsx

Unione

Si prega di fare riferimento a Come Babel unisce gli elementi di configurazione.

Voci di plugin/preset

PluginEntry / PresetEntry

I singoli elementi plugin/preset possono avere diverse strutture:

  • EntryTarget - Plugin singolo

  • [EntryTarget, EntryOptions] - Plugin singolo con opzioni

  • [EntryTarget, EntryOptions, string] - Plugin singolo con opzioni e nome (vedi unione per maggiori informazioni sui nomi)

  • ConfigItem - Un elemento di configurazione del plugin creato da babel.createConfigItem().

Lo stesso EntryTarget può essere utilizzato più volte a meno che a ciascuno non venga assegnato un nome diverso, e farlo comporterà un errore di plugin/preset duplicato.

Potrebbe essere un po' difficile da leggere, quindi ecco un esempio:

JavaScript
plugins: [
// EntryTarget
'@babel/plugin-transform-classes',

// [EntryTarget, EntryOptions]
['@babel/plugin-transform-arrow-functions', { spec: true }],

// [EntryTarget, EntryOptions, string]
['@babel/plugin-transform-for-of', { loose: true }, "some-name"],

// ConfigItem
babel.createConfigItem(require("@babel/plugin-transform-spread")),
],

EntryTarget

Tipo: string | {} | Function

Un plugin o preset può provenire da diverse fonti:

  • string - Un percorso in stile require o un identificatore di plugin/preset. Gli identificatori verranno sottoposti a normalizzazione del nome.

  • {} | Function - Un oggetto o funzione effettivo di plugin/preset dopo essere stato require()ato.

EntryOptions

Tipo: undefined | {} | false

Le opzioni vengono passate a ogni plugin/preset durante l'esecuzione. undefined verrà normalizzato a un oggetto vuoto.

false indica che una voce è completamente disabilitata. Utile in contesti dove l'ordine è importante ma serve una condizione separata per decidere l'attivazione. Ad esempio:

JavaScript
plugins: [
'one',
['two', false],
'three',
],
overrides: [{
test: "./src",
plugins: [
'two',
]
}]

abiliterebbe il plugin two per i file in src, ma two verrebbe comunque eseguito tra one e three.

Normalizzazione del Nome

Per impostazione predefinita, Babel si aspetta che plugin abbiano il prefisso babel-plugin- e preset babel-preset-. Per evitare ripetizioni, Babel applica una fase di normalizzazione che aggiunge automaticamente questi prefissi durante il caricamento. Le regole principali sono:

  • I percorsi assoluti rimangono invariati.

  • I percorsi relativi che iniziano con ./ rimangono invariati.

  • I riferimenti a file all'interno di un pacchetto rimangono invariati.

  • Qualsiasi identificatore con prefisso module: avrà il prefisso rimosso ma sarà per il resto invariato.

  • plugin-/preset- verrà iniettato all'inizio di qualsiasi pacchetto con ambito @babel che non lo abbia già come prefisso.

  • babel-plugin-/babel-preset- verrà iniettato come prefisso per pacchetti senza ambito che non lo contengano.

  • babel-plugin-/babel-preset- verrà iniettato come prefisso per pacchetti con ambito @ che non lo contengano da nessuna parte nel nome.

  • babel-plugin/babel-preset verrà iniettato come nome pacchetto se viene fornito solo il nome dell'ambito @.

Ecco alcuni esempi applicati al contesto dei plugin:

InputNormalized
"/dir/plugin.js""/dir/plugin.js"
"./dir/plugin.js""./dir/plugin.js"
"mod""babel-plugin-mod"
"mod/plugin""mod/plugin"
"babel-plugin-mod""babel-plugin-mod"
"@babel/mod""@babel/plugin-mod"
"@babel/plugin-mod""@babel/plugin-mod"
"@babel/mod/plugin""@babel/mod/plugin"
"@scope""@scope/babel-plugin"
"@scope/babel-plugin""@scope/babel-plugin"
"@scope/mod""@scope/babel-plugin-mod"
"@scope/babel-plugin-mod""@scope/babel-plugin-mod"
"@scope/prefix-babel-plugin-mod""@scope/prefix-babel-plugin-mod"
"@scope/mod/plugin""@scope/mod/plugin"
"module:foo""foo"