Почему существуют разные способы импорта модулей в JavaScript?

Я не уверен в различиях между импортом модуля JavaScript в следующем:

  • CommonJS
  • ES5
  • ES6
  • NodeJS
  • Машинопись

Почему существует так много способов импортировать модули javascript? Определяется ли «модуль» по-разному в разных реализациях? Все делают одно и то же, но с разным синтаксисом?


person Community    schedule 26.11.2019    source источник


Ответы (1)


В ES5 и более ранних версиях нет модулей. Различные модульные системы (CommonJS, AMD и подобные CommonJS в Node.js и TypeScript) были созданы, потому что в то время не было стандартной модульной системы в JavaScript, но иметь ее действительно полезно. Таким образом, потребность была удовлетворена инструментами и производителями инструментов.

ES2015 (он же «ES6») создал стандартный синтаксис для модулей в JavaScript, который теперь принят всеми современными браузерами, Node.js и TypeScript. Этот стандартный синтаксис оставляет семантику идентификаторов модулей на усмотрение хост-среды, поэтому лидеры веб-сообщества должны были прийти к единому мнению о том, как делать их в браузерах (и Node.js должен был выяснить, как это сделать в Node.js). и т. д.), поэтому между выходом ES2015 и тем, что вы можете использовать этот синтаксис изначально, была небольшая задержка (хотя Webpack, Rollup и тому подобные обрабатывали его).

В некоторых случаях статический синтаксис ES2015 не совсем подходит, поэтому есть import() (динамический import), которое уже поддерживается в некоторых средах и появится в ES2020.

person T.J. Crowder    schedule 26.11.2019
comment
<opinion> Теперь, когда есть стандартный синтаксис и его широкая поддержка, включая import() для динамических случаев, я подозреваю, что использование CommonJS и тому подобного со временем уменьшится. Но, тем не менее, инструменты, которые поддерживают CommonJS и тому подобное, вероятно, будут продолжать делать это в течение достаточно долгого времени, поэтому они вполне могут продолжать использоваться. Но - опять же, это мнение - стандартный синтаксис, вероятно, будущее, если не настоящее. </opinion> - person T.J. Crowder; 26.11.2019
comment
Спасибо!!! Подводя итог, если бы я намеревался изучить лучшие практики для последней веб-разработки (ноябрь 2019 г.), я бы использовал импорт модулей ES6 для vanilla JS и использовал систему модулей узлов в Node.js? Если вы хотите, вы можете помочь прояснить мой словарный запас... система модулей узлов звучит странно - person ; 26.11.2019
comment
@ММ. - Теперь вы можете использовать ESM (так стала известна модульная система JavaScript, ECMAScript Modules) в Node.js. также. :-) В v13.something это не помечено. В v12 это было за флагом. Таким образом, вам нужно изучить только один набор семантики, если только вы не закончите работу над проектом, который использует CommonJS или AMD по устаревшим причинам (или просто по соображениям предпочтения). - person T.J. Crowder; 26.11.2019