TL; DR
Du musst benutzen
require('./app').default();
Erläuterung
Babel 5 hatte früher einen Kompatibilitäts-Hack für export default
: Wenn ein Modul nur einen Export enthielt und es sich um einen Standardexport handelte, wurde es zugewiesen module.exports
. So zum Beispiel Ihr Modul app.js.
export default function () {}
würde darauf übertragen werden
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = function () {};
module.exports = exports["default"];
Dies wurde nur aus Kompatibilitätsgründen mit require
-ing Babel-transpiled Modulen durchgeführt (wie Sie es tun). Es war auch inkonsistent; Wenn ein Modul sowohl benannte als auch Standardexporte enthielt, konnte es nicht require
-d sein.
In der Realität unterscheidet sich ein Standardexport gemäß der ES6-Modulspezifikation nicht von einem benannten Export mit dem Namen default
. Es ist nur syntaktischer Zucker, der zur Kompilierungszeit statisch aufgelöst werden kann
import something from './app';
ist das gleiche wie das
import { default as something } from './app';
Abgesehen davon scheint Babel 6 beschlossen zu haben, den Interoperabilitäts-Hack beim Transpilieren von Modulen fallen zu lassen. Jetzt wird Ihr Modul app.js als transpiliert
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function () {};
Wie Sie sehen, keine Zuordnung mehr zu module.exports
. Zu require
diesem Modul müssen Sie tun
require('./app').default();
.babelrc
? Geben Sie irgendwo Babel-Optionen an? Ich frage, weil Babel 6 standardmäßig nichts transpiliert und Sie diees2015
Voreinstellung in dem von Ihnen geposteten Code nicht angeben.