Не может требовать () значение экспорта по умолчанию в Babel 6.икс
В Вавилоне 5.х, я могу написать следующий код:
приложение.js
export default function (){}
.js
require('babel/register');
require('./app')();
тогда я могу бежать node index.js без ошибок. Однако, с помощью Babel 6.x, запустив следующий код
index.es6.js
require('babel-core/register');
require('./app')();
приводит к ошибке
require(...) не является функцией
Я хочу знать, почему?
2 ответов:
TL; DR
вы должны использовать
require('./app').default();объяснение
Вавилон 5 использовал, чтобы взломать совместимости для
export default: если модуль содержит только один экспорт, и это был экспорт по умолчанию, он был назначенmodule.exports. Так, например, ваш модуль приложение.jsexport default function () {}будет перенесено на это
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = function () {}; module.exports = exports["default"];это было сделано чисто для совместимости с
require-ing Babel-транспилированные модули (как вы делаете). Это также было непоследовательно; если модуль содержал как именованный, так и экспорт по умолчанию, он не мог бытьrequire- d.в действительности, согласно спецификации модуля ES6, экспорт по умолчанию ничем не отличается чем именованный экспорт с именем
default. Это просто синтаксический сахар, который может быть статически во время компиляции, так что этоimport something from './app';это то же самое, что это
import { default as something } from './app';как говорится, похоже, что Babel 6 решил отказаться от взлома совместимости при транспилировании модулей. Теперь, ваш модуль приложение.js это transpiled как
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = function () {};как видите, больше никаких заданий
module.exports. Кrequireэтот модуль, вам нужно сделатьrequire('./app').default();
просто чтобы следить за правильным ответом выше.
Если вы хотите использовать поведение экспорта по умолчанию
babel@5, вы можете попробовать babel-plugin-add-module-exports плагин.это работает довольно хорошо для меня.
Comments