TL; DR
Devi usare
require('./app').default();
Spiegazione
Babel 5 aveva un hack di compatibilità per export default
: se un modulo conteneva solo un'esportazione, ed era un'esportazione predefinita, veniva assegnato a module.exports
. Quindi, ad esempio, il tuo modulo app.js
export default function () {}
sarebbe traslato in questo
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = function () {};
module.exports = exports["default"];
Questo è stato fatto puramente per compatibilità con i require
moduli transpiled -ing Babel (come stai facendo). Era anche incoerente; se un modulo conteneva sia esportazioni denominate che predefinite, non poteva esserlorequire
-d.
In realtà, secondo le specifiche del modulo ES6, un'esportazione predefinita non è diversa da un'esportazione denominata con il nome default
. È solo zucchero sintattico che può essere risolto staticamente in fase di compilazione, quindi questo
import something from './app';
è lo stesso di questo
import { default as something } from './app';
Detto questo, sembra che Babel 6 abbia deciso di abbandonare l'hack dell'interoperabilità durante il transpiling dei moduli. Ora, il tuo modulo app.js è traspilato come
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function () {};
Come vedi, niente più incarichi a module.exports
. Per require
questo modulo, devi fare
require('./app').default();
.babelrc
? Stai specificando le opzioni di Babel da qualche parte? Lo chiedo perché Babel 6 non trasporta nulla di default e non stai specificando iles2015
preset nel codice che hai pubblicato.