Junior
Šta su ES moduli?
sobes.tech АИ
Одговор од АИ
ES-модули су стандардни начини за организовање кода у JavaScript-у, засновани на синтакси import и export.
Основне карактеристике:
- Стандард: Дел спецификације ECMAScript, подржан од стране већине савремених прегледача и окружења за извршавање као што је Node.js.
- Јасно управљање зависностима: Модуле јасно наводе које вредности експортују и које увозе из других модулa.
- Статичка структура: Зависности модулa се одређују у фази компилације (или парсирања), а не током извршавања. Ово омогућава алатима за статичку анализу, као што су бандлери (Webpack, Rollup), да оптимизују код.
- Изолација: Свакa променљива, функција или класа, објављена унутар модула, по подразумевану су локалне за тај модул. Да би биле доступне изван, морају јасно бити експортиране.
- Подршка за асинхроност: Модуле могу да се учитавају асинхроно у прегледачима, без блокирања учитавања странице.
Синтакса:
- Експорт:
// app.js export const myVariable = 123; // Именовани експорти export function myFunction() { // Именовани експорти console.log('Hello from module!'); } export default class MyClass { // Експорт по подразумеваној вредности constructor() { console.log('MyClass instance created'); } } - Импорт:
// main.js import { myVariable, myFunction } from './app.js'; // Именовани увози import MyDefaultClass from './app.js'; // Увоз по подразумеваној вредности console.log(myVariable); // 123 myFunction(); // Hello from module! const instance = new MyDefaultClass(); // MyClass instance created
Поређење са CommonJS (Node.js):
| Особина | ES-модули | CommonJS |
|---|---|---|
| Синтакса | import, export |
require, module.exports, exports |
| Зависности | Статичне (одређују се пре извршавања) | Динамичке (одређују се током извршавања) |
| Учитавање | Асинхроно (у прегледачима) | Синхроно |
this у корену |
undefined |
module.exports |
| Подршка | Браузери, Node.js (по подразумевано од верзије 13.2, преко флага --experimental-modules пре тога) | Углавном Node.js |
Користећи ES-модуле се препоручује као савремени приступ за фронтенд развој због њихове стандардизације, боље подршке алатима и могућности статичке анализе.