ES Modules-ը բրաուզերում
ES Modules-ը բրաուզերում (type="module", defer, nomodule)
Երբ ES Modules-ը նոր մտավ JavaScript աշխարհ, այն նաև ստացավ բնական աջակցություն բրաուզերների կողմից։ Դրանով բրաուզերում կարողացանք օգտագործել import
և export
առանց որևէ Bundler-ի (օրինակ՝ Webpack)։ Այս հոդվածում կտեսնենք՝ ինչպես է աշխատում ES Modules-ը բրաուզերում և ինչ դեր ունեն type="module"
, defer
և nomodule
ատրիբուտները։
Սովորական <script>
թեգը բրաուզերում կատարվում է անմիջապես, բայց եթե ցանկանում ես օգտագործել import
/export
բառերը, ապա պետք է script
թեգին ավելացնել type="module"
:
<script type="module" src="main.js"></script>
Կարևոր կետեր՝
this
համարվում է undefined
, ոչ թե window
:import
և export
:Սովորական <script>
թեգերում երբ օգտագործում ենք defer
, նշանակում է՝ սքրիպտը պետք է բեռնվի ֆոնի վրա և կատարվի միայն այն բանից հետո, երբ ամբողջ HTML բեռնվի։
Բայց մոդուլային սքրիպտների դեպքում type="module"
արդեն դեֆոլտով աշխատում է defer
նման ձևով։ Այսինքն՝ պարտադիր չէ առանձին գրել defer
ատրիբուտը՝ այն արդեն կիրառվում է։
<script type="module" src="main.js"></script>
Այս սքրիպտը ավտոմատ կսպասի մինչև HTML-ի ամբողջական բեռնումը, հետո կկատարվի։
Որպեսզի հին բրաուզերներում (որոնք չեն աջակցում ES Modules) fallback տանք սովորական JavaScript ֆայլ, կարող ենք օգտագործել nomodule
ատրիբուտը։
<script type="module" src="modern.js"></script>
<script nomodule src="legacy.js"></script>
Ինչ է կատարվում այստեղ․
type="module"
, կբեռնվի modern.js
։type="module"
, կբեռնվի legacy.js
։Կարևոր․ nomodule
-ը աշխատում է միայն ոչ մոդուլային բրաուզերներում։ Նոր բրաուզերները ամբողջությամբ անտեսում են nomodule
-ով սքրիպտները։
Եկե՛ք վերցնենք պարզ օրինակ, թե ինչպես կարող ենք մի ֆայլից արտահանել և ներմուծել ֆունկցիա բրաուզերում։
// greet.js
export function greet(name) {
console.log(`Բարև, ${name}!`);
}
// main.js
import { greet } from './greet.js';
greet('Անի');
<!-- index.html -->
<script type="module" src="main.js"></script>
Երբ բրաուզերը կբեռնի main.js
-ը, այն կգտնի greet.js
-ը և ճիշտ կարգով կկատարի ֆունկցիաները։
ES Modules-ը բրաուզերում թույլ է տալիս մեզ ստեղծել ավելի կազմակերպված, մոդուլային և ժամանակակից վեբ հավելվածներ։ Պետք է հիշել օգտագործել type="module"
մոդուլային սքրիպտների համար և nomodule
՝ հին բրաուզերների աջակցման նպատակով։ Սա այսօր դարձել է Frontend ծրագրավորման հիմնական ստանդարտը։