در حال بارگذاری...

ماژول‌های JavaScript

ماژول‌ها برنامهٔ JavaScript را به فایل‌های جدا تقسیم می‌کنند. export مقدار را در مرز فایل در دسترس می‌گذارد و import آن را مصرف می‌کند. خط نمایشی مثال‌ها lida / tea / mint است.

خروجی‌های نام‌دار

با خروجی نام‌دار، نام دقیق مقدار را مشخص می‌کنی و یک فایل می‌تواند چند مقدار نام‌دار صادر کند.

ساخت math.js

javascript
// math.js
export const drink = "tea";
export function label(name) {
return `${name} / ${drink} / mint`;
}

drink و label چون با export مشخص شده‌اند برای ماژول‌های دیگر قابل استفاده‌اند. چیزی که صادر نشده در همان math.js می‌ماند.

وارد کردن خروجی‌های نام‌دار

برای import نام‌دار، نام‌ها را داخل آکولاد و مطابق نام export بنویس.

استفاده از خروجی‌های نام‌دار در app.js

javascript
// app.js
import { drink, label } from "./math.js";

console.log(drink);
console.log(label("lida"));

این import به bindingهای صادرشده وصل می‌شود و تعریف جداگانه‌ای کپی نمی‌کند. در مرورگر، این فایل‌ها باید از راه HTTP یا HTTPS ارائه شوند.

خروجی پیش‌فرض

خروجی پیش‌فرض معمولاً مقدار اصلی ماژول است. هنگام import نام محلی را خودت انتخاب می‌کنی و آکولاد لازم نیست.

ساخت و وارد کردن خروجی پیش‌فرض

javascript
// greeting.js
export default function greet(name) {
return `Hello, ${name}!`;
}

// app.js
import greet from "./greeting.js";
console.log(greet("lida"));

import نام‌دار به شکل { drink, label } نوشته می‌شود؛ اما import پیش‌فرض نام انتخابی greet را بدون آکولاد می‌گیرد. هر فایل فقط یک default export دارد.

دامنهٔ ماژول و import پویا

تعریف‌های سطح بالای ماژول عضو window نیستند. import() پویا ماژول را بعداً می‌خواند و یک Promise برمی‌گرداند.

خصوصی نگه داشتن secret و بارگذاری دیرهنگام

javascript
// menu.js
const secret = "not global";
export const items = ["tea", "mint"];

// app.js
import("./menu.js").then((menu) => {
console.log(menu.items.join(" / "));
});
console.log(window.secret); // undefined

فقط items از مرز ماژول عبور می‌کند. نتیجهٔ import پویا یک شیء namespace است و خروجی‌ها از propertyهای آن خوانده می‌شوند. این مثال هم به سرویس وب نیاز دارد.

مشاهدهٔ رفتار ماژول در یک صفحه

این دمو متن ماژول را در حافظه می‌سازد، از آن Blob URL می‌سازد و سپس import می‌کند؛ بنابراین به پوشهٔ پروژه نیاز ندارد. در پروژهٔ واقعی معمولاً فایل‌ها جدا هستند.

اجرای دموی ماژول در مرورگر

html
<p id="result"></p>
<script type="module">
const source = `
export const drink = "tea";
export function label(name) { return name + " / " + drink + " / mint"; }
`;
const url = URL.createObjectURL(new Blob([source], { type: "text/javascript" }));
const module = await import(url);
document.querySelector("#result").textContent = module.label("lida");
URL.revokeObjectURL(url);
</script>

صفحه دقیقاً lida / tea / mint را نشان می‌دهد. type="module" نحو ماژول را فعال می‌کند و Blob URL متن را بدون درخواست شبکه در اختیار import می‌گذارد.

در پروژهٔ معمولی متن را در math.js و کد واردکننده را در app.js بگذار و ورودی را با <script type="module" src="./app.js"></script> بارگذاری کن. اجرای مستقیم با file:// برای ماژول‌های مرورگر قابل اتکا نیست؛ از HTTP server استفاده کن.

📊 انتخاب روش ماژول

نحو کاربرد نمونه
export/import نام‌دار اشتراک نام‌های مشخص export const drink = "tea" / import { drink } ...
export/import پیش‌فرض اشتراک مقدار اصلی export default function greet() / import greet ...
import پویا بارگذاری دیرتر و دریافت Promise import("./menu.js").then(...)
دامنهٔ ماژول خصوصی ماندن تعریف‌های سطح بالا const secret = "not global"

تمرین عملی

در math.js خروجی‌های نام‌دار drink و label را بساز و در app.js وارد کن. در greeting.js یک greet پیش‌فرض بساز و کاری کن صفحه lida / tea / mint را نشان دهد.

اشتباه‌های رایج

برای import نام‌دار آکولاد را حذف نکن، در یک فایل دو default export نساز و انتظار نداشته باش متغیر صادرنشده سراسری شود. ماژول مرورگر به HTTP(S) نیاز دارد.

جمع‌بندی

ماژول مرز فایل می‌سازد: export فقط bindingهای منتخب را بیرون می‌فرستد، import آن‌ها را مصرف می‌کند و دامنهٔ ماژول تعریف‌های صادرنشده را خصوصی نگه می‌دارد.
ماژول‌ها را کوچک و متمرکز نگه دار، نام importها را روشن انتخاب کن و Blob URL موقتی را پس از پایان دمو آزاد کن.

🧠 دانش خود را بیازمایید

آماده شروع

دانش خود را بیازمایید

خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کرده‌اید

❓
6
سوالات
🎯
70%
برای قبولی
♾️
∞
زمان
🔄
∞
تلاش‌ها

📝 دستورالعمل‌ها

  • هر سوال را با دقت بخوانید
  • بهترین پاسخ را برای هر سوال انتخاب کنید
  • می‌توانید آزمون را هر چند بار که می‌خواهید تکرار کنید
  • پیشرفت شما در بالا نمایش داده می‌شود