عبارات Export Ù Import ک٠در بخشâÙØ§Û ÙØ¨ÙÛ Ø¨Ø±Ø±Ø³Û Ú©Ø±Ø¯ÛÙ âØ§ÛØ³ØªØ§ (static)â ÙØ§Ù ÛØ¯Ù Ù ÛâØ´ÙÙØ¯. ساختار Ø¢ÙÙØ§ Ø¨Ø³ÛØ§Ø± ساد٠٠سختâÚ¯ÛØ±Ø§Ù٠است.
اÙ٠اÛÙÚ©ÙØ ÙÙ
ÛâØªÙØ§ÙÛÙ
پاراÙ
ØªØ±ÙØ§Û import را Ø¨Ù ØµÙØ±Øª Ù¾ÙÛØ§ تÙÙÛØ¯ Ú©ÙÛÙ
.
Ù Ø³ÛØ± ٠اÚÙÙ Ø¨Ø§ÛØ¯ ÛÚ© رشت٠ابتداÛÛ Ø¨Ø§Ø´Ø¯Ø ÙÙ Û ØªÙØ§Ùد ÛÚ© ÙØ±Ø§Ø®ÙاÙÛ ØªØ§Ø¨Ø¹ باشد. اÛ٠کار ÙÙ ÛâÚ©ÙØ¯:
import ... from getModuleName(); // Error, only from "string" is allowed
دÙ٠اÛÙÚ©ÙØ ÙÙ ÛâØªÙØ§ÙÛÙ Ø¨Ù ØµÙØ±Øª Ø´Ø±Ø·Û ÛØ§ در ز٠ا٠اجرا آ٠را import Ú©ÙÛÙ :
if(...) {
import ...; // !Ø®Ø·Ø§Ø Ù
جاز ÙÛØ³Øª
}
{
import ...; // را در ÙØ± بÙÙÚ©Û ÙØ±Ø§Ø± دÙÛÙ
import Ø®Ø·Ø§Ø ÙÙ
ÛâØªÙØ§ÙÛÙ
}
Ø²ÛØ±Ø§ import/export ÙØµØ¯ دارد ستÙÙ ÙÙØ±Ø§ØªÛ Ø¨Ø±Ø§Û Ø³Ø§Ø®ØªØ§Ø± کد ÙØ±Ø§ÙÙ
Ú©ÙÙØ¯. اÛÙ ÛÚ© ÚÛØ² Ø®ÙØ¨ Ø§Ø³ØªØ Ø²ÛØ±Ø§ ساختار کد ÙØ§Ø¨Ù تجزÛ٠٠تØÙÛÙ Ø§Ø³ØªØ Ù
اÚÙÙ ÙØ§ را Ù
ÛâØªÙØ§Ù با Ø§Ø¨Ø²Ø§Ø±ÙØ§Û ÙÛÚ٠در ÛÚ© ÙØ§Ùب ÛÚ© ÙØ§Û٠جÙ
ع Ø¢ÙØ±Û Ú©Ø±Ø¯Ø export ÙØ§Û Ø§Ø³ØªÙØ§Ø¯Ù ÙØ´Ø¯Ù Ù
ÛâØªÙØ§ÙÙØ¯ ØØ°Ù Ø´ÙÙØ¯ (âtree-shakenâ). اÛÙâÙØ§ ÙÙØ· ب٠اÛ٠خاطر اÙ
کاÙâÙ¾Ø°ÛØ± است ک٠ساختار imports/exports ساد٠٠ثابت است.
ا٠ا ÚÚ¯ÙÙÙ Ù ÛâØªÙØ§Ù ÛÚ© ٠اÚÙ٠را Ø¨Ù ØµÙØ±Øª Ù¾ÙÛØ§Ø Ø¨ÙØ§ ب٠ÙÛØ§Ø²Ù ا٠import Ú©ÙÛÙ Ø
عبارت import()â
عبارت import(module) Ù
اÚÙ٠را Ø¨Ø§Ø±Ú¯Ø°Ø§Ø±Û Ù
ÛâÚ©ÙØ¯ Ù ÛÚ© promise برÙ
ÛâÚ¯Ø±Ø¯Ø§ÙØ¯ ک٠ب٠ÛÚ© Ø´Û ØØ§ÙÛ ÙÙ
Ù export ÙØ§Û Ù
اÚÙ٠تبدÛÙ Ù
ÛâØ´ÙØ¯. Ù
ÛâØªÙØ§Ù آ٠را در ÙØ± جاÛÛ Ø§Ø² کد صدا زد. (Ø¨Ù ØªÙØ§Ùت Ø¸Ø§ÙØ±Û آ٠با import ÙØ§Û Ø§ÛØ³ØªØ§ Ø¯ÙØª Ú©ÙÛØ¯)
Ù ÛâØªÙØ§ÙÛ٠آ٠را Ø¨Ù ØµÙØ±Øª Ù¾ÙÛØ§ در ÙØ± Ø¬Ø§Û Ú©Ø¯ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ Ø Ø¨Ù Ø¹ÙÙØ§Ù ٠ثاÙ:
let modulePath = prompt("Which module to load?");
import(modulePath)
.then(obj => <module object>)
.catch(err => <loading error, e.g. if no such module>)
ÛØ§Ø Ù
ÛâØªÙØ§ÙÛÙ
let module = await import(modulePath) را درÙÙ ÛÚ© تابع ÙÙگاÙ
(async) Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ
.
ب٠عÙÙØ§Ù Ù
Ø«Ø§ÙØ اگر Ù
اÚÙÙ say.js را Ø¨Ù Ø´Ø±Ø Ø²ÛØ± داشت٠باشÛÙ
:
// ð say.js
export function hi() {
alert(`Hello`);
}
export function bye() {
alert(`Bye`);
}
Ø¢Ùگا٠import Ù¾ÙÛØ§ Ù ÛâØªÙØ§Ùد ٠اÙÙØ¯ اÛ٠باشد:
let {hi, bye} = await import('./say.js');
hi();
bye();
ÛØ§ اگر say.js Ø¯Ø§Ø±Ø§Û export Ù¾ÛØ´âÙØ±Ø¶ باشد:
// ð say.js
export default function() {
alert("Module loaded (export default)!");
}
Ø¢ÙÚ¯Ø§Ù Ø¨Ø±Ø§Û Ø¯Ø³ØªØ±Ø³Û Ø¨Ù Ø¢ÙØ Ù
ÛâØªÙØ§ÙÛÙ
از Ø®Ø§ØµÛØª default Ø´ÛØ¡ Ù
اÚÙÙ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ
:
let obj = await import('./say.js');
let say = obj.default;
// or, in one line: let {default: say} = await import('./say.js');
say();
٠ثا٠کا٠Ù:
export function hi() {
alert(`Hello`);
}
export function bye() {
alert(`Bye`);
}
export default function() {
alert("Module loaded (export default)!");
}<!doctype html>
<script>
async function load() {
let say = await import('./say.js');
say.hi(); // Hello!
say.bye(); // Bye!
say.default(); // Module loaded (export default)!
}
</script>
<button onclick="load()">Click me</button>import Ù¾ÙÛØ§ در اسکرÛپتâÙØ§Û Ù
عÙ
ÙÙÛ ÙÙ
کار Ù
ÛâÚ©ÙÙØ¯Ø ÙÛØ§Ø²Û ب٠script type="module"â ÙØ¯Ø§Ø±Ùد.
اگرÚÙ import()â Ø´Ø¨ÛÙ ÛÚ© تابع Ø¨Ù ÙØ¸Ø± Ù
ÛâØ±Ø³Ø¯Ø ÙÙÛ Ø³Ø§Ø®ØªØ§Ø± ÙÛÚÙâØ§Û Ø§Ø³Øª Ú©Ù ØªØµØ§Ø¯ÙØ§Ù از Ù¾Ø±Ø§ÙØªØ² Ø§Ø³ØªÙØ§Ø¯Ù Ù
ÛâÚ©ÙØ¯ (Ù
شاب٠super()â).
پس ÙÙ
ÛâØªÙØ§ÙÛÙ
آ٠را ب٠ÛÚ© Ù
ØªØºÛØ± اختصاص دÙÛÙ
ÛØ§ از call/apply در Ø±ÙØªØ§Ø± با Ø¢Ù Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ
. تابع ÙÛØ³Øª.
ÙØ¸Ø±Ø§Øª
<code>Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯Ø Ø¨Ø±Ø§Û ÚÙØ¯Û٠خط â کد را درÙ٠تگ<pre>ÙØ±Ø§Ø± دÙÛØ¯Ø Ø¨Ø±Ø§Û Ø¨ÛØ´ از د٠خط کد â Ø§Ø² ÛÚ© جعبÙÙ Ø´ÙÛ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯. (plnkrØ jsbinØ codepenâ¦)