Vai al contenuto principale

6.18.0 Rilasciata

· Lettura di 9 min
Traduzione Beta Non Ufficiale

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

Altri aggiornamenti per Flow e tante correzioni!

Abbiamo aggiunto 4 nuovi collaboratori a Babel dall'ultima release!

Tutto il merito del duro lavoro va a loro e ai nostri nuovi contributori!

Hanno aiutato a tenere in vita questo progetto insieme a @loganfsmyth, @danez, e a me!

Riepilogo v6.18.0 (24 ottobre 2016)

Ancora, se non l'avete controllato di recente, siamo tornati su Github Issues! Tutto grazie a @danez

🚀 Nuova Funzionalità

#4697 Aggiunge il tipo di nodo variance e genera annotazioni di varianza per le proprietà. (@samwgoldman)

Leggi il blog post e la documentazione di Flow per maggiori informazioni:

JavaScript
type T = { +p: T };
interface T { -p: T };
declare class T { +[k:K]: V };
class T { -[k:K]: V };
class C2 { +p: T = e };

#4746 Supporta ObjectExpression nella valutazione statica dei percorsi. (@motiz88)

Utile per babel/babili e altri plugin.

JavaScript
// in
{['a' + 'b']: 10 * 20, 'z': [1, 2, 3]}
// out
{ab: 200, z: [1, 2, 3]}

#4699 import(): Supporto iniziale per dynamic-import. (@kesne)

Il supporto nel parser è stato aggiunto in babel/babylon#v6.12.0.

Solo il plugin per abilitarlo in Babel.

JavaScript
// install
$ npm install babel-plugin-syntax-dynamic-import --save-dev

oppure usa le nuove parserOpts

JavaScript
// .babelrc
{
"parserOpts": {
"plugins": ['dynamicImport']
}
}

#4655 Aggiunge l'opzione useBuiltIns a helper-builder-react-jsx. (@existentialism)

In precedenza abbiamo aggiunto useBuiltIns per object-rest-spread per utilizzare la versione nativa/integrata se si usa un polyfill o se è supportata nativamente.

Questa modifica applica la stessa opzione del plugin anche per lo spread all'interno di JSX.

JavaScript
// in
var div = <Component {...props} foo="bar" />
// out
var div = React.createElement(Component, Object.assign({}, props, { foo: "bar" }));

#4724 Aggiunge EmptyTypeAnnotation. (@samwgoldman)

Aggiunto in flow qui e in babylon qui.

JavaScript
function f<T>(x: empty): T {
return x;
}
f(); // nothing to pass...

#4758 Fa sì che getBinding ignori le etichette; aggiunge Scope#getLabel, Scope#hasLabel, Scope#registerLabel. (@kangax)

Tiene traccia di LabeledStatement separatamente (non fa parte dei binding).

💅 Rifiniture

#4690 Consolida le dichiarazioni var contigue nella trasformazione della destrutturazione. (@motiz88)

JavaScript
// in
const [a, b] = [1, 2];
// out
var a = 1,
b = 2;

#4685 Messaggi di errore migliorati quando vengono fornite opzioni per un preset senza un preset corrispondente. (@kaicataldo)

Abbiamo ricevuto diversi report di utenti che non racchiudevano un preset tra [] quando passavano opzioni, quindi abbiamo aggiunto un messaggio di errore aggiuntivo per questo caso.

JavaScript
// incorrect, and current gives a unexpected error message
{
"presets": [
"preset",
{ "presetOptions": 'hi' } // gets parsed as another preset instead of being part of the "preset"
]
}
// correct
{
"presets": [
["preset",
{
"presetOptions": 'hi'
}
]
]
}
ReferenceError: [BABEL] /test.js: Unknown option: base.loose2. Check out http://babeljs.io/docs/usage/options/ for more information about options.

A common cause of this error is the presence of a configuration options object without the corresponding preset name. Example:

Invalid:
`{ presets: [{option: value}] }`
Valid:
`{ presets: [["presetName", {option: value}]] }`

For more detailed information on preset configuration, please see http://babeljs.io/docs/plugins/#pluginpresets-options.

#4646 Cambia babel-generator per produrre boolean invece di bool per il nodo AST BooleanTypeAnnotation. (@existentialism)

JavaScript
var a: Promise<boolean>[];
// instead of
var a: Promise<bool>[];

📝 Documentazione

#4653 Modifica della licenza per la visualizzazione su GitHub. (@existentialism)

In modo che la nostra licenza MIT appaia.

🐛 Correzioni di bug

#4765 Non tratta JSXIdentifier in JSXMemberExpression come tag HTML. Chiude #4027. (@DrewML)

JavaScript
// transform-react-inline-elements
// issue with imported components that were JSXMemberExpression
import { form } from "./export";

function ParentComponent() {
return <form.TestComponent />;
}

#4763 Gestisce il remapping di JSXIdentifier in MemberExpression nella trasformazione CommonJS. Chiude #3728. (@DrewML)

// transform-react-inline-elements
import { Modal } from "react-bootstrap";
export default CustomModal = () => <Modal.Header>foobar</Modal.Header>;

#4736 Corregge la sostituzione di for-of se all'interno di un'etichetta. (@danez)

JavaScript
if ( true ) {
loop: for (let ch of []) {}
}

#4502 Crea un caso speciale per gli inizializzatori di proprietà di classe in shadow-functions. (@motiz88)

class A {
prop1 = () => this;
static prop2 = () => this;
prop3 = () => arguments;
}

#4719 Corretta la compilazione errata dei metodi dell'iteratore asincrono. (@Jamesernator)

JavaScript
// in
class C {
async *g() { await 1; }
}
// out
class C {
g() { // was incorrectly outputting the method with a generator still `*g(){`
return _asyncGenerator.wrap(function* () {
yield _asyncGenerator.await(1);
})();
}
}

#4690 Consolida le dichiarazioni var contigue nella trasformazione della destrutturazione. (@motiz88)

JavaScript
// was wrapping variables in an IIFE incorrectly
for ( let i = 0, { length } = list; i < length; i++ ) {
console.log( i + ': ' + list[i] )
}

#4666 Corregge l'errore quando l'argomento predefinito del costruttore fa riferimento a se stesso o a una proprietà statica propria. (@danharper)

JavaScript
// was producing invalid code
class Ref {
static nextId = 0
constructor(id = ++Ref.nextId, n = id) {
this.id = n
}
}

assert.equal(1, new Ref().id)
assert.equal(2, new Ref().id)

#4674 Gestisce correttamente gli effetti collaterali nelle espressioni di indice dei parametri rest (#4348). (@motiz88)

JavaScript
function first(...values) {
let index = 0;
return values[index++]; // ++ was happening twice
}

console.log(first(1, 2));

#4669 Correzione della trasformazione dello scoping a blocco per dichiarazioni in istruzioni etichettate. (@motiz88)

JavaScript
let x = 10;
if (1)
{
ca: let x = 20;
}

#4672 Evita la ripetizione di letterali (template) impuri durante la desugaring di **= (#4403). (@motiz88)

JavaScript
a[`${b++}`] **= 1;

#4642 Escludi super dall'essere assegnato alla variabile ref. (@danez)

JavaScript
foo = {
bar() {
return super.baz **= 12;
}
}

#4670 Mantieni i tipi di ritorno sugli ObjectMethods in transform-es2015-shorthand-properties. (@danharper)

JavaScript
// @flow
var obj = {
method(a: string): number {
return 5 + 5;
}
};

#4668 Mantieni i tipi di ritorno dei metodi in transform-es2015-classes (Chiude #4665). (@danharper)

JavaScript
// @flow
class C {
m(x: number): string {
return 'a';
}
}

🏠 Interno

#4725 Rimuovi babel-doctor da babel-cli. (@kaicataldo)

È uno strumento a uso singolo (utile dopo il rilascio iniziale durante l'aggiornamento da v5 a v6) che non necessita di far parte di babel-cli. Lo pubblicheremo come pacchetto autonomo se qualcuno lo richiederà.

#4764 Aggiungi l'opzione TEST_DEBUG per test.sh, per abilitare il debugger di node 6. (@DrewML)

Utile per i contributori: TEST_DEBUG=true make test per eseguire node --inspect su node v6+.

#4735 Genera automaticamente i fixture expected.js mancanti. (@motiz88)

Fantastico anche per i contributori: creando un file actual.js senza il corrispondente expected.js, verrà generato automaticamente (simile ai test snapshot ma con l'output di babel).

#4734 Modifica l'utilizzo di "suite"/"test" nei test unitari in "describe"/"it". (@DrewML)

#4564 Abilita babel per i test. (@danez)

Finalmente anche i test non-fixture vengono transpilati!

#4732 Esegui ESLint sui file di test e correggi gli errori di lint. (@DrewML)

#4680 Aggiornamento: Eslint alla versione 3.0 e aggiornamento delle build CI (Chiude #4638). (@gyandeeps)

Ci permette di usare l'ultima versione di eslint (che abbandona il supporto per node < 4) eseguendo il lint solo sull'ultimo node, risparmiando tempo in CI.

🎉 Prima Pull Request Unitasi!

🌏 Committer: 17


Consulta GitHub per il changelog completo!