TL; DR
Ви повинні використовувати
require('./app').default();
Пояснення
Babel 5 раніше мав зламати сумісність для export default
: якщо модуль містив лише один експорт, і це був експорт за замовчуванням, йому було призначено module.exports
. Так, наприклад, ваш модуль app.js
export default function () {}
буде перетворено на це
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = function () {};
module.exports = exports["default"];
Це було зроблено виключно для сумісності з require
модулями, що транслюються за допомогою Babel (як ви це робите). Це також було непослідовно; якщо модуль містив як ім'я, так і експортування за замовчуванням, він не може бути require
-d.
Насправді, згідно специфікації модуля ES6, експорт за замовчуванням нічим не відрізняється від іменованого експорту з іменем default
. Це просто синтаксичний цукор, який можна статично вирішити під час компіляції, отже, це
import something from './app';
те саме, що це
import { default as something } from './app';
З огляду на це, схоже, що Babel 6 вирішив відмовитись від зламу взаємодії при транпіляції модулів. Тепер ваш модуль app.js транслюється як
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function () {};
Як бачите, більше немає призначення module.exports
. Для require
цього модуля вам потрібно зробити
require('./app').default();
.babelrc
? Ви десь вказуєте варіанти Babel? Я запитую, оскільки Babel 6 за замовчуванням нічого не транспілює, і ви не вказуєтеes2015
пресет у коді, який ви опублікували.