وحدات 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 } فتستبدل المتغير، ويحصل المستورِد على كائن فارغ.
التحدي
سهلالملف الأقدم، legacy/stats.cjs، مكتوب بطريقة CommonJS، باستخدام module.exports. استخدمه في notes.js لإضافة أمر stats.
- أكمل
countWords(notes)فيlegacy/stats.cjs. تستقبل مصفوفة الملاحظات وتُرجع العدد الإجمالي للكلمات فيها، محسوبًا عبر جميع الملاحظات. تفصل المسافات بين الكلمات. بالنسبة إلى الملاحظات الثلاث الأولية،Buy milkوCall AdaوWater the plants، تُرجع7. وبالنسبة إلى مصفوفة فارغة، تُرجع0. - في
notes.js، استورد الملف باستخدامimport stats from './legacy/stats.cjs'. إنه ملف CommonJS، لذا فإنstatsهو كائنmodule.exportsالخاص به، والدالة هيstats.countWords. - أضف أمر
statsإلى سلسلة الشروط، قبلelseالأخيرة. يطبع سطرًا واحدًا: عدد الملاحظات، ثم عدد الكلمات.يظل الأمر3 notes, 7 wordswhereوالأوامر الأخرى تعمل.
جرّب ذلك: اكتب 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
1تشغيل JavaScript على Node
مرحبًا يا Nodeقراءة الأمروسائط سطر الأوامرالأوامرتدرّب بنفسك: Playground لـ Express