Vai al contenuto principale

@babel/plugin-transform-block-scoping

Traduzione Beta Non Ufficiale

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

informazioni

Questo plugin è incluso in @babel/preset-env

Esempi

In

JavaScript
{
let a = 3;
}

let a = 3;

Out

JavaScript
{
var _a = 3;
}

var a = 3;

Verifica delle costanti

Questo plugin valida anche tutte le variabili const. La riassegnazione di costanti è un errore a runtime e verrà inserito il codice di errore necessario.

Installazione

npm install --save-dev @babel/plugin-transform-block-scoping

Utilizzo

Con un file di configurazione (Consigliato)

Senza opzioni:

babel.config.json
{
"plugins": ["@babel/plugin-transform-block-scoping"]
}

Con opzioni:

babel.config.json
{
"plugins": [
[
"@babel/plugin-transform-block-scoping",
{
"throwIfClosureRequired": true
}
]
]
}

Tramite CLI

Shell
babel --plugins @babel/plugin-transform-block-scoping script.js

Tramite Node API

JavaScript
require("@babel/core").transformSync("code", {
plugins: ["@babel/plugin-transform-block-scoping"],
});

Opzioni

throwIfClosureRequired

boolean, predefinito false.

In casi come il seguente è impossibile riscrivere let/const senza aggiungere una funzione e chiusura aggiuntiva durante la trasformazione:

JavaScript
for (let i = 0; i < 5; i++) {
setTimeout(() => console.log(i), 1);
}

In codice estremamente sensibile alle prestazioni, ciò può essere indesiderato. Se "throwIfClosureRequired": true è impostato, Babel genera un errore durante la trasformazione di questi pattern invece di aggiungere automaticamente una funzione aggiuntiva.

tdz

boolean, predefinito false.

Per impostazione predefinita, questo plugin ignora la temporal dead zone (TDZ) per le variabili a blocco. Il seguente codice non genererà un errore quando transpilato con Babel, il che non è conforme alle specifiche:

JavaScript
i;
let i;

Se necessiti di questi errori, puoi configurare Babel per rilevarli impostando "tdz": true per questo plugin. Tuttavia, l'implementazione corrente potrebbe non gestire correttamente tutti i casi limite ed è preferibile evitare completamente codice di questo tipo.

consiglio

Maggiori informazioni sulla configurazione delle opzioni del plugin sono disponibili qui