TL; 博士
你必须使用
const app = require('./app').default;
app();
解释
Babel 5 曾经export default
对module.exports
. 因此,例如,您的moduleapp.js
export default function () {}
将被转译为这个
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = function () {};
module.exports = exports["default"];
这样做纯粹是为了与require
-ing Babel-transpiled module兼容(就像你正在做的那样)。它也不一致;如果一个module同时包含命名导出和默认导出,则不能是require
-d。
实际上,根据 ES6 module规范,默认导出与名称为 的命名导出没有区别default
。它只是可以在编译时静态解析的语法糖,所以这
import something from './app';
和这个一样
import { default as something } from './app';
话虽如此,看来 Babel 6 决定在转译module时放弃互操作性黑客。现在,您的moduleapp.js被转译为
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function () {};
如您所见,不再分配给module.exports
. 对于require
这个module,你需要做
const app = require('./app').default;
app();
或者,更简洁,更接近您的原始代码:
require('./app').default();