Menu
CoddyTech

وحدات CommonJS

جزء من قسم أساسيات Node.js في رحلة Node.js على Coddy. الدرس 10 من 33.

يستخدم كثير من شيفرات Node التي ستقرأها، في حزم npm والدروس القديمة، نظام وحدات آخر.

يُصدّر CommonJS باستخدام module.exports ويستورد باستخدام require. الملف الذي ينتهي اسمه بـ .cjs يكون دائمًا من نوع CommonJS، مهما كان النظام الذي يستخدمه بقية المشروع، واستيراد مثل هذا الملف باستخدام import يمنحك كائن module.exports الخاص به بوصفه القيمة الافتراضية:

// greet.cjs
function hello(name) {
    return 'Hello, ' + name;
}
module.exports = { hello };

// app.js
import greet from './greet.cjs';
console.log(greet.hello('Ada'));

تكون exports في البداية الكائن نفسه الذي تمثّله module.exports. تؤدي exports.hello = hello إلى إضافة خاصية إليه؛ أما exports = { hello } فتستبدل المتغير، ويحصل المستورِد على كائن فارغ.

challenge icon

التحدي

سهل

الملف الأقدم، legacy/stats.cjs، مكتوب بطريقة CommonJS، باستخدام module.exports. استخدمه في notes.js لإضافة أمر stats.

  1. أكمل countWords(notes) في legacy/stats.cjs. تستقبل مصفوفة الملاحظات وتُرجع العدد الإجمالي للكلمات فيها، محسوبًا عبر جميع الملاحظات. تفصل المسافات بين الكلمات. بالنسبة إلى الملاحظات الثلاث الأولية، Buy milk وCall Ada وWater the plants، تُرجع 7. وبالنسبة إلى مصفوفة فارغة، تُرجع 0.
  2. في notes.js، استورد الملف باستخدام import stats from './legacy/stats.cjs'. إنه ملف CommonJS، لذا فإن stats هو كائن module.exports الخاص به، والدالة هي stats.countWords.
  3. أضف أمر stats إلى سلسلة الشروط، قبل else الأخيرة. يطبع سطرًا واحدًا: عدد الملاحظات، ثم عدد الكلمات.
    3 notes, 7 words
    يظل الأمر where والأوامر الأخرى تعمل.

جرّب ذلك: اكتب stats في المربع بعد $ node notes.js واضغط على Enter. سترى 3 notes, 7 words. ثم اكتب add Buy bread، وبعد ذلك stats مرة أخرى: ستظل ترى 3 notes, 7 words، لأن المخزن ينسى الملاحظات الجديدة عند انتهاء البرنامج.

جرّب بنفسك

// وحدة برمجية قديمة، مكتوبة بأسلوب CommonJS.
function countWords(notes) {
    // أعِد العدد الإجمالي للكلمات في جميع الملاحظات.
    return 0;
}

module.exports = { countWords };

جميع دروس أساسيات Node.js

تدرّب بنفسك: Playground لـ Express