transpilador online javascript ecmascript-6 babeljs

javascript - online - transpilador babel



No se puede requerir() valor de exportación predeterminado en Babel 6.x (2)

Solo para seguir con la respuesta correcta anterior.

Si desea utilizar el comportamiento de exportación predeterminado de babel@5 , puede probar babel-plugin-add-module-exports .

Me está funcionando bastante bien.

En Babel 5.x, puedo escribir el siguiente código:

app.js

export default function (){}

index.js

require(''babel/register''); require(''./app'')();

Entonces, puedo ejecutar el node index.js sin errores. Sin embargo, usando Babel 6.x, ejecutando el siguiente código

index.es6.js

require(''babel-core/register''); require(''./app'')();

da como resultado un error

require (...) no es una función

¿Quiero saber por qué?


TL; DR

Tienes que usar

require(''./app'').default();

Explicación

Babel 5 solía tener un truco de compatibilidad para export default : si un módulo contenía solo una exportación, y era una exportación predeterminada, se asignaba a module.exports . Entonces, por ejemplo, su módulo app.js

export default function () {}

se trasladaría a esto

"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = function () {}; module.exports = exports["default"];

Esto se realizó únicamente por compatibilidad con módulos transpilados Babel requeridos (como lo está haciendo). También fue inconsistente; si un módulo contuviera exportaciones con nombre y predeterminadas, no podría require -d.

En realidad, de acuerdo con las especificaciones del módulo ES6, una exportación predeterminada no es diferente de una exportación con nombre con el nombre default . Es solo el azúcar sintáctico que puede resolverse estáticamente en tiempo de compilación, por lo que esto

import something from ''./app'';

es lo mismo que esto

import { default as something } from ''./app'';

Dicho esto, parece que Babel 6 decidió abandonar el truco de interoperabilidad al transpilar módulos. Ahora, su módulo app.js se transpila como

''use strict''; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = function () {};

Como puede ver, no más asignaciones a module.exports . Para require este módulo, debe hacer

require(''./app'').default();