Opzioni
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
| Version | Changes |
|---|---|
| v7.11.0 | Add supportsExportNamespaceFrom |
| v7.7.0 | Add supportsTopLevelAwait |
| v7.5.0 | Add 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
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.jsono.babelrcvengono caricati relativamente al file in compilazione. Se questa opzione viene omessa, Babel si comporterà come se fosse impostatobabelrc: 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:
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:
-
Directory base durante la verifica del valore predefinito per
"configFile" -
Valore predefinito per
"babelrcRoots".
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"- Trasmette il valore"root"senza modifiche. -
"upward"- Risale dalle directory a partire dalla"root", cercando una directory contenente un filebabel.config.json, e genera un errore se un filebabel.config.jsonnon viene trovato. -
"upward-optional"- Risale dalle directory a partire dalla"root", cercando un filebabel.config.json, e ripristina il valore"root"se unbabel.config.jsonnon viene trovato.
"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:
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
| Version | Changes |
|---|---|
v7.20.0 | Support deno target |
v7.15.0 | Support rhino target |
Descrive gli ambienti supportati/destinati per il tuo progetto.
Può essere una query compatibile con browserslist (con limitazioni):
{
"targets": "> 0.25%, not dead"
}
Oppure un oggetto con le versioni minime degli ambienti da supportare:
{
"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.
Raccomandiamo di impostare targets per ridurre le dimensioni del codice generato.
{
"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:
{
"targets": "defaults"
}
Riconosciamo che questa situazione non è ideale e la affronteremo nuovamente in Babel v8.
targets.esmodules
Tipo: boolean | "intersect"
History
| Version | Changes |
|---|---|
v7.13.0 | Support "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).
{
// 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.
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:
{
"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:
{
"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.
{
"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:
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
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
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
-
trueper 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:
-
truescriverà la mappa su un file.mapsu disco -
"inline"scriverà il file direttamente, quindi conterrà undata:con la mappa -
"both"scriverà il file con un URLdata: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 istruzioniimport/exporte 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 istruzioniimport/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 istruzioniimport/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:
{
"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 oundefinedse non è stato dato a Babel. Vengono anche passate le opzioni correntienvNameecallerspecificate dalla chiamata di primo livello a Babel edirnameche è la directory del file di configurazione o la directory di lavoro corrente (se la trasformazione è stata chiamata programmaticamente).
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:
| Description | Pattern | Matches | Does Not Match |
|---|---|---|---|
| Exact path matching | foo/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:
| Description | Pattern | Does Not Match |
|---|---|---|
| Star in path | test*me/*.js | /src/testme/1.js, /src/testme/2.js, /src/test-me/3.js |
| Star in file name | foo*bar.js | /src/foobar.js, /src/foo-bar.js |
| Star in extension | file.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 dababel.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:
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 stilerequireo un identificatore di plugin/preset. Gli identificatori verranno sottoposti a normalizzazione del nome. -
{} | Function- Un oggetto o funzione effettivo di plugin/preset dopo essere statorequire()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:
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@babelche 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-presetverrà iniettato come nome pacchetto se viene fornito solo il nome dell'ambito@.
Ecco alcuni esempi applicati al contesto dei plugin:
| Input | Normalized |
|---|---|
"/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" |