في JavaScript، Modules أو “الوحدات” هي طريقة لتنظيم الكود بطريقة تجعل كل ملف يحتوي على جزء مستقل من التطبيق. هذه التقنية تُسهل إعادة استخدام الكود، وتقسيم المشروع إلى أجزاء واضحة، وتجنب تداخل المتغيرات والدوال في النطاق العام (global scope).
✅ ما هو الـ Module في JavaScript؟
الـ Module هو ملف JavaScript مستقل يمكنه تصدير (export) متغيرات أو دوال أو كائنات، ويمكن استيراد (import) هذه الصادرات في ملف آخر لاستخدامها.
🧩 أنواع التصدير (Export)
1. Named Export (تصدير بالاسم)
يُستخدم لتصدير أكثر من عنصر من ملف واحد.
✅ مثال:
// math.js
export const PI = 3.14;
export function add(a, b) {
return a + b;
}
export const subtract = (a, b) => a - b;
JavaScript🟢 الاستيراد:
// main.js
import { PI, add, subtract } from './math.js';
console.log(add(2, 3)); // 5
JavaScript✅ ملاحظة: يجب استخدام نفس الأسماء عند الاستيراد.
2. Default Export (تصدير افتراضي)
يُستخدم لتصدير قيمة واحدة رئيسية من الملف.
✅ مثال:
// greet.js
export default function greet(name) {
return `Hello, ${name}!`;
}
JavaScript🟢 الاستيراد:
// main.js
import greet from './greet.js';
console.log(greet("Ali")); // Hello, Ali!
JavaScript✅ ملاحظة: عند الاستيراد لا تحتاج إلى أقواس {}
ويمكنك اختيار الاسم الذي تريده.
3. Mixed Export (تصدير افتراضي + مسمى)
يمكنك استخدام default + named exports في نفس الملف:
// utils.js
export default function sayHi(name) {
return `Hi, ${name}`;
}
export const version = "1.0.0";
JavaScript// app.js
import sayHi, { version } from './utils.js';
console.log(sayHi("Sara")); // Hi, Sara
console.log(version); // 1.0.0
JavaScript📦 كيف يتم استخدام Modules؟
1. باستخدام ملفات JavaScript القياسية (ES6 Modules):
✅ في HTML:
<script type="module" src="main.js"></script>
JavaScript✅ يجب أن تستخدم
type="module"
لكي تعمل أوامر import/export.
2. قواعد مهمة:
- المسارات تبدأ بـ
./
أو../
عند استيراد ملفات محلية. - لا يمكنك استخدام
import
وexport
خارج الوضعmodule
. - لا يمكن استخدام
import
داخلif
أو دالة (يجب أن تكون في المستوى الأعلى).
🧠 الميزات الأساسية للـ Modules:
الميزة | الوصف |
---|---|
Scope | لكل ملف Module نطاق خاص به (no global pollution). |
Lazy Loading | يتم تحميل الملفات فقط عند الحاجة. |
Encapsulation | الكود داخل Module لا يؤثر على كود خارجي. |
Strict Mode | Modules تعمل دائمًا في الوضع الصارم (strict mode). |
📌 مقارنة بين Named
و Default
Export:
الميزة | Named Export | Default Export |
---|---|---|
عدد الصادرات | أكثر من واحد | واحد فقط |
طريقة الاستيراد | { name } | أي اسم |
إمكانية تغيير الاسم | لا (إلا باستخدام as ) | نعم |
🛠️ Advanced Features (متقدمة)
✅ إعادة التصدير (Re-export):
// mathUtils.js
export * from './math.js'; // يعيد تصدير كل شيء من math.js
JavaScript✅ التصدير باسم جديد:
// math.js
export { add as sum };
JavaScript✅ الاستيراد باسم جديد:
import { sum as addition } from './math.js';
JavaScript🧪 استخدام Modules في Node.js
منذ Node.js v12+ يمكنك استخدام ES Modules مباشرة عن طريق:
- تغيير الامتداد إلى
.mjs
، أو - إضافة
"type": "module"
فيpackage.json
.
🎓 خلاصة
المفهوم | الوصف |
---|---|
export | لتصدير متغيرات أو دوال من الملف |
import | لاستيراد محتوى من ملف آخر |
default export | لتصدير عنصر واحد رئيسي |
named export | لتصدير أكثر من عنصر |