Звучит так, как будто у Бабеля не было поддержки модуля ES6 в полном соответствии со спецификацией;Мне интересно, каково текущее состояние, и возникают проблемы с поиском информации.
В книге доктора Раушмайера "Исследование ES6" описываются свойства объекта импорта.
http://exploringjs.com/es6/ch_modules.html#sec_imports-as-views-on-exports
В частности, «импорт - это динамические представления, доступные только для чтения для экспортируемых значений», и следующее не разрешено:
import { foo } from './foo';
import foo2 from './foo';
import * as foo3 from './foo';
foo = '...'; // error, foo is readonly
foo2 = '...'; // error, foo is readonly
foo3.foo = '...'; // error, foo3 is a frozen object
Однако в Babel я заметил несоответствие в отношении экспорта по умолчанию, которое все еще сохраняется.существует в версии 7:
// foo.js
export function foo() {}
export default foo;
// other.js
import * as fooStuff from './foo';
fooStuff.default = function newFoo() {}; // no error
fooStuff.foo = function newFoo() {}; // error
Это объясняется различием в выводе Babel для двух случаев:
// default export
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = foo;
// named export
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "foo", {
enumerable: true,
get: function get() {
return _foo.default;
}
});
Насколько я понимаю, экспорт по умолчанию - это просто еще один именованный экспорт, которыйслучайно получило название «default», но в Babel 7 это, похоже, не реализовано таким образом. Я создал репо с различными тестовыми примерами на https://github.com/yossarian21/import-spec
Итак, мои вопросы:
- Действительно ли Babel отклоняется от спецификации или я неправильно понимаю спецификацию?
- Где я могу найти информацию о плане Babel по реализации спецификации?
- Является ли node.js реализует поддержку импорта / экспорта в соответствии со спецификацией?