ÙÙ Ø§ÙØ·Ùر Ú©Ù Ø¨Ø±ÙØ§Ù ٠٠ا بزرگتر Ù ÛâØ´ÙØ¯Ø Ø³Ø¹Û Ù ÛâÚ©ÙÛ٠آ٠را Ø¨Ù ÙØ§ÛÙ ÙØ§Û Ù ØªÙØ§ÙØªÛ Ø¨Ù ÙØ§Ù ٠اÚÙÙ (modules) ØªÙØ³ÛÙ Ø¨ÙØ¯Û Ú©ÙÛÙ . ÛÚ© ٠اÚÙ٠٠٠ک٠است شا٠٠ÛÚ© Ú©ÙØ§Ø³ ÛØ§ کتابخاÙÙ Ø§Û Ø§Ø² ØªÙØ§Ø¨Ø¹ Ø¨Ø±Ø§Û ÛÚ© ÙØ¯Ù خاص باشد.
تا ٠دت ÙØ§Ø Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت Ø³Ø§Ø®ØªØ§Ø±Û Ø¨Ø±Ø§Û ÙÙØ´ØªÙ ٠اÚÙÙ ÙØ§ در Ø³Ø·Ø Ø²Ø¨Ø§Ù ÙØ¯Ø§Ø´Øª.
ا٠ا با گذر ز٠ا٠اسکرÛپت ÙØ§ Ø¨ÛØ´ØªØ± Ù Ø¨ÛØ´ØªØ± Ù¾ÛÚÛÙ¾Ø¯Ù Ø´Ø¯ÙØ¯Øâ در ÙØªÛØ¬Ù Ø¨Ø±ÙØ§Ù Ù ÙÙÛØ³Ø§Ù Ø±ÙØ´ ÙØ§Û Ù ØªÙØ§ÙØªÛ Ø¨Ø±Ø§Û Ø³Ø§Ø²Ù Ø§ÙØ¯ÙÛ Ù Ù Ø§ÚÙÙ Ø¨ÙØ¯Û کرد٠کد Ø®ÙØ¯ ٠کتابخاÙÙ ÙØ§Û خاص Ø¨Ø±Ø§Û Ø¨Ø§Ø±Ú¯Ø°Ø§Ø±Û Ù Ø§ÚÙÙ ÙØ§ در ز٠ا٠ÙÛØ§Ø² ابداع Ú©Ø±Ø¯ÙØ¯.
اÛÙ ÙØ§ ÙÙ ÙÙÙ ÙØ§ÛÛ Ø§Ø² اÛ٠کتابخاÙÙ ÙØ§ است (اÛ٠بخش ØµØ±ÙØ§ Ø¬ÙØ¨Ù ØªØ§Ø±ÛØ®Û دارد):
- AMD â ÛÚ©Û Ø§Ø² ÙØ¯ÛÙ Û ØªØ±ÛÙ Ø³ÛØ³ØªÙ ÙØ§Û ٠اÚÙÙ Ø¨ÙØ¯ÛØ Ú©Ù Ø§ÙÙÛ٠بار ØªÙØ³Ø· کتابخاÙÙ require.js Ù¾ÛØ§Ø¯Ù Ø³Ø§Ø²Û Ø´Ø¯.
- CommonJS â Ø³Ûست٠٠اÚÙÙ Ø¨ÙØ¯Û Ú©Ù Ø¨Ø±Ø§Û Ø³Ø±ÙØ±Ùا Node.js درست شد.
- UMD â ÛÚ© Ø³ÛØ³ØªÙ ٠اÚÙÙ Ø¨ÙØ¯Û ک٠ب٠عÙÙØ§Ù ÛÚ© Ø³ÛØ³ØªÙ جا٠ع Ø´ÙØ§Ø®ØªÙ شد٠٠با ÙØ±Ø¯Ù Ø³ÛØ³ØªÙ AMD Ù CommonJS ÙÙ Ø®ÙØ§ÙÛ Ø¯Ø§Ø±Ø¯.
Ù٠٠اÛÙ Ø³ÛØ³ØªÙ ÙØ§ ک٠ک٠تبدÛÙ Ø¨Ù Ø¨Ø®Ø´Û Ø§Ø² ØªØ§Ø±ÛØ® Ø´Ø¯ÙØ¯ ا٠ا ÙÙÙØ² ÙÙ Ù ÛâØªÙØ§Ù Ø¢Ù ÙØ§ را در اسکرÛپت ÙØ§Û ÙØ¯ÛÙ Û Ù Ø´Ø§ÙØ¯Ù کرد.
Ø³ÛØ³ØªÙ ٠اÚÙÙ Ø¨ÙØ¯Û در Ø³Ø·Ø Ø²Ø¨Ø§Ù Ø¯Ø± Ø§Ø³ØªØ§ÙØ¯Ø§Ø± سا٠2015 Ù Ø´Ø§ÙØ¯Ù Ø´Ø¯Ø Ø§Ø² آ٠ز٠ا٠ک٠âÚ©Ù Ù¾ÛØ´Ø±Ùت کرد٠٠در ØØ§Ù ØØ§Ø¶Ø± ØªÙØ³Ø· ØªÙ Ø§Ù Û Ù Ø±ÙØ±Ú¯Ø±ÙØ§Û Ø§ØµÙÛ Ù Nodejs Ù¾Ø´ØªÛØ¨Ø§ÙÛ Ù ÛâØ´ÙØ¯. در ÙØªÛج٠از اÛ٠ب٠بعد Ø¯Ø±Ø¨Ø§Ø±Ù Ø³ÛØ³ØªÙ ٠اÚÙÙ Ø¨ÙØ¯Û ٠در٠در Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت ØµØØ¨Øª Ù ÛâÚ©ÙÛÙ .
٠اÚÙÙ ÚÛØ³ØªØ
٠اÚÙ٠در اص٠ÛÚ© ÙØ§Û٠است. ÙØ± اسکرÛپت ÛÚ© ٠اÚÙ٠است. ب٠ÙÙ Û٠سادگÛ.
Ù
اÚÙÙ ÙØ§ Ù
ÛâØªÙØ§ÙÙØ¯ ÛکدÛگر را ÙÙØ¯ Ú©Ø±Ø¯Ù Ù Ø¨Ù ÙØ³ÛÙÙ ØªÙØ§Ø¨Ø¹ Ø®Ø§ØµÛ Ù
اÙÙØ¯ export Ù import بÛÙ ÙÙ
عÙ
ÙÚ©Ø±Ø¯Û Ø±Ø§ رد ٠بد٠کÙÙØ¯Ø Ø¨Ù ÙØ³ÛÙ٠صدا Ø²Ø¯Ù ØªØ§Ø¨Ø¹Û Ø§Ø² ÛÚ© Ù
اÚÙ٠در ÛÚ© Ù
اÚÙ٠دÛگر:
- Ú©ÙÙ
Ù Ú©ÙÛØ¯Û
exportÙ ØªØºÛØ±Ùا Ù ØªÙØ§Ø¨Ø¹Û را ٠شخص Ù ÛâÚ©ÙØ¯ Ú©Ù Ø¨Ø§ÛØ¯ Ø¨ÛØ±Ù٠از اÛ٠٠اÚÙÙ ÙØ§Ø¨Ù Ø¯Ø³ØªØ±Ø³Û Ø¨Ø§Ø´ÙØ¯. - Ú©ÙÙ
Ù Ú©ÙÛØ¯Û
importاجاز٠اÛÙ Ù¾ÙØ±Øª Ú©Ø±Ø¯Ù Ù Ø§Ø³ØªÙØ§Ø¯Ù از ØªÙØ§ÙاÛÛ ÙØ§Û ٠اÚÙÙ ÙØ§Û دÛگر را Ù ÛâØ¯ÙØ¯.
Ø¨Ø±Ø§Û Ù
Ø«Ø§ÙØ Ù
ا ÛÚ© ÙØ§Û٠با ÙØ§Ù
sayHi.js دارÛÙ
Ú©Ù ÛÚ© تابع را Ø§Ú©Ø³Ù¾ÙØ±Øª Ù
ÛâÚ©ÙØ¯:
// ð sayHi.js
export function sayHi(user) {
alert(`Hello, ${user}!`);
}
â¦Ø¯Ø± اÛÙ ØØ§Ùت ÛÚ© ÙØ§Û٠دÛگر Ù ÛâØªÙØ§Ùد اÛ٠٠اÚÙ٠را اÛÙ Ù¾ÙØ±Øª کرد٠٠از اÛ٠تابع Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙØ¯:
// ð main.js
import {sayHi} from './sayHi.js';
alert(sayHi); // تابع...
sayHi('John'); // Hello, John!
تابع import Ù
اÚÙ٠را بر اساس Ù
Ø³ÛØ± ./sayHi.js ک٠بر Ù
Ø¨ÙØ§Û ÙØ§ÛÙ ÙØ¹ÙÛ Ø§Ø³ØªØ Ø¨Ø§Ø±Ú¯Ø°Ø§Ø±Û Ú©Ø±Ø¯ÙØ سپس تابع Ø§Ú©Ø³Ù¾ÙØ±Øª شد٠sayHi را ب٠Ù
ØªØºÛØ± Ù
ÙØ§Ø³Ø¨ اختصاص Ù
ÛâØ¯ÙØ¯.
Ø¨Ú¯Ø°Ø§Ø±ÛØ¯ تا اÛ٠٠ثا٠را در Ù Ø±ÙØ±Ú¯Ø± Ø§Ù ØªØØ§Ù Ú©ÙÛÙ .
از آ٠جاÛÛ Ú©Ù Ù
اÚÙÙ ÙØ§ از Ú©ÙÛØ¯ÙاÚÙ ÙØ§ ٠اÙ
Ú©Ø§ÙØ§Øª Ø®Ø§ØµÛ Ø§Ø³ØªÙØ§Ø¯Ù Ù
ÛâÚ©ÙÙØ¯Ø Ù
ا Ø¨Ø§ÛØ¯ Ø¨Ù ÙØ³ÛÙÙ Ù
شخص٠<script type="module"> ب٠Ù
Ø±ÙØ±Ú¯Ø± بگÙÛÛÙ
ک٠اÛ٠اسکرÛپت ÛÚ© Ù
اÚÙ٠است.
٠اÙÙØ¯ Ù Ø«Ø§Ù Ø²ÛØ±:
export function sayHi(user) {
return `Hello, ${user}!`;
}<!doctype html>
<script type="module">
import {sayHi} from './say.js';
document.body.innerHTML = sayHi('John');
</script>Ù Ø±ÙØ±Ú¯Ø± Ø¨Ù ØµÙØ±Øª Ø®ÙØ¯Ú©Ø§Ø± ٠اÚÙ٠اÛÙ Ù¾ÙØ±Øª شد٠(٠٠اÚÙÙ ÙØ§ÛÛ Ú©Ù Ø§Û٠٠اÚÙÙ Ø¨Ù Ø¢Ù ÙØ§Ø¨Ø³ØªÙ است) را Ø¯Ø±ÛØ§Ùت Ù Ø¨Ø±Ø±Ø³Û Ù ÛÚ©ÙØ¯Ø سپس اسکرÛپت را اجرا Ù ÛâÚ©ÙØ¯.
اگر Ø³Ø¹Û Ú©ÙÛØ¯ Ú©Ù ÛÚ© ØµÙØÙ ÙØ¨ را Ø¨Ù ØµÙØ±Øª Ù
ØÙÛØ از طرÛÙ Ù¾Ø±ÙØªÚ©Ù file:// باز Ú©ÙÛØ¯Ø ØªÙØ§Ø¨Ø¹ import/export کار ÙÙ
ÛâÚ©ÙÙØ¯. Ø¨Ø±Ø§Û Ø§Û٠کار از ÛÚ© ÙØ¨ Ø³Ø±ÙØ± ÙÙÚ©Ø§Ù Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯Ø Ù
اÙÙØ¯ static-server ÛØ§ از ÙØ§Ø¨ÙÛØª âØ³Ø±ÙØ± Ø²ÙØ¯Ùâ ÙÛØ±Ø§Ûشگر Ù
ØªÙ Ø®ÙØ¯ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯Ø Ù
اÙÙØ¯ VS Code Live Server Extension Ø¨Ø±Ø§Û ØªØ³Øª Ù
اÚÙÙ Ø®ÙØ¯.
Ø§Ù Ú©Ø§ÙØ§Øª اصÙÛ Ù Ø§ÚÙÙ ÙØ§
ÚÙ Ù ÙØ§Ø±Ø¯Û در ٠اÚÙÙ ÙØ§ با اسکرÛپت ÙØ§Û â٠ع٠ÙÙÛâ Ù ØªÙØ§Ùت استØ
Ø¨Ø¹Ø¶Û Ø§Ø² اÛÙ Ø§Ù Ú©Ø§ÙØ§ØªØ در ÙØ± د٠٠ØÛØ· Ù Ø±ÙØ±Ú¯Ø± Ù Ø³Ø±ÙØ± ٠عتبر ÙØ³ØªÙد.
ØØ§Ùت âuse strictâ Ø¨Ù ØµÙØ±Øª Ù¾ÛØ´ ÙØ±Ø¶ ÙØ¹Ø§Ù است.
در Ù
اÚÙÙ ÙØ§ ØØ§Ùت use strict Ø¨Ù ØµÙØ±Øª Ù¾ÛØ´ ÙØ±Ø¶ ÙØ¹Ø§Ù Ø§Ø³ØªØ Ø¨Ø±Ø§Û Ù
ثا٠اختصاص داد٠Ù
ÙØ¯Ø§Ø± ب٠ÛÚ© Ù
ØªØºÛØ± ک٠از ÙØ¨Ù تعرÛÙ ÙØ´Ø¯Ù است باعث Ø¨Ù ÙØ¬Ùد Ø¢Ù
د٠خطا Ù
ÛâØ´ÙØ¯.
<script type="module">
a = 5; // خطا
</script>
Ù ØØ¯ÙدÙ/اسکÙÙ¾ Ø³Ø·Ø Ù Ø§ÚÙÙ
ÙØ± ٠اÚÙ٠اسکÙÙ¾ Ø³Ø·Ø Ø¨Ø§ÙØ§Û Ø®ÙØ¯ را دارد. ب٠عبارت دÛÚ¯Ø±Ø ØªÙØ§Ø¨Ø¹ Ù Ù ØªØºÛØ± ÙØ§Û Ø³Ø·Ø Ø¨Ø§ÙØ§ در ÛÚ© ٠اÚÙÙ ÙØ§Ø¨Ù Ø¯Ø³ØªØ±Ø³Û ØªÙØ³Ø· اسکرÛپت ÙØ§Û دÛگر ÙÛØ³ØªÙد.
در Ù
ثا٠پاÛÛÙØ د٠اسکرÛپت اÛÙ
Ù¾ÙØ±Øª Ø´Ø¯Ù Ø§ÙØ¯Ø Ù hello.js Ø³Ø¹Û Ø¯Ø± Ø§Ø³ØªÙØ§Ø¯Ù از Ù
ØªØºÛØ± user ک٠در ÙØ§ÛÙ user.js تعرÛÙ Ø´Ø¯Ù Ø§Ø³ØªØ Ú©Ø±Ø¯Ù Ù Ø´Ú©Ø³Øª Ø®ÙØ±Ø¯Ù است.
alert(user); // no such variable (each module has independent variables)let user = "John";<!doctype html>
<script type="module" src="user.js"></script>
<script type="module" src="hello.js"></script>در Ù
ÙÙØ¹ کار با Ù
اÚÙÙ ÙØ§ Ø§ÙØªØ¸Ø§Ø± Ù
ÛâØ±ÙØ¯ Ú©Ù ÙØ± ÚÛØ²Û Ú©Ù ÙØ±Ø§Ø± است از Ø¨ÛØ±ÙÙ ÙØ§Ø¨Ù Ø¯Ø³ØªØ±Ø³Û Ø¨Ø§Ø´Ø¯ export Ù ÙØ± ÚÛØ²Û Ú©Ù Ø¢Ù ÙØ§ در اسکرÛپت Ø®ÙØ¯ ÙÛØ§Ø² Ø¯Ø§Ø±ÙØ¯ import Ø´ÙØ¯.
- Ù
اÚÙÙ
user.jsØ¨Ø§ÛØ¯ Ù ØªØºÛØ±userرا Ø§Ú©Ø³Ù¾ÙØ±Øª Ú©ÙØ¯. - Ù
اÚÙÙ
hello.jsØ¨Ø§ÛØ¯ آ٠را از ٠اÚÙÙuser.jsاÛÙ Ù¾ÙØ±Øª Ú©ÙØ¯.
Ø¨Ù Ø¹Ø¨Ø§Ø±ØªÛ Ø¯ÛÚ¯Ø±Ø Ø¯Ø± ٠اÚÙÙâÙØ§ ٠ا از import/export Ø¨Ù Ø¬Ø§Û Ù ØªØºÛØ±ÙØ§Û Ø³Ø±Ø§Ø³Ø±Û (global) Ø§Ø³ØªÙØ§Ø¯Ù Ù ÛâÚ©ÙÛÙ .
اÛÙ ÙÙ ÙÙ٠درست اÛ٠کد است:
import {user} from './user.js';
document.body.innerHTML = user; // Johnexport let user = "John";<!doctype html>
<script type="module" src="hello.js"></script>در Ù
Ø±ÙØ±Ú¯Ø±Ø ÛÚ© اسکÙÙ¾ Ø³Ø·Ø Ø¨Ø§ÙØ§ Û Ù
ستÙÙ ÙÙ
Ø¨Ø±Ø§Û ÙØ± تگ <script type="module"> ÙØ¬Ùد دارد:
اÛÙØ¬Ø§ د٠اسکرÛپت در ÛÚ© ØµÙØÙ ÙØ¬Ùد Ø¯Ø§Ø±Ø¯Ø ÙØ± د٠از ÙÙØ¹ type="module" ÙØ³ØªÙد. Ø¢ÙâÙØ§ Ù
ØªØºÛØ±ÙØ§Û Ø³Ø·Ø Ø¨Ø§ÙØ§(top-level) ÙÙ
را ÙÙ
ÛâØ¨ÛÙÙØ¯:
<script type="module">
// Ù
ØªØºÛØ± تÙÙØ§ در اسکرÛپت Ù
اÚÙÙ ÙØ§Ø¨Ù Ø¯Ø³ØªØ±Ø³Û Ø§Ø³Øª.
let user = "John";
</script>
<script type="module">
alert(user); // Error: user is not defined
</script>
در Ù
Ø±ÙØ±Ú¯Ø±Ø Ù
ا Ù
ÛâØªÙØ§ÙÛÙ
ÛÚ© Ù
ØªØºÛØ± window-level Ú¯ÙÙØ¨Ø§Ù بسازÛÙ
با اختصاص Ø¯Ø§Ø¯Ù Ø¢Ù ØµØ±ÛØØ§Ù Ø¨Ù ÛÚ© Ù
ÙØ¯Ø§Ø± windowØ Ø¨Ø±Ø§Û Ù
ثاÙ: windows.user = "John".
پس ÙÙ
٠اسکرÛپتâÙØ§ آ٠را Ø®ÙØ§ÙÙØ¯ Ø¯ÛØ¯Ø ÙÙ
با type="module" Ù ÙÙ
بدÙ٠آÙ.
گرÚ٠ب٠اÛÙ Ø±ÙØ´ Ø§Ø´Ø§Ø±Ù Ø´Ø¯Ø ÙÙÛ Ø§Ø³ØªÙØ§Ø¯Ù از ÚÙÛÙ Ù ØªØºÛØ±ÙØ§Û Ú¯ÙÙØ¨Ø§ÙÛ ØªÙØµÛÙâØ´Ø¯Ù ÙÛØ³Øª. ÙØ·ÙØ§Ù ØªÙØ§Ø´ Ú©ÙÛØ¯ ک٠از Ø¢Ù Ø§Ø³ØªÙØ§Ø¯Ù ÙÚ©ÙÛØ¯.
کد ÛÚ© ٠اÚÙ٠تÙÙØ§ اÙÙÛ٠بار ک٠ب٠اسکرÛپت ٠ا اÛÙ Ù¾ÙØ±Øª Ø´Ø¯ÙØ Ø§Ø±Ø²ÛØ§Ø¨Û Ù ÛâØ´ÙØ¯.
اگر ÛÚ© ٠اÚÙ٠٠شاب٠در ÚÙØ¯Û٠٠کا٠٠ختÙ٠اÛÙ Ù¾ÙØ±Øª Ø´ÙØ¯Ø کد آ٠تÙÙØ§ در ٠رتب٠اÙ٠اجرا Ù ÛâØ´ÙØ¯Ø بعد از Ø¢Ù ÙØªÛØ¬Ù Ø¨Ù ØªÙ Ø§Ù Û Ù Ú©Ø§Ù ÙØ§Û دÛگر Ø§Ú©Ø³Ù¾ÙØ±Øª Ù ÛâØ´ÙØ¯.
اÛÙ Ø±ÙØªØ§Ø± Ø¹ÙØ§Ùب Ù ÙÙ Û Ø¯Ø§Ø±Ø¯Ø Ú©Ù Ø¨Ø§ÛØ¯ از Ø¢ÙâÙØ§ آگا٠باشÛÙ .
Ø¨Ú¯Ø°Ø§Ø±ÛØ¯ تا Ø¢Ù ÙØ§ را در Ù Ø«Ø§Ù Ø¨Ø±Ø±Ø³Û Ú©ÙÛÙ :
اÙ٠از ÙÙ ÙØ اگر Ø§Ø¬Ø±Ø§Û Ú©Ø¯ ٠ا باعث Ø§ØªÙØ§Ù Ø§ÙØªØ§Ø¯Ù ÛÚ© Ø³Ø±Û Ø§ØªÙØ§Ùات Ø´ÙØ¯Ø ٠اÙÙØ¯ ÙØ´Ø§Ù داد٠ÛÚ© Ù¾ÛØºØ§Ù Ø Ø¯Ø± اÛÙ ØµÙØ±Øª ÚÙØ¯Û٠بار اÛÙ Ù¾ÙØ±Øª کرد٠کد تÙÙØ§ باعث ÛÚ© بار اجرا شد٠اÛÙ Ù¾ÛØºØ§Ù Ù ÛâØ´ÙØ¯ â ØªÙÙØ§ بار اÙÙ:
// ð alert.js
alert("Module is evaluated!");
// اÛÙ
Ù¾ÙØ±Øª کرد٠ÛÚ© Ù
اÚÙÙ Ù
شاب٠در Ø¯Ù ÙØ§ÛÙ Ù
ØªÙØ§Ùت
// ð 1.js
import `./alert.js`; // Ù
اÚÙÙ Ø§Ø±Ø²ÛØ§Ø¨Û ٠اجرا Ù
ÛâØ´ÙØ¯.
// ð 2.js
import `./alert.js`; // (Ù¾ÛØºØ§Ù
Û ÙÙ
Ø§ÛØ´ داد٠ÙÙ
ÛâØ´ÙØ¯.)
اÛÙ Ù¾ÙØ±Øª دÙÙ ÚÛØ²Û را ÙØ´Ø§Ù ÙÙ ÛâØ¯ÙØ¯Ø ÚÙ٠٠اÚÙÙ Ù¾ÛØ´ از اÛÙ Ø§Ø±Ø²ÛØ§Ø¨Û شد٠است.
ÛÚ© ÙØ§ÙÙÙ ÙØ¬Ùد دارد: Ù
اÚÙÙâÙØ§Û top-level Ø¨Ø§ÛØ¯ Ø¨Ø±Ø§Û Ù
ÙØ¯Ø§Ø±Ø¯ÙÛ Ø§ÙÙÛÙ Ø§Ø³ØªÙØ§Ø¯Ù Ø´ÙÙØ¯Ø Ø³Ø§Ø®ØªÙ Ø³Ø§Ø®ØªØ§Ø±ÙØ§Û دادÙâØ§Û Ø¯Ø§Ø®ÙÛ. اگر Ù
ا ÙÛØ§Ø² ب٠ساخت ÚÛØ²Û دارÛÙ
Ú©Ù ÚÙØ¯Û٠بار آ٠را ÙØ±Ø§Ø®ÙاÙÛ Ú©ÙÛÙ
â Ø¨Ø§Ûد آ٠را ب٠عÙÙØ§Ù ÛÚ© تابع Ø§Ú©Ø³Ù¾ÙØ±Øª Ú©ÙÛÙ
Ø Ù
اÙÙØ¯ Ú©Ø§Ø±Û Ú©Ù Ø¨Ø§ sayHi در Ø¨Ø§ÙØ§ کردÛÙ
.
Ø®Ø¨Ø ØØ§Ù با ÙÙ ÛÚ© Ù Ø«Ø§Ù Ù¾ÛØ´Ø±Ùت٠تر را Ù ÛâØ¨ÛÙÛÙ .
ÙØ±Ø¶ Ù ÛâÚ©ÙÛÙ Ú©Ù ÛÚ© ٠اÚÙÙ ÛÚ© آبجکت را Ø§Ú©Ø³Ù¾ÙØ±Øª Ù ÛâÚ©ÙØ¯:
// ð admin.js
export let admin = {
name: "John"
};
اگر اÛÙ Ù
اÚÙÙ ÚÙØ¯ Ù
رتب٠در ÚÙØ¯ ÙØ§Û٠اÛÙ
Ù¾ÙØ±Øª Ø´ÙØ¯Ø Ù
اÚÙ٠تÙÙØ§ در Ù
رتب٠اÙÙ Ø§Ø±Ø²ÛØ§Ø¨Û Ù
ÛâØ´ÙØ¯Ø اÛ٠ب٠اÛÙ Ù
Ø¹ÙØ§Ø³Øª ک٠آبجکت admin ÛÚ© بار درست Ø´Ø¯ÙØ ٠سپس Ø¨Ù Ø¬Ø§ÙØ§Û دÛگر اÛÙ
Ù¾ÙØ±Øª Ù
ÛâØ´ÙØ¯.
ÙÙ
Ù Ù
Ú©Ø§Ù ÙØ§ÛÛ Ú©Ù Ù
اÚÙ٠اÛÙ
Ù¾ÙØ±Øª Ø´Ø¯Ù Ø§Ø³ØªØ Ø¯ÙÛÙØ§ ÛÚ© ٠تÙÙØ§ ÛÚ© آبجکت admin Ø¯Ø±ÛØ§Ùت Ù
ÛâÚ©ÙÙØ¯:
// ð 1.js
import {admin} from './admin.js';
admin.name = "Pete";
// ð 2.js
import {admin} from './admin.js';
alert(admin.name); // Pete
// ÛÚ© آبجکت Ù
شاب٠را اÛÙ
Ù¾ÙØ±Øª Ù
ÛâÚ©ÙÙØ¯ ( 1.js , 2.js ) ÙØ±Ø¯Ù ÙØ§ÛÙ
// ÙÙ
ÙØ§Ø¨Ù Ù
Ø´Ø§ÙØ¯Ù است (2.js) Ø§ÛØ¬Ø§Ø¯ Ø´ÙØ¯ در ÙØ§Û٠دÙÙ
(1.js) ÙØ± ØªØºÛØ±Û ک٠در ÙØ§Û٠اÙÙ
ÙÙ
Ø§ÙØ·Ùر Ú©Ù Ù
ÛâØ¨ÛÙÛØ¯Ø ÙÙØªÛ 1.js Ù
ÙØ¯Ø§Ø± name را در admin اÛÙ
Ù¾ÙØ±Øª شد٠تغÛÛØ± Ù
ÛâØ¯ÙØ¯Ø سپس 2.js Ù
ÛâØªÙØ§Ùد Ù
ÙØ¯Ø§Ø± Ø¬Ø¯ÛØ¯ admin.name را ببÛÙØ¯.
اÛ٠دÙÛÙØ§Ù ب٠خاطر اÛ٠است Ú©Ù Ù
اÚÙÙ ÙÙØ· ÛÚ© بار اجرا شد٠است. Ø§Ú©Ø³Ù¾ÙØ±ØªâÙØ§ تÙÙÛØ¯Ø´Ø¯ÙâØ§ÙØ¯Ø ٠سپس بÛ٠اÛÙ
Ù¾ÙØ±ØªâÙØ§ ب٠اشتراک گذاشت٠شدÙâØ§ÙØ¯Ø پس اگر ÚÛØ²Û Ø´ÛØ¡ admin را تغÛÛØ± Ø¯ÙØ¯Ø بÙÛ٠اÛÙ
Ù¾ÙØ±ØªâÙØ§ ÙÙ
آ٠را Ù
ÛâØ¨ÛÙÙØ¯.
ÚÙÛÙ Ø±ÙØªØ§Ø±Û در ÙØ§Ùع Ø®ÛÙÛ Ù ÙÛØ¯ Ø§Ø³ØªØ ÚÙ٠ب٠٠ا اجاز٠٠ÛâØ¯ÙØ¯ تا ٠اÚÙÙâÙØ§ را کاÙÙÛÚ¯ Ú©ÙÛÙ .
Ø¨Ù Ø¹Ø¨Ø§Ø±ØªÛ Ø¯ÛÚ¯Ø±Ø ÛÚ© ٠اÚÙÙ Ù ÛâØªÙØ§Ùد ع٠ÙÚ©Ø±Ø¯Û Ø¹Ù ÙÙ Û Ø§Ø±Ø§Ø¦ÙâØ¯ÙØ¯ Ú©Ù ÙÛØ§Ø² ب٠راÙâØ§ÙØ¯Ø§Ø²Û دارد. Ø¨Ø±Ø§Û Ù Ø«Ø§Ù Ø§ØØ±Ø§Ø² ÙÙÛØª ÙÛØ§Ø²Ù ÙØ¯ ٠دارک است. پس Ù ÛâØªÙØ§Ùد ÛÚ© Ø´Û configuration Ø§Ú©Ø³Ù¾ÙØ±Øª Ú©ÙØ¯ Ù Ø§ÙØªØ¸Ø§Ø± داشت٠باشد تا کد Ø¨ÛØ±ÙÙÛØ آ٠را Ù ÙØ¯Ø§Ø±Ø¯ÙÛ Ú©ÙØ¯.
اÛÙØ¬Ø§ اÙÚ¯ÙÛ Ú©ÙØ§Ø³ÛÚ© را Ù ÛâØ¨ÛÙÛØ¯:
- ÛÚ© ٠اÚÙÙ Ù ÙØ§Ø¯Ûر ÙØ§Ø¨Ù کاÙÙÛÚ¯âØ´Ø¯Ù Ø±Ø§ Ø§Ú©Ø³Ù¾ÙØ±Øª Ù ÛâÚ©ÙØ¯Ø Ù Ø«ÙØ§Ù: ÛÚ© Ø´Û ÙØ§Ø¨Ù کاÙÙÛÚ¯
- در اÛÙ Ù¾ÙØ±Øª اÙÙØ آ٠را Ù ÙØ¯Ø§Ø±Ø¯ÙÛ Ù ÛâÚ©ÙÛÙ Ø Ø¯Ø± Ù ÙØ§Ø¯Ûر Ø¢Ù Ù ÛâÙÙÛØ³ÛÙ . Ø¨Ø±ÙØ§Ù Ù top-level ٠ا آ٠را Ø§ÙØ¬Ø§Ù Ù ÛâØ¯ÙØ¯.
- اÛÙ Ù¾ÙØ±ØªâÙØ§Û Ø¢ØªÛ Ø§Ø² ٠اÚÙÙ Ø§Ø³ØªÙØ§Ø¯Ù Ù ÛâÚ©ÙÙØ¯.
Ø¨Ø±Ø§Û Ù
Ø«Ø§ÙØ Ù
اÚÙÙ admin.js Ù
Ù
ک٠است ÛÚ© Ø³Ø±Û ÙØ§Ø¨ÙÛØª ÙØ§ ب٠Ù
ا Ø¨Ø¯ÙØ¯Ø اÙ
ا از Ù
ا Ø§ÙØªØ¸Ø§Ø± دارد Ú©Ù ÛÚ© Ø³Ø±Û Ù
ØªØºÛØ± ÙØ§ از Ø¨ÛØ±Ù٠آبجکت admin ب٠آ٠پاس دÙÛÙ
:
// ð admin.js
export let config = { };
export function sayHi() {
alert(`Ready to serve, ${config.user}!`);
}
در اÛÙØ¬Ø§Ø admin.js Ø´Û config را Ø§Ø³Ú©Ù¾ÙØ±Øª Ù
ÛâÚ©ÙØ¯ (Ù
ÙØ¯Ø§Ø± اÙÙÛ٠خاÙÛØ ÙÙÛ Ù
Ù
Ú©Ù Ù
ÙØ§Ø¯Ûر Ù¾ÛØ´âÙØ±Ø¶ ÙÛØ² داشت٠باشد).
سپس در init.jsØ Ú©Ù Ø§ÙÙÛ٠اسکرÛپت Ø¨Ø±ÙØ§Ù
Ù Ù
ا Ù
ÛâØ¨Ø§Ø´Ø¯Ø Ù
ا config را از آ٠اÛÙ
Ù¾ÙØ±Øª Ù
ÛâÚ©ÙÛÙ
Ù config.user را Ù
ÙØ¯Ø§Ø±Ø¯ÙÛ Ù
ÛâÚ©ÙÛÙ
.
// ð init.js
import {config} from './admin.js';
config.user = "Pete";
â¦ØØ§ÙØ§ Ù
اÚÙÙ admin.js کاÙÙÛÚ¯âØ´Ø¯Ù Ø§Ø³Øª.
اÛÙ Ù¾ÙØ±ØªâÙØ§Û Ø¢ØªÛ Ù ÛâØªÙØ§ÙÙØ¯ آ٠را ÙØ±Ø§Ø®ÙاÙÛ Ú©ÙÙØ¯Ø Ù Ø¢Ù Ø¨Ù Ø¯Ø±Ø³ØªÛ Ø´Û user ÙØ¹ÙÛ Ø±Ø§ ÙÙ Ø§ÛØ´ Ù ÛâØ¯ÙØ¯:
// ð another.js
import {sayHi} from './admin.js';
sayHi(); // Ready to serve, Pete!
شئ import.meta
آبجکت âimport.meta Ø¯Ø§Ø±Ø§Û ÛÚ© Ø³Ø±Û Ø§Ø·ÙØ§Ø¹Ø§Øª دربار٠Ù
اÚÙÙ ÙØ¹ÙÛ Ø§Ø³Øª.
Ø§Ø·ÙØ§Ø¹Ø§Øª Ø¢Ù Ø¨Ø³ØªÚ¯Û Ø¨Ù Ù ØÛØ·Û Ú©Ù Ø¯Ø± آ٠اجرا Ù ÛâØ´ÙØ¯Ø دارد. در ٠رÙÚ¯Ø±Ø Ø´Ø§Ù Ù Ø¢Ø¯Ø±Ø³ اسکرÛپت Ø§Ø³ØªØ Ù ÛØ§ آدرس ØµÙØÙ ÙØ¹ÙÛ Ø§Ú¯Ø± Ø¯Ø§Ø®Ù ÙØ§ÛÙ HTML باشد:
<script type="module">
alert(import.meta.url); // آدرس اسکرÛپت
// Ø¨Ø±Ø§Û ÛÚ© اسکرÛپت اÛÙâÙØ§ÛÙ - آدرس ØµÙØÙ ÙØ¹ÙÛ HTML
</script>
در ÛÚ© ٠اÚÙÙØ âthisâ ØªØ¹Ø±ÛÙ ÙØ´Ø¯Ù است
اÛÙ ÛÚ© ÙØ§Ø¨ÙÛØª Ø¬Ø²Ø¦Û Ø§Ø³ØªØ Ø§Ù Ø§ Ø¨Ø±Ø§Û Ú©Ø§Ù Ù Ø¨ÙØ¯Ù Ø¢Ù ÙØ²Ø´ ب٠آ٠اشار٠٠ÛâÚ©ÙÛÙ .
در ÛÚ© Ù
اÚÙÙØ âthis Ø³Ø·Ø Ø¨Ø§ÙØ§ undefined است.
Ù
ÙØ§Ûس٠آ٠با اسکرÛپت ÙØ§Û ØºÛØ± Ù
اÚÙÙØ ک٠در Ø¢Ù ÙØ§ this آبجکت Ø¬ÙØ§ÙÛ Ø§Ø³Øª:
<script>
alert(this); // window
</script>
<script type="module">
alert(this); // undefined
</script>
ÙØ§Ø¨ÙÛØª ÙØ§Û Ù Ø®ØµÙØµ Ù ØÛØ· Ù Ø±ÙØ±Ú¯Ø±
اسکرÛپت ÙØ§ از ÙÙØ¹ ٠اÚÙÙ ÙØ³Ø¨Øª ب٠اÙÙØ§Ø¹ ٠ع٠ÙÙÛ Ø¢Ù ØªÙØ§Ùت ÙØ§ÛÛ Ù Ø®ØµÙØµ Ù ØÛØ· Ù Ø±ÙØ±Ú¯Ø± ÙÙ Ø¯Ø§Ø±ÙØ¯.
اگر اÛ٠اÙÙÛ٠بار است ک٠اÛÙ Ø¢Ù ÙØ²Ø´ را Ù ÛâØ®ÙØ§ÙÛØ¯Ø ÛØ§ از Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت در Ù Ø±ÙØ±Ú¯Ø± Ø§Ø³ØªÙØ§Ø¯Ù ÙÙ ÛâÚ©ÙÛØ¯Ø Ù ÛâØªÙØ§ÙÛØ¯ اÛ٠بخش را رد Ú©ÙÛØ¯.
اسکرÛپت ÙØ§Û ٠اÚÙÙÛ Ø¨Ù ØªØ¹ÙÛÙ Ø§ÙØªØ§Ø¯Ù Ø§ÙØ¯. (deferred)
اسکرÛپت ÙØ§ از ÙÙØ¹ Ù
اÚÙÙ ÙÙ
ÛØ´Ù ب٠تعÙÛÙ Ø§ÙØªØ§Ø¯Ù Ø§ÙØ¯Ø دÙÛÙØ§ Ù
اÙÙØ¯ Ø®ØµÙØµÛت defer (در ÙØµÙ Scripts: async, defer ØªÙØ¶ÛØ Ø¯Ø§Ø¯Ù Ø´Ø¯Ù Ø§Ø³Øª.)Ø Ø¨Ø±Ø§Û ÙØ± د٠ÙÙØ¹ Ø§Ú©Ø³ØªØ±ÙØ§Ù ٠اÛÙÙØ§ÛÙ.
ب٠عبارت دÛگر:
- داÙÙÙØ¯ اسکرÛپت ÙØ§Û از ÙÙØ¹ Ù
اÚÙÙ Ø®Ø§Ø±Ø¬Û (external) â
<script type="module" src="...">جÙÙÛ Ù¾Ø±Ø¯Ø§Ø²Ø´ HTML را ÙÙ ÛâÚ¯ÛØ±Ø¯ÙØ¯Ø Ø§Û٠اسکرÛپت ÙØ§ Ù ÙØ§Ø²Û با دÛگر Ù ÙØ§Ø¨Ø¹ Ø¨Ø§Ø±Ú¯ÛØ±Û Ù ÛâØ´ÙÙØ¯. - اسکرÛپت ÙØ§Û ٠اÚÙÙÛ ØªØ§ Ø¨Ø§Ø±Ú¯ÛØ±Û Ú©Ø§Ù Ù Ø§Ø³ÙØ§Ø¯ HTML صبر Ù ÛâÚ©ÙÙØ¯ (ØØªÛ با ÙØ¬Ùد اÛÙک٠اÛ٠اسکرÛپت ÙØ§ Ú©ÙÚÚ© Ø¨ÙØ¯Ù Ù Ø³Ø±ÛØ¹ تر از HTML Ø¨Ø§Ø±Ú¯ÛØ±Û Ù ÛâØ´ÙÙØ¯)Ø Ù Ø³Ù¾Ø³ اجرا Ù ÛâØ´ÙÙØ¯.
- اسکرÛپت ÙØ§ ب٠ÙÙ Ø§Ù ØªØ±ØªÛØ¨Û Ú©Ù ÙÙØ´ØªÙ Ù ÛâØ´ÙÙØ¯Ø اجرا Ù ÛâØ´ÙÙØ¯: اسکرÛÙ¾ØªÛ Ú©Ù Ø¯Ø± ÙØ§ÛÙ ÙØ§ اÙÙ Ø¢Ù Ø¯Ù Ø§Ø³ØªØ Ø§Ù٠اجرا Ù ÛâØ´ÙØ¯.
ب٠عÙÙØ§Ù ÛÚ© Ø¹Ø§Ø±Ø¶Ù Ø¬Ø§ÙØ¨ÛØ Ø§Ø³Ú©Ø±Ûپت ÙØ§Û ٠اÚÙÙÛ ÙÙ ÛØ´Ù ØµÙØÙ HTML Ú©Ø§Ù Ù Ø¨Ø§Ø±Ú¯ÛØ±Û شد٠را âÙ ÛâØ¨ÛÙÙØ¯âØ Ø§Ø² ج٠ÙÙ Ø¹ÙØ§ØµØ±Û ک٠در ٠ت٠جÙÙØªØ± از Ø¢Ù ÙØ§ ÙØ±Ø§Ø± Ø¯Ø§Ø±ÙØ¯.
Ø¨Ø±Ø§Û Ù Ø«Ø§Ù:
<script type="module">
alert(typeof button); // آبجکت: اسکرÛپت Ù
ÛâØªÙØ§Ùد دکÙ
Ù Ø§Û Ú©Ù Ø²ÛØ± Ø¢Ù ÙØ³Øª را "ببÛÙØ¯".
// ب٠دÙÛ٠اÛÙÚ©Ù Ù
اÚÙÙ ÙØ§ ب٠تعÙÛÙ Ø§ÙØªØ§Ø¯Ù Ø§ÙØ¯Ø اسکرÛپت بعد از Ø¨Ø§Ø±Ú¯ÛØ±Û Ú©Ù ØµÙØÙ Ø§Ø¬Ø±Ø§ Ù
ÛâØ´ÙØ¯.
</script>
در Ù
ÙØ§Ûس٠با اسکرÛپت Ù
عÙ
ÙÙÛ Ø²ÛØ±:
<script>
alert(typeof button); // دکÙ
Ù undefined Ø§Ø³ØªØ Ø¨Ù Ø¯ÙÛ٠اÛÙک٠اسکرÛپت ÙÙ
ÛâØªÙØ§Ùد Ø¹ÙØ§ØµØ± Ø²ÛØ± را ببÛÙØ¯.
// اسکرÛپت ÙØ§Û Ù
عÙ
ÙÙÛ Ø¨Ø§ÙØ§ÙاصÙÙ ÙØ¨Ù از اÛÙک٠بÙÛÙ ØµÙØÙ Ù¾Ø±Ø¯Ø§Ø²Ø´ Ø´ÙØ¯Ø اجرا Ù
ÛâØ´ÙÙØ¯.
</script>
<button id="button">Button</button>
ØªÙØ¬Ù Ú©ÙÛØ¯ Ú©Ù: اسکرÛپت دÙÙ
در ØÙÛÙØª ÙØ¨Ù از اÙÙÛ Ø§Ø¬Ø±Ø§ Ù
ÛâØ´ÙØ¯! در ÙØªÛج٠Ù
ا ابتدا undefined ٠سپس object را Ù
ÛâØ¨ÛÙÛÙ
.
اÛÙ Ù¾Ø¯ÛØ¯Ù ب٠اÛ٠خاطر است ک٠٠اÚÙÙ ÙØ§ ب٠تعÙÛÙ Ø§ÙØªØ§Ø¯Ù ÙØ³ØªÙØ¯Ø Ø¯Ø± ÙØªÛج٠ابتدا صبر Ù ÛâÚ©ÙØ¯ تا ØªÙ Ø§Ù Ø³ÙØ¯ Ø¨Ø§Ø±Ú¯ÛØ±Û Ø´ÙØ¯. اسکرÛپت ÙØ§Û ٠ع٠ÙÙÛ Ø¨Ø§ÙØ§ÙاصÙ٠اجرا Ù ÛâØ´ÙÙØ¯. در ÙØªÛج٠٠ا Ø®Ø±ÙØ¬Û آ٠را ابتدا Ù Ø´Ø§ÙØ¯Ù Ù ÛâÚ©ÙÛÙ .
ÙÙØªÛ ک٠از ٠اÚÙÙ ÙØ§ Ø§Ø³ØªÙØ§Ø¯Ù Ù ÛâÚ©ÙÛÙ Ø Ø¨Ø§ÛØ¯ ب٠اÛÙ ÙÚ©ØªÙ ØªÙØ¬Ù Ú©ÙÛÙ Ú©Ù ØµÙØØ§Øª HTML ÙÙ Ø§Ù Ø·ÙØ± Ú©Ù Ø¨Ø§Ø±Ú¯ÛØ±Û Ù ÛâØ´ÙÙØ¯Ø ب٠کاربر ÙØ´Ø§Ù داد٠٠ÛâØ´ÙÙØ¯ ٠٠اÚÙÙ ÙØ§Û Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت بعد از آ٠اجرا Ù ÛâØ´ÙÙØ¯Ø پس کاربر ØµÙØÙ Ø±Ø§ ÙØ¨Ù از اÛÙÚ©Ù Ø¨Ø±ÙØ§Ù Ù Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت اجرا Ø´ÙØ¯Ø Ù ÛâØ¨ÛÙØ¯. Ø¨Ø¹Ø¶Û Ø§Ø² ÙØ§Ø¨ÙÛØª ÙØ§ ٠٠ک٠است ک٠کار ÙÚ©ÙÙØ¯. ٠ا Ø¨Ø§ÛØ¯ از ÛÚ© â٠شخص Ú©ÙÙØ¯Ù Ù ÙØ¯Ø§Ø± Ø¨Ø§Ø±Ú¯ÛØ±Û شدÙâ Ø§Ø³ØªÙاد٠کÙÛÙ Ø ÛØ§ ٠ط٠ئ٠شÙÛ٠ک٠اÛÙ Ù¾Ø¯ÛØ¯Ù باعث سردرگ٠شد٠کاربر ÙÙ ÛâØ´ÙØ¯.
Async در اسکرÛپت ÙØ§Û اÛÙÙØ§Û٠٠عتبر است.
در اسکرÛپت ÙØ§Û ØºÛØ± Ù
اÚÙÙÛØ Ù
شخص٠async تÙÙØ§ در اسکرÛپت ÙØ§Û Ø§Ú©Ø³ØªØ±ÙØ§Ù کار Ù
ÛâÚ©ÙÙØ¯. اسکرÛپت ÙØ§Û ØºÛØ± ØªØ±ØªÛØ¨Û ب٠Ù
ØØ¶ Ø¢Ù
Ø§Ø¯Ù Ø´Ø¯ÙØ اجرا Ù
ÛâØ´ÙÙØ¯Ø بدÙÙ ØªÙØ¬Ù ب٠اسکرÛپت ÙØ§Û دÛگر ÛØ§ کد ÙØ§Û HTML.
Ø¨Ø±Ø§Û Ø§Ø³Ú©Ø±Ûپت ÙØ§Û ٠اÚÙÙÛØ در ØØ§Ùت اÛÙÙØ§ÛÙ Ù٠٠عتبر است.
Ø¨Ø±Ø§Û Ù
Ø«Ø§ÙØâ Ø§Ø³Ú©Ø±Ûپت اÛÙÙØ§ÛÙ Ø²ÛØ± async Ø¯Ø§Ø±Ø¯Ø Ø¯Ø± ÙØªÛØ¬Ù Ø¨Ø±Ø§Û ÙÛÚ ÚÛØ²Û صبر ÙÙ
ÛâÚ©ÙØ¯.
اسکرÛÙ¾ØªØ Ø§ÛÙ
Ù¾ÙØ±Øª (fetche ./analytics.js) را Ø§ÙØ¬Ø§Ù
Ù
ÛâØ¯ÙØ¯ Ù ÙÙØªÛ ک٠آÙ
Ø§Ø¯Ù Ø´Ø¯Ø Ø§Ø¬Ø±Ø§ Ù
ÛâØ´ÙØ¯. ØØªÛ اگر Ø³ÙØ¯ HTML ÛØ§ دÛگر اسکرÛپت ÙØ§ Ø¢Ù
Ø§Ø¯Ù ÙØ¨Ø§Ø´Ùد.
اÛÙ Ø±ÙØªØ§Ø± Ø¨Ø±Ø§Û ÙØ§Ø¨ÙÛØª ÙØ§ÛÛ Ú©Ù Ø¨Ù ÙÛÚ ÚÛØ² دÛÚ¯Ø±Û ÙØ§Ø¨Ø³ØªÙ ÙÛØ³ØªÙØ¯Ø Ø®ÙØ¨ ÙØ³ØªØ ٠اÙÙØ¯ Ø´Ù Ø§Ø±ÙØ¯Ù ÙØ§Ø تبÙÛØºØ§ØªØ event listener ÙØ§Û در Ø³Ø·Ø Ø³ÙØ¯.
<!-- ÙÙ
Ù ÙØ§Ø¨Ø³ØªÚ¯Û ÙØ§ Ø¯Ø±ÛØ§Ùت شدÙ(analytics.js)Ø Ù Ø§Ø³Ú©Ø±Ûپت اجرا Ù
ÛâØ´ÙØ¯. -->
<!-- Ø¨Ø±Ø§Û Ø¯Ûگر Ø³ÙØ¯Ùا ÛØ§ تگ ÙØ§Û <script> Ù
ÙØªØ¸Ø± ÙÙ
ÛâØ´ÙØ¯. -->
<script async type="module">
import {counter} from './analytics.js';
counter.count();
</script>
اسکرÛپت ÙØ§Û Ø§Ú©Ø³ØªØ±ÙØ§Ù
اسکرÛپت ÙØ§Û Ø§Ú©Ø³ØªØ±ÙØ§Ù ک٠از ÙÙØ¹ module ââtype="module" ÙØ³ØªÙØ¯Ø Ø¯Ù Ø®ØµÙØµÛت Ù
ØªÙØ§Ùت Ø¯Ø§Ø±ÙØ¯:
-
اسکرÛپت ÙØ§Û Ø§Ú©Ø³ØªØ±ÙØ§Ù با
src٠شاب٠تÙÙØ§ ÛÚ© ٠رتب٠اجرا Ù ÛâØ´ÙÙØ¯:<!-- اسکرÛپت my.js تÙÙØ§ Ûکبار Ø¯Ø±ÛØ§Ùت ٠اجرا Ù ÛâØ´ÙØ¯ --> <script type="module" src="my.js"></script> <script type="module" src="my.js"></script> -
اسکرÛپت ÙØ§Û Ø§Ú©Ø³ØªØ±ÙØ§ÙÛ Ú©Ù Ø§Ø² ÛÚ© Ù ÙØ¨Ø¹ دÛگر (٠اÙÙØ¯ ÛÚ© Ø³Ø§ÛØª دÛگر) Ø¯Ø±ÛØ§Ùت Ø´Ø¯Ù Ø§ÙØ¯. ب٠CORS header ÙÛØ§Ø² Ø¯Ø§Ø±ÙØ¯Ø Ù٠اÙÚ¯ÙÙ٠ک٠در ÙØµÙ Fetch: Cross-Origin Requests ØªÙØ¶ÛØ Ø¯Ø§Ø¯Ù Ø´Ø¯. ب٠عبارت دÛÚ¯Ø±Ø Ø§Ú¯Ø± ÛÚ© اسکرÛپت ٠اÚÙÙÛ Ø§Ø² ÛÚ© Ù ÙØ¨Ø¹ دÛگر Ø¯Ø±ÛØ§Ùت Ø´Ø¯Ù Ø¨Ø§Ø´Ø¯Ø Ø³Ø±ÙØ± دÛگر Ø¨Ø§ÛØ¯ ÙØ¯Ø±
Access-Control-Allow-Originرا ست کرد٠باشد تا Ø¯Ø±ÛØ§Ùت Ø§Ù Ú©Ø§Ù Ù¾Ø°ÛØ± باشد.<!-- ÛÚ© Ø³Ø§ÛØª دÛگر ٠اÙÙØ¯ another-site.com Ø¨Ø§ÛØ¯ Access-Control-Allow-Origin را ÙØ±Ø§Ù٠کرد٠باشد. --> <!-- در ØºÛØ± اÛÙ ØµÙØ±ØªØ اسکرÛپت اجرا ÙØ®ÙØ§ÙØ¯ شد. --> <script type="module" src="http://another-site.com/their.js"></script>اÛÙ ÙØ§Ø¨ÙÛØª Ø¨Ù ØµÙØ±Øª Ù¾ÛØ´ ÙØ±Ø¶ باعث Ø§ÙØ²Ø§ÛØ´ ا٠ÙÛØª Ù ÛâØ´ÙØ¯.
٠اÚÙÙ ÙØ§Û âbareâ ØºÛر ٠جاز ÙØ³ØªÙد.
در Ù
Ø±ÙØ±Ú¯Ø±Ø import Ø¨Ø§ÛØ¯ ÛÚ© ÙÛÙÚ© Ø±ÙØªÛÙ ÛØ§ ابسÙÙÙØª Ø¯Ø±ÛØ§Ùت Ú©ÙØ¯. Ù
اÚÙÙ ÙØ§ÛÛ Ú©Ù ÙÛÚÙÙÙ Ø¢Ø¯Ø±Ø³Û ÛØ§ Ù
Ø³ÛØ±Û ÙØ¯Ø§Ø±Ùد را âbareâ ÛØ§ برÙÙÙ Ù
ÛâÙØ§Ù
ÛÙ
. ÚÙÛÙ Ù
اÚÙÙ ÙØ§ÛÛ Ø¯Ø± âimport Ù
جاز ÙÛØ³ØªÙد.
Ø¨Ø±Ø§Û Ù
Ø«Ø§ÙØ import Ø²ÛØ± Ù
جاز ÙÛØ³Øª:
import {sayHi} from 'sayHi'; // Error, "bare" module
// Ù
اÚÙÙ Ø¨Ø§ÛØ¯ ÛÚ© Ù
Ø³ÛØ± Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´Ø¯Ø Ø¨Ø±Ø§Û Ù
ثا٠â'./sayHi.js' ÛØ§ ÙØ± Ù
اÚÙÙÛ Ú©Ù ÙØ³Øª.
Ø¨Ø¹Ø¶Û Ù ØÛØ· ÙØ§ ٠اÙÙØ¯ Node.js ÛØ§ Ø§Ø¨Ø²Ø§Ø±ÙØ§Û bundle Ø§Ø¬Ø§Ø²Ù Ø§Ø³ØªÙØ§Ø¯Ù از ٠اÚÙÙ ÙØ§Û برÙÙ٠را Ù ÛâØ¯ÙÙØ¯Ø بدÙÙ ÙÛÚ Ù Ø³ÛØ±ÛØ Ø¨Ù Ø§Û٠دÙÛ٠ک٠اÛÙ Ù ØÛØ· ÙØ§ Ø±ÙØ´ ÙØ§Û دÛÚ¯Ø±Û Ø¨Ø±Ø§Û Ù¾ÛØ¯Ø§ کرد٠٠اÚÙÙ ÙØ§ Ù ÙÙÚ© ÙØ§ Ù ØªÙØ¸ÛÙ Ø¢Ù ÙØ§ Ø¯Ø§Ø±ÙØ¯. ا٠ا Ù Ø±ÙØ±Ú¯Ø± ÙØ§ در ØØ§Ù ØØ§Ø¶Ø± از ٠اÚÙÙ ÙØ§Û برÙÙÙ Ù¾Ø´ØªÛØ¨Ø§ÙÛ ÙÙ ÛâÚ©ÙÙØ¯.
Ø³Ø§Ø²Ú¯Ø§Ø±ÛØ ânomoduleâ
Ù
Ø±ÙØ±Ú¯Ø±ÙØ§Û ÙØ¯ÛÙ
Û Ù
ÙØ¸Ùر را از type="module" ÙÙ
Û ÙÙÙ
ÙØ¯. اسکرÛپت ÙØ§ÛÛ Ø§Ø² ÙÙØ¹ ÙØ§Ø´ÙØ§Ø®ØªÙ ÙØ§Ø¯ÛØ¯Ù Ú¯Ø±ÙØªÙ Ù
ÛâØ´ÙÙØ¯. Ø¨Ø±Ø§Û Ø§ÛÙ Ù
ÙØ§Ø±Ø¯ اÛ٠اÙ
Ú©Ø§Ù ÙØ¬Ùد دارد Ú©Ù ÛÚ© ØØ§Ùت Ø§Ø³ØªØ«ÙØ§ Ø¨Ù ÙØ³ÛÙÙ nomodule تعرÛÙ Ú©ÙÛØ¯:
<script type="module">
alert("اجرا در Ù
Ø±ÙØ±Ú¯Ø±ÙØ§Û Ù
درÙ");
</script>
<script nomodule>
alert("Ù
Ø±ÙØ±Ú¯Ø±ÙØ§Û Ù
Ø¯Ø±Ù ÙØ± د٠Ù
ÙØ±Ø¯ type=modeule Ù nomodule را Ù
ÛâÙÙÙ
ÙØ¯Ø پس از اÛÙ Ù
ÙØ±Ø¯ در Ù
ÛâØ´ÙÙØ¯.")
alert("Ù
Ø±ÙØ±Ú¯Ø±ÙØ§Û ÙØ¯ÛÙ
Û Ø§Ø³Ú©Ø±Ûپت از ÙÙØ¹ ÙØ§Ø´Ùاخت٠را ÙØ§Ø¯Ûد٠Ù
ÛâÚ¯ÛØ±Ùد type=module اÙ
ا اÛÙ Ù
ÙØ±Ø¯ را اجرا Ù
ÛâÚ©ÙÙØ¯.");
</script>
Ø§Ø¨Ø²Ø§Ø±ÙØ§Û ساخت
در Ø²ÙØ¯Ú¯Û ÙØ§ÙØ¹ÛØ ٠اÚÙÙ ÙØ§Û Ù Ø±ÙØ±Ú¯Ø± Ø¨Ù ÙØ¯Ø±Øª در ØØ§Ùت âØ®Ø§Ù â Ø®Ùد Ø§Ø³ØªÙØ§Ø¯Ù Ù ÛâØ´ÙÙØ¯. ٠ع٠ÙÙØ§Ø ٠ا اÛ٠اسکرÛپت ÙØ§ را با Ø§Ø¨Ø²Ø§Ø±ÙØ§ÛÛ Ù Ø§ÙÙØ¯ Webpack با ÙÙ Ø§Ø³ØªÙØ§Ø¯Ù Ù ÛâÚ©ÙÛ٠٠در Ø³Ø±ÙØ± ÙÙØ§ÛÛ Ø§Ø¹Ù Ø§Ù Ù ÛâÚ©ÙÛÙ .
ÛÚ©Û Ø§Ø² Ù Ø²Ø§ÛØ§Û Ø§Ø³ØªÙØ§Ø¯Ù از Ø¨Ø§ÙØ¯ÙØ±ÙØ§ â Ø§ÛÙÙØ§ ب٠٠ا Ú©ÙØªØ±Ù Ø¨ÛØ´ØªØ± بر رÙÛ Ø§ÛÙک٠٠اÚÙÙ ÙØ§ ÚÚ¯ÙÙ٠اجرا Ù ÛâØ´ÙÙØ¯Ø Ù ÛâØ¯ÙØ¯Ø اجاز٠اجرا شد٠٠اÚÙÙ ÙØ§Û برÙÙÙ Ù Ø¨Ø³ÛØ§Ø± Ú©Ø§Ø±ÙØ§Û دÛÚ¯Ø±Ø Ù Ø§ÙÙØ¯ ٠اÚÙÙ ÙØ§Û CSS/HTML.
Ø§Ø¨Ø²Ø§Ø±ÙØ§Û ساخت Ú©Ø§Ø±ÙØ§Û Ø²ÛØ± را Ø§ÙØ¬Ø§Ù Ù ÛâØ¯ÙÙØ¯:
- Ù
اÚÙÙ âØ§ØµÙÛâØ ÙÙ
ا٠Ù
اÚÙÙÛ Ú©Ù ÙØ±Ø§Ø± است تÙÛ
<script type="module">در HTML ÙØ±Ø§Ø± Ø¨Ú¯ÛØ±Ø¯ را بردار. - ÙØ§Ø¨Ø³ØªÚ¯Û ÙØ§Û آ٠را Ø¨Ø±Ø±Ø³Û Ú©Ù: importÙØ§Û آ٠٠سپس importÙØ§Û importÙØ§Û آ٠٠تا ب٠آخر.
- ÛÚ© ÙØ§Û٠با تÙ
اÙ
Ù
اÚÙÙ ÙØ§ بساز(ÛØ§ ÚÙØ¯ ÙØ§ÛÙØ اÛÙ Ù
ÙØ±Ø¯ ÙØ§Ø¨Ù ØªÙØ¸ÛÙ
است)Ø Ø¬Ø§ÛگزÛÙÛ â
importÙØ§Û صدا زد٠شد٠با ØªÙØ§Ø¨Ø¹ Ø¨Ø§ÙØ¯ÙØ±Ø ØªØ§ اÛ٠کار شدÙÛ Ø¨Ø§Ø´Ø¯. ٠اÚÙÙ ÙØ§Û âØ®Ø§Øµâ ٠اÙÙØ¯ ٠اÚÙÙ ÙØ§Û HTML/CSS ÙÙ Ù¾Ø´ØªÛØ¨Ø§ÙÛ Ù ÛâØ´ÙÙØ¯. - در ØÛ٠عÙ
ÙÛØ§ØªØ تبدÛÙ ÙØ§ Ù Ø§Ø±ØªÙØ§ÙØ§Û Ø¯ÛÚ¯Ø±Û ÙÙ
Ù
Ù
ک٠است Ø§ÙØ¬Ø§Ù
Ø´ÙØ¯:
- Ú©Ø¯ÙØ§ÛÛ Ú©Ù ÙÛÚ ÙÙØª اجرا ÙÙ ÛâØ´ÙÙØ¯Ø ØØ°Ù Ù ÛâØ´ÙÙØ¯.
- exportÙØ§ÛÛ Ú©Ù Ø§Ø³ØªÙØ§Ø¯Ù ÙÙ ÛâØ´ÙÙØ¯Ø پاک Ù ÛâØ´ÙÙØ¯.(âtree-shakingâ).
- Ø¹Ø¨Ø§Ø±Ø§ØªÛ Ú©Ù Ù
Ø®ØµÙØµ زÙ
Ø§Ù ØªÙØ³Ø¹Ù ÙØ±Ù
Ø§ÙØ²Ø§Ø± ÙØ³ØªÙد Ù
اÙÙØ¯
consoleÙdebuggerØØ°Ù Ù ÛâØ´ÙÙØ¯. - سÛÙØªÚ©Ø³ Ù Ø§Ù ÙØ§Û Ù Ø¯Ø±Ù Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت ٠٠ک٠است ب٠ÙÙ ÙÙÙ ÙØ§Û ÙØ¯ÛÙ Û Ø¨Ø§ ع٠Ùکرد Ù Ø´Ø§Ø¨Ù ØªÙØ³Ø· Babel تبدÛÙ Ø´ÙÙØ¯.
- ÙØ§ÛÙ ÙÙØ§ÛÛ ÙØ´Ø±Ø¯Ù Ù ÛâØ´ÙØ¯. (ÙØ§ØµÙÙ ÙØ§Û پاک Ù ÛâØ´ÙÙØ¯Ø Ù ØªØºÛØ±Ùا با ÙØ§Ù ÙØ§Û Ú©ÙØªØ§Ù تر جاÛگزÛÙ Ù ÛâØ´ÙÙØ¯ Ù ØºÛØ±Ù)
اگر Ù
ا از Ø§Ø¨Ø²Ø§Ø±ÙØ§Û Ø¨Ø§ÙØ¯Ù Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ
Ø Ø¯Ø± اÛÙ ØµÙØ±Øª تÙ
اÙ
اسکرÛپت ÙØ§ با ÙÙ
در ÛÚ© ÙØ§ÛÙ ( ÛØ§ تعداد Ú©Ù
Û ÙØ§ÛÙ ) جÙ
ع Ù
ÛâØ´ÙÙØ¯Ø عبارات import/export داخ٠اسکرÛپت ÙØ§ با ØªÙØ§Ø¨Ø¹ خاص Ø¨Ø§ÙØ¯Ùر ÙØ§ جاÛگزÛÙ Ù
ÛâØ´ÙÙØ¯. در ÙØªÛج٠اسکرÛپت Ø¨Ø§ÙØ¯Ù ÙÙØ§ÛÛ ÙÛÚ Ø¹Ø¨Ø§Ø±Øª import/export ÙØ¯Ø§Ø±Ø¯Ø اÛ٠اسکرÛپت ÙÛØ§Ø²Û ب٠type="module" ÙØ¯Ø§Ø±Ø¯Ø Ù Ù
ا Ù
ÛâØªÙØ§ÙÛÙ
آ٠را در ÛÚ© اسکرÛپت Ù
عÙ
ÙÙÛ Ø¨Ú¯Ø°Ø§Ø±ÛÙ
.
<!-- با ÙØ±Ø¶ اÛÙÚ©Ù Ù
ا bundle.js را از ÛÚ© ابزار Ù
اÙÙØ¯ Webpack Ú¯Ø±ÙØªÙ اÛÙ
-->
<script src="bundle.js"></script>
با اÛÙ ØØ³Ø§Ø¨Ø ٠اÚÙÙ ÙØ§ بÙÙ Û Ù ÙÛØªÛÙ ÙÙ ÙØ§Ø¨Ù Ø§Ø³ØªÙØ§Ø¯Ù ÙØ³ØªÙد. در ÙØªÛج٠٠ا از Webpack در اÛÙØ¬Ø§ Ø§Ø³ØªÙØ§Ø¯Ù ÙÙ ÛâÚ©ÙÛÙ : ش٠ا Ù ÛâØªÙØ§ÙÛØ¯ آ٠را در Ø¢ÛÙØ¯Ù ØªÙØ¸ÛÙ Ú©ÙÛØ¯.
Ø®ÙØ§ØµÙ
Ø¨Ø·ÙØ± Ø®ÙØ§ØµÙØ Ù ÙØ§ÙÛ٠اصÙÛ Ø¹Ø¨Ø§Ø±ØªÙØ¯ از:
- ÙØ± Ù
اÚÙÙ ÛÚ© ÙØ§Û٠است. Ø¨Ø±Ø§Û Ø§ÛÙک٠عبارات
import/exportکار بکÙÙØ¯Ø Ù Ø±ÙØ±Ú¯Ø±Ùا ÙÛØ§Ø² بÙ<script type="module">Ø¯Ø§Ø±ÙØ¯. ٠اÚÙÙ ÙØ§Û ÚÙØ¯ÛÙ ØªÙØ§Ùت با اسکرÛپت ÙØ§Û ٠ع٠ÙÙÛ Ø¯Ø§Ø±ÙØ¯:- Ø¨Ù ØµÙØ±Øª Ù¾ÛØ´ ÙØ±Ø¶ ب٠تعÙÛÙ Ø§ÙØªØ§Ø¯Ù (Deferred) ÙØ³ØªÙد.
- در اسکرÛپت ÙØ§Û inline Async Ø¬ÙØ§Ø¨ Ù ÛâØ¯ÙØ¯.
- Ø¨Ø±Ø§Û Ø¨Ø§Ø±Ú¯Ø²Ø§Ø±Û Ø§Ø³Ú©Ø±Ûپت ÙØ§Û Ø®Ø§Ø±Ø¬Û (external) از Ù ÙØ§Ø¨Ø¹ دÛگر (دا٠ÙÙ/Ù¾Ø±ÙØªÚ©Ù/Ù¾ÙØ±Øª)Ø ÙØ¯Ø± ÙØ§Û CORS ÙÛØ§Ø² ÙØ³ØªÙد.
- اسکرÛپت ÙØ§Û ٠شاب٠external ÙØ§Ø¯ÛØ¯Ù Ú¯Ø±ÙØªÙ Ù ÛâØ´ÙÙØ¯.
- Ù
اÚÙÙ ÙØ§Û اسکÙÙ¾ Ø³Ø·Ø Ø¨Ø§ÙØ§Û Ø®ÙØ¯ را Ø¯Ø§Ø±ÙØ¯ ٠از طرÛ٠عبارات â
import/exportکاراÛÛ ÙØ§Û Ø®ÙØ¯ را با دÛگر اسکرÛپت ÙØ§Û ب٠اشتراک Ù ÛâÚ¯Ø°Ø§Ø±ÙØ¯. - Ù
اÚÙÙ ÙØ§ ÙÙ
ÛØ´Ù در ØØ§Ùت â
use strictÙØ³ØªÙد. - کد ٠اÚÙÙ ÙØ§ تÙÙØ§ ÛÚ© ٠رتب٠اجرا Ù ÛâØ´ÙÙØ¯. ExportÙØ§ تÙÙØ§ ÛÚ© ٠رتب٠ساخت٠شد٠٠سپس بÛ٠ت٠ا٠importer ÙØ§ ب٠اشتراک گذاشت٠٠ÛâØ´ÙÙØ¯.
ÙÙØªÛ Ú©Ù Ù
ا از ÛÚ© Ù
اÚÙÙ Ø§Ø³ØªÙØ§Ø¯Ù Ù
ÛâÚ©ÙÛÙ
Ø ÙØ± Ù
اÚÙÙ ÛÚ© کاراÛÛ Ø±Ø§ Ø¨ÙØ¬Ùد Ø¢ÙØ±Ø¯Ù ٠ا٠را Ø§Ú©Ø³Ù¾ÙØ±Øª Ù
ÛâÚ©ÙØ¯. سپس Ù
ا از عبارت import Ø¨Ø±Ø§Û Ù
ستÙÛÙ
ا اÛÙ
Ù¾ÙØ±Øª کرد٠Ù
اÚÙ٠ب٠جاÛÛ Ú©Ù Ø¨Ù Ø¢Ù ÙÛØ§Ø² دارÛÙ
Ø Ø§Ø³ØªÙØ§Ø¯Ù Ù
ÛâÚ©ÙÛÙ
. Ù
Ø±ÙØ±Ú¯Ø± Ø¨Ù ØµÙØ±Øª Ø®ÙØ¯Ú©Ø§Ø± اسکرÛپت را Ø¨Ø§Ø±Ú¯Ø°Ø§Ø±Û Ù Ø§Ø±Ø²ÛØ§Ø¨Û Ù
ÛâÚ©ÙØ¯.
در Ø²Ù Ø§Ù Ø§ÙØªØ´Ø§Ø±Ø Ø¨Ø±ÙØ§Ù Ù ÙÙÛØ³Ø§Ù ٠ع٠ÙÙØ§ از Ø¨Ø§ÙØ¯Ù ÙØ§ÛÛ Ù Ø§ÙÙØ¯ Webpack Ø¨Ø±Ø§Û Ø¬Ù Ø¹ کرد٠٠اÚÙÙ ÙØ§ در Ú©ÙØ§Ø± ÙÙ Ù Ø¨Ø§ÙØ§ برد٠کاراÛÛ Ù ÚÙØ¯ دÙÛ٠دÛگر Ø§Ø³ØªÙØ§Ø¯Ù Ù ÛâÚ©ÙÙØ¯.
در ÙØµÙ بعد ٠ا Ù Ø«Ø§Ù ÙØ§Û Ø¨ÛØ´ØªØ±Û از ٠اÚÙÙâÙØ§ Ù ÛâØ¨ÛÙÛÙ Ø Ù Ø§ÛÙÚ©Ù ÚÚ¯ÙÙÙ Ø¢Ù ÙØ§ Ø§Ú©Ø³Ù¾ÙØ±Øª/اÛÙ Ù¾ÙØ±Øª Ù ÛâØ´ÙÙØ¯.
ÙØ¸Ø±Ø§Øª
<code>Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯Ø Ø¨Ø±Ø§Û ÚÙØ¯Û٠خط â کد را درÙ٠تگ<pre>ÙØ±Ø§Ø± دÙÛØ¯Ø Ø¨Ø±Ø§Û Ø¨ÛØ´ از د٠خط کد â Ø§Ø² ÛÚ© جعبÙÙ Ø´ÙÛ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯. (plnkrØ jsbinØ codepenâ¦)