أسئلة مقابلات Modules, ESM & Package Management في Node.js
10 سؤال عن Modules, ESM & Package Management من مسار Node.js. اقرأ الإجابة المختصرة لكل سؤال هنا، وافتح السؤال للشرح الكامل والأمثلة والأخطاء الشائعة والمصادر.
- مبتدئ
قارن بين نظامي CommonJS (CJS) و ES Modules (ESM) في Node.js وكيف يتعامل المحرك معهما؟
CJS متزامن ويعتمد على require() وقت التشغيل، بينما ESM يعتمد على import/export ثابت ويحلل شجرة الاعتمادات بشكل غير متزامن قبل التنفيذ.
اقرأ الشرح الكامل - متقدم
ما هي حقول 'exports' في package.json وكيف تفوقت على حقل 'main' القديم؟
تسمح بتعريف نقاط الدخول الرسمية للحزمة والتحكم في إمكانية الوصول إلى الملفات الداخلية وتحديد مخرجات مختلفة لـ CJS وESM.
اقرأ الشرح الكامل - متوسط
كيف تتعامل Node.js مع مشكلة التبعيات الدائرية (Circular Dependencies) بين CJS و ESM؟
في CJS يعاد كائن exports غير مكتمل أثناء التحميل المتزامن، بينما في ESM تُربط المراجع الحية ولكن قراءة متغيرات غير مهيأة قد ترمي ReferenceError.
اقرأ الشرح الكامل - مبتدئ
ما الفرق بين npm install و npm ci وما أهمية ملف package-lock.json؟
يقوم npm ci بمسح node_modules وتثبيت النسخ المحددة تماماً في package-lock.json لضمان بناء متطابق، بينما قد يقوم npm install بتحديث الحزم حسب نطاقات SemVer.
اقرأ الشرح الكامل - متوسط
كيف تعمل ميزة npm/pnpm Workspaces في إدارة مشاريع الـ Monorepo وما فوائدها؟
تسمح بإدارة عدة حزم داخل مستودع واحد بمشاركة الـ dependencies وربط الحزم المحلية ببعضها كـ symlinks دون الحاجة لنشرها خارجياً.
اقرأ الشرح الكامل - متقدم
ما هو خطر الـ Dual Package Hazard عند نشر مكتبة تدعم CJS و ESM معاً في Node.js؟
يحدث عندما يتم استيراد نسختين مختلفتين من نفس المكتبة في نفس التطبيق مما يؤدي لتكرار الـ Singletons وكسر الـ instanceof.
اقرأ الشرح الكامل - مبتدئ
كيف تستخدم مشغل الاختبارات الأصيل (node:test) في Node.js دون الحاجة لمكتبات خارجية؟
توفر وحدة node:test مع node:assert بيئة اختبارات سريعة ومبنية داخل المحرك عبر دوال test وdescribe وit.
اقرأ الشرح الكامل - مبتدئ
ما الفرق بين العلامات ^ و ~ والإصدار الصريح في ملف package.json؟
^ تسمح بتحديثات الـ Minor والـ Patch المتوافقة خلفياً، بينما ~ تقيد التحديثات بإصدارات الـ Patch فقط، وغياب الرمز يثبت الإصدار تماماً.
اقرأ الشرح الكامل - مبتدئ
ما هي أهمية استخدام بادئة node: عند استيراد الوحدات الأساسية مثل node:fs و node:path؟
توضح صراحة أن الموديول مدمج في النظام، وتمنع هجمات التسمم بالاعتمادات (Dependency Confusion) وتسرع عملية الـ Module Resolution.
اقرأ الشرح الكامل - متوسط
كيف تدعم Node.js الحديثة تشغيل ملفات TypeScript مباشرة عبر ميزة Type Stripping؟
منذ Node.js 22.18 و 23.6 يعمل Type Stripping افتراضيًا، فيمكن تشغيل ملف TypeScript مباشرة بالأمر node app.ts دون أدوات بناء؛ وفي الإصدارات الأقدم تُفعَّل الميزة بالراية --experimental-strip-types.
اقرأ الشرح الكامل