@molekulyarniy

В чем разница между module.exports и export default?

Нашел точно такой же вопрос на stackoverflow, но так и не уловил сути. Насколько я понимаю, результат оба варианта дают одинаковый, но вариант с default я встречал всего пару раз.
  • Вопрос задан
  • 94 просмотра
Пригласить эксперта
Ответы на вопрос 3
WblCHA
@WblCHA
Старый: module.exports
Новый: export default
Ответ написан
bingo347
@bingo347 Куратор тега JavaScript
Ткнуть в доку лучше готового к копипасте ответа
module.exports - это часть модульной системы CommonJS, плюсом которой является то что ее можно реализовать на самом JS (нужна возможность синхронной загрузки кода), как это сделано например в Node.JS, где данная модульная система и появилась. Минус же в том, что с точки зрения AST все конструкции CommonJS - это обычные конструкции JS, вроде вызова функции require или обращения к объекту module, а значит у различных инструментов оптимизации и сборки тут гораздо меньше возможностей (например webpack не умеет тришейкинг в модулях CommonJS)

export default - это часть стандартных модулей JS, которые появились в стандарте лишь в 2015 году а работающую нативно реализацию получили только в 2018-2019 годах. И это долгое время было ее основным минусом. Так же минусом является то, что на npm до сих пор подавляющее большинство модулей не имеют поддержку данного стандарта, а поставляются только в CommonJS. Но однозначный плюс в том, что это нативная возможность языка, со всеми вытекающими.

Так же есть хорошая статья по теме:
https://habr.com/ru/company/domclick/blog/532084/
Ответ написан
delphinpro
@delphinpro
frontend developer
Раньше в javascript не было модулей. А хотелось, ибо удобно. Поэтому изобретали разные системы. CommonJS, AMD, UMD. AMD — самая старая. CommonJS была создана специально для NodeJS. UMD — универсальная, совместимая с обеими предыдущими.
Вот все эти require(), module.exports — есть части модульной системы CommonJS.
Однако без нативной поддержки модулей все эти системы по сути являются костылями.
И вот наступило счастье — в javascript подвезли нативные модули (ES Modules). Import / export и т.п.
В ноду они попали в 13 версии в качестве экспериментальной фичи, а уже в 14 версии — полнофункционально. В передовых браузерах появились еще раньше.

Резюмируя, на сегодняшний день стоит отдавать предпочтение именно ES Modules как в NodeJS, так и в браузерной разработке.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы