TL; DR
Musisz użyć
require('./app').default();
Wyjaśnienie
Babel 5 miał kiedyś hack kompatybilności export default
: jeśli moduł zawierał tylko jeden eksport i był to domyślny eksport, został przypisany do module.exports
. Na przykład Twój moduł app.js
export default function () {}
zostałby do tego przełożony
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = function () {};
module.exports = exports["default"];
Zrobiono to wyłącznie w celu zapewnienia zgodności z require
modułami transpiled -ing Babel (tak jak robisz). Było to również niespójne; jeśli moduł zawierał zarówno nazwane, jak i domyślne eksporty, nie może to być require
-d.
W rzeczywistości, zgodnie ze specyfikacją modułu ES6, domyślny eksport nie różni się od nazwanego eksportu z nazwą default
. Jest to po prostu cukier syntaktyczny, który można rozwiązać statycznie w czasie kompilacji, więc to
import something from './app';
jest taki sam jak ten
import { default as something } from './app';
To powiedziawszy, wygląda na to, że Babel 6 zdecydował się porzucić hack interoperacyjności podczas transpilacji modułów. Teraz twój moduł app.js jest transponowany jako
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function () {};
Jak widzisz, nie ma więcej przydziału do module.exports
. Do require
tego modułu musisz zrobić
require('./app').default();
.babelrc
? Czy gdzieś określasz opcje Babel? Pytam, ponieważ Babel 6 domyślnie niczego nie transponuje i nie określasz ustawieniaes2015
wstępnego w opublikowanym kodzie.