Saltar al contenido principal

Lanzamiento de la versión 6.18.0

· 9 min de lectura
Traducción Beta No Oficial

Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →

¡Más actualizaciones de Flow y muchas correcciones!

¡Hemos añadido 4 nuevos colaboradores a Babel desde el último lanzamiento!

¡Todo el trabajo duro se debe a ellos y a nuestros nuevos contribuyentes!

¡Han estado ayudando a mantener este proyecto a flote junto con @loganfsmyth, @danez y conmigo!

Resumen de v6.18.0 (2016-10-24)

De nuevo, por si no lo has comprobado recientemente, ¡hemos vuelto a GitHub Issues! Todo gracias a @danez

🚀 Nueva característica

#4697 Añade tipo de nodo variance y genera anotaciones de varianza en propiedades. (@samwgoldman)

Consulta la publicación del blog y la documentación de Flow para más información:

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 Soporte para ObjectExpression en la evaluación de rutas estáticas. (@motiz88)

Útil para babel/babili y otros plugins.

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

#4699 import(): Soporte inicial para dynamic-import. (@kesne)

El soporte en el parser se añadió en babel/babylon#v6.12.0.

Solo el plugin para habilitarlo en Babel.

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

o usar las nuevas parserOpts

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

#4655 Añade opción useBuiltIns a helper-builder-react-jsx. (@existentialism)

Anteriormente añadimos useBuiltIns para object-rest-spread para que use la versión nativa/integrada si usas un polyfill o tiene soporte nativo.

Este cambio simplemente aplica la misma opción del plugin al spread dentro de JSX.

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

#4724 Añade EmptyTypeAnnotation. (@samwgoldman)

Añadido en flow aquí y en babylon aquí.

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

#4758 Hacer que getBinding ignore etiquetas; añadir Scope#getLabel, Scope#hasLabel, Scope#registerLabel. (@kangax)

Rastrea LabeledStatement por separado (no forma parte de los bindings).

💅 Mejoras

#4690 Consolidar declaraciones var contiguas en la transformación de desestructuración. (@motiz88)

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

#4685 Mejorar mensajes de error cuando se dan opciones de preset sin un preset correspondiente. (@kaicataldo)

Hemos recibido varios reportes de usuarios que no envolvían un preset en [] al pasar opciones, así que añadimos un mensaje de error adicional para esto.

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 Cambiar babel-generator para que emita boolean en lugar de bool para el nodo AST BooleanTypeAnnotation. (@existentialism)

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

📝 Documentación

#4653 Ajustar licencia para visualización en GitHub. (@existentialism)

Para que nuestra Licencia MIT aparezca.

🐛 Correcciones de errores

#4765 No tratar JSXIdentifier en JSXMemberExpression como etiqueta HTML. Cierra #4027. (@DrewML)

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

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

#4763 Manejar reasignación de JSXIdentifier a MemberExpression en transformación CommonJS. Cierra #3728. (@DrewML)

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

#4736 Corregir reemplazo de for-of si está dentro de una etiqueta. (@danez)

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

#4502 Crear caso especial para inicializadores de propiedades de clase en shadow-functions. (@motiz88)

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

#4719 Corregida compilación incorrecta de métodos de iteradores asíncronos. (@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 Consolidar declaraciones var contiguas en la transformación de desestructuración. (@motiz88)

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

#4666 Corregir error cuando el argumento predeterminado del constructor hace referencia a sí mismo o a su propiedad estática. (@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 Manejar efectos secundarios correctamente en expresiones de índice de parámetros rest (#4348). (@motiz88)

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

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

#4669 Corrección de la transformación de ámbito de bloque para declaraciones en sentencias etiquetadas. (@motiz88)

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

#4672 Evitar repetición de literales (plantilla) impuros al desazucarar **= (#4403). (@motiz88)

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

#4642 Excluir super de ser asignado a variable de referencia. (@danez)

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

#4670 Conservar tipos de retorno en ObjectMethods en transform-es2015-shorthand-properties. (@danharper)

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

#4668 Conservar tipos de retorno de métodos en transform-es2015-classes (Cierra #4665). (@danharper)

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

🏠 Interno

#4725 Eliminar babel-doctor de babel-cli. (@kaicataldo)

Es una herramienta de uso único (útil tras el lanzamiento inicial al migrar de v5 a v6) que no necesita ser parte de babel-cli. La publicaremos como paquete independiente si alguien lo solicita.

#4764 Añadir opción de variable de entorno TEST_DEBUG para test.sh, habilitando depurador de Node 6. (@DrewML)

Útil para colaboradores: TEST_DEBUG=true make test ejecuta node --inspect en Node v6+.

#4735 Generar automáticamente fixtures expected.js faltantes. (@motiz88)

También genial para colaboradores: al crear archivo actual.js sin expected.js, se genera automáticamente (como pruebas snapshot pero con salida de babel).

#4734 Cambiar uso de "suite"/"test" en pruebas unitarias por "describe"/"it". (@DrewML)

#4564 Habilitar babel para pruebas. (@danez)

¡Las pruebas que no son fixtures finalmente también son transpiladas!

#4732 Ejecutar ESLint en archivos de prueba y corregir errores de lint.. (@DrewML)

#4680 Actualización: Eslint a 3.0 y actualización de builds CI (Cierra #4638). (@gyandeeps)

Permite usar última versión de eslint (sin soporte para Node < 4) ejecutando lint solo en Node más reciente, optimizando tiempo de CI.

🎉 ¡Primera Solicitud de Extracción Fusionada!

🌏 Contribuidores: 17


¡Consulta Github para ver el registro de cambios completo!