TL; DR
あなたは使用する必要があります
require('./app').default();
説明
Babel 5には、互換性ハックがありましたexport default。モジュールに含まれるエクスポートが1つだけで、それがデフォルトのエクスポートである場合、に割り当てられましたmodule.exports。したがって、たとえば、モジュールapp.js
export default function () {}
これにトランスパイルされます
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = function () {};
module.exports = exports["default"];
これは、純粋にrequire-ing Babel-transpiledモジュールとの互換性のために行われました(あなたがしているように)。また、一貫性がありませんでした。モジュールに名前付きエクスポートとデフォルトエクスポートの両方が含まれている場合、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 6はデフォルトでは何もトランスパイルせずes2015、投稿したコードでプリセットを指定していないので、お願いします。