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 node index.jssin 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é?
javascript
ecmascript-6
babeljs
XGHeaven
fuente
fuente

.babelrc? ¿Estás especificando opciones de Babel en alguna parte? Lo pregunto porque Babel 6 no transpila nada de forma predeterminada y no está especificando eles2015ajuste preestablecido en el código que ha publicado..babelrc, el otro script es6 se está ejecutando normalmentebabeles para preguntas sobre una biblioteca de Python con dicho nombre.app.js, pero ejecutarlo de inmediatoRespuestas:
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 le asignabamodule.exports. Entonces, por ejemplo, su módulo app.jsexport default function () {}se trasladaría a esto
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = function () {}; module.exports = exports["default"];Esto fue hecho exclusivamente para la compatibilidad con
require-ing módulos transpiled-Babel (como lo está haciendo). También fue inconsistente; si un módulo contiene exportaciones con nombre y predeterminadas, no puede serrequire-d.En realidad, de acuerdo con la especificación del módulo ES6, una exportación predeterminada no es diferente de una exportación con nombre con el nombre
default. Es solo azúcar sintáctico que se puede resolver estáticamente en tiempo de compilación, por lo que esteimport something from './app';es lo mismo que este
import { default as something } from './app';Dicho esto, parece que Babel 6 decidió eliminar 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 ves, no hay más asignaciones a
module.exports. Pararequireeste módulo, debe hacerrequire('./app').default();fuente
require('./app').default;funcionó.default()regresóundefinedrequire(...).defaultda una referencia a la función exportada.default()lo llama. Si su función no devuelve nada (o está vacía), entonces, por supuesto, el resultado seráundefined.require('path').default()no funciona,require('path').defaultfunciona para mírequire('./app').default;Si exporta un objeto en lugar de una función.Solo para continuar con la respuesta correcta arriba.
Si desea utilizar el comportamiento de exportación predeterminado de
babel@5, puede probar el complemento babel-plugin-add-module-export .Me está funcionando bastante bien.
fuente
Si esto no funciona
require('./app').default()utilizar
require('./app').defaultSin la llamada a la función al final.
fuente