أساسيات CommonJS — require/module.exports وexports
تعلّموا CommonJS: require() وmodule.exports والاختصار exports، مع لمحة صغيرة عن التوافق مع ESM
أساسيات CommonJS — require/module.exports وexports درس مجاني في JavaScript Academy على CoddyKit. هذا هو الدرس 2 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في JavaScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة JavaScript Academy 3 دروس في المجموع.
الصورة العامة لـ CJS
الهدف: قراءة وحدات CommonJS الصغيرة وكتابتها.
- يحمّل require() الوحدات
- يمثل module.exports كائن التصدير
- يمثل exports اختصارًا للكائن نفسه
- لمحة سريعة عن التوافقية مع ESM

require() — الفكرة
يعيد require(path) الكائن الذي تصدّره الوحدة في CommonJS.
// CommonJS import uses require()
const cjsExample = [
"const math = require(\\"./math.js\\");",
"console.log(math.sum(2, 3));"
];
console.log("require() example:");
for (const line of cjsExample) console.log(line);
// Emulate a loaded module object
const loaded = { sum: function (a, b) { return a + b; } };
console.log("emulated require sum:", loaded.sum(2, 3));
module.exports
أسند قيمة إلى module.exports لتصديرها، سواء أكانت دالة أم كائنًا أم غير ذلك.
// module.exports sets what the module returns
const lines1 = [
"function greet(name) { return \\"Hi \\" + name; }",
"module.exports = greet;"
];
console.log("module.exports example:");
for (const l of lines1) console.log(l);
// Emulate consumption
function greet(name) { return "Hi " + name; }
const api1 = greet; // like module.exports = greet
console.log("use exported fn:", api1("Ayla"));
اختصار exports
يُعدّ exports.prop = ... استخدامًا صحيحًا؛ لكن لا تعِد إسناد exports = ... لأنه لن يعود يشير إلى module.exports.
// exports is a shortcut to module.exports (same object)
const lines2 = [
"// Good: add properties",
"exports.sum = function (a, b) { return a + b; };",
"",
"// Pitfall: reassigning exports breaks the link",
"exports = function () {}; // WRONG"
];
console.log("exports shortcut:");
for (const l of lines2) console.log(l);
// Emulate good usage
const moduleObj = {};
const exportsRef = moduleObj; // like exports === module.exports initially
exportsRef.sum = function (a, b) { return a + b; };
console.log("sum via exportsRef:", moduleObj.sum(2, 4));
تصديرات متعددة
يمكنك تصدير كائن يحتوي على عدة دوال، ثم قراءتها عبر الخصائص.
// Export an object with multiple members
const lines3 = [
"function add(a, b) { return a + b; }",
"function mul(a, b) { return a * b; }",
"module.exports = { add, mul };"
];
console.log("multiple exports object:");
for (const l of lines3) console.log(l);
// Emulate consumption
const api2 = {
add: function (a, b) { return a + b; },
mul: function (a, b) { return a * b; }
};
console.log("use add/mul:", api2.add(1, 2), api2.mul(2, 3));
لمحة عن ESM ↔ CJS
التوافقية (لمحة):
- غالبًا ما يحصل ESM عند استيراد CJS على module.exports الخاص بـ CJS باعتباره default.
- مثال: import pkg from "./cjs.js" ثم استخدم pkg.add().
- أبقِ الأمثلة بسيطة، وتجنّب خلط الأسلوبين في ملف واحد ما لم تكن مضطرًا.

اختبار صياغة تصدير CJS
تحقّق سريع: التصدير في CommonJS.

مراجعة
مراجعة: حمّل باستخدام require()، وصدّر باستخدام module.exports، وأضف الخصائص عبر exports.prop، وتجنّب إعادة إسناد exports. غالبًا ما تربط توافقية ESM قيمة CJS module.exports بتصدير افتراضي.

الأسئلة الشائعة
هل درس «أساسيات CommonJS — require/module.exports وexports» مجاني؟
نعم — نص درس «أساسيات CommonJS — require/module.exports وexports» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة JavaScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة JavaScript Academy 3 دروس في المجموع.
ماذا ستتعلم في «أساسيات CommonJS — require/module.exports وexports»؟
تعلّموا CommonJS: require() وmodule.exports والاختصار exports، مع لمحة صغيرة عن التوافق مع ESM تتمرن على JavaScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ JavaScript Academy؟
لا تُشترط خبرة سابقة. JavaScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 3.
كم من الوقت يستغرق درس «أساسيات CommonJS — require/module.exports وexports»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس JavaScript Academy هذا؟
نعم. كل درس في JavaScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- أساسيات ESM — import/export والافتراضي مقابل المسمى
- أساسيات CommonJS — require/module.exports وexports
- حلّ الوحدات في Node وحزم المتصفح