«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как Babel 6 по-другому обрабатывает экспорт по умолчанию?

Как Babel 6 по-другому обрабатывает экспорт по умолчанию?

Опубликовано 14 ноября 2024 г.
Просматривать:896

How Does Babel 6 Handle Default Exports Differently?

Критическое изменение: стандартное поведение экспорта Babel 6

С выпуском Babel 6 в обработку экспорта по умолчанию были внесены существенные изменения . Хотя ранее компания Babel добавляла строку Module.exports = Exports["default"], эта функциональность была удалена.

Эта модификация требует изменения синтаксиса импорта модуля. Ранее код использовал устаревший синтаксис:

var foo = require('./foo');
// use foo

Теперь необходимо использовать следующий синтаксис:

var foo = require('./foo').default;
// use foo

Хотя эта корректировка может показаться незначительной, она может создать проблему для проектов со значительной зависимостью кода от предыдущего механизма экспорта.

Обходное решение

Если требуется устаревшее поведение экспорта, рекомендуется прямое использование CommonJS. В качестве альтернативы можно использовать собственный плагин для обеспечения желаемой совместимости. Функциональность этого плагина, скорее всего, будет отражать поведение, удаленное в Babel 6, с добавлением строки Module.exports = Exports["default"] к транспилированному выводу.

Влияние именованного экспорта

Стоит отметить, что удаление автоматического назначения модуля.exports улучшает семантику ES6 и предотвращает потенциальную путаницу. Именованный экспорт теперь будет вести себя так, как ожидалось, без случайного назначения экспорту по умолчанию.

Пример

Следующий код демонстрирует разницу между поведением экспорта Babel 5 и Babel 6:

// Input
const foo = {}
export default foo

Babel 5 Вывод

"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
var foo = {};
exports["default"] = foo;
module.exports = exports["default"];

Babel 6 Output

"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
var foo = {};
exports["default"] = foo;

Как можно заметить, единственная разница в выводе — это отсутствие модуля.exports = Exports["default"] в Babel 6.

Заявление о выпуске Эта статья перепечатана по адресу: 1729644858. В случае каких-либо нарушений, пожалуйста, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3