Antes, Babel agregaba la línea module.exports = exports["default"]
. Ya no hace esto. Lo que esto significa es antes de que pueda hacer:
var foo = require('./foo');
// use foo
Ahora tengo que hacer esto:
var foo = require('./foo').default;
// use foo
No es un gran problema (y supongo que esto es lo que debería haber sido todo el tiempo). El problema es que tengo mucho código que depende de la forma en que funcionaban las cosas (puedo convertir la mayor parte a importaciones de ES6, pero no todas). ¿Alguien puede darme consejos sobre cómo hacer que la vieja forma funcione sin tener que pasar por mi proyecto y arreglar esto (o incluso alguna instrucción sobre cómo escribir un codemod para hacer esto sería bastante ingenioso).
¡Gracias!
Ejemplo:
Entrada:
const foo = {}
export default foo
Salida con Babel 5
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var foo = {};
exports["default"] = foo;
module.exports = exports["default"];
Salida con Babel 6 (y el complemento es2015):
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var foo = {};
exports["default"] = foo;
Tenga en cuenta que la única diferencia en la salida es el module.exports = exports["default"]
.
Editar
Puede que le interese esta publicación de blog que escribí después de resolver mi problema específico: malentendidos módulos ES6, actualización de Babel, lágrimas y una solución
if (false) { require('./foo') }
con webpack omitiría realmente incluirlo foo.js
en el paquete resultante.
false
palanca allí? Si es una condición que está disponible en su configuración de paquete web, puede haber otra opción.
export default {foo, bar}
con module.exports = {foo, bar}
. Me gustó bastante el método incorrecto que ahora no es compatible.
require
si está trabajando en una base de código que usa Babel? Lo más probable es que haya otros enfoques que le permitan evitar eso de todos modos.