Kodax

NPM وإدارة الحزم — Node.js و Express

npm وإدارة الحزم

npm (Node Package Manager) يثبّت مكتبات الآخرين ويدير مشروعك. يأتي مع Node.

بداية مشروع

npm init -y                 # ينشئ package.json بإعدادات افتراضية
npm install express         # اعتمادية تشغيل
npm install -D nodemon      # اعتمادية تطوير فقط
npm install                 # تثبيت كل ما في package.json (بعد clone مثلاً)
npm uninstall express

package.json

{
  "name": "my-api",
  "version": "1.0.0",
  "type": "module",
  "scripts": {
    "dev": "node --watch src/index.js",
    "start": "node src/index.js",
    "test": "node --test"
  },
  "dependencies": { "express": "^5.1.0" },
  "devDependencies": { "eslint": "^9.0.0" },
  "engines": { "node": ">=20" }
}

| الحقل | المعنى |

|---|---|

| dependencies | يحتاجها التطبيق ليعمل في الإنتاج |

| devDependencies | للتطوير فقط (اختبارات، أدوات تنسيق) |

| scripts | أوامر مختصرة: npm run dev، و npm start و npm test بلا run |

| engines | إصدار Node المطلوب |

الإصدارات الدلالية (SemVer)

MAJOR.MINOR.PATCH مثل 5.1.2:

- PATCH: إصلاحات فقط. MINOR: ميزات متوافقة. MAJOR: تغييرات قد تكسر كودك.

- ^5.1.0: يقبل 5.x.x (لا 6). ~5.1.0: يقبل 5.1.x فقط. 5.1.0: هذا تحديداً.

package-lock.json

يسجّل الإصدار الدقيق لكل حزمة (ولاعتمادياتها) المثبتة. ارفعه إلى Git ليحصل الجميع والخادم على نفس الإصدارات. على الخوادم وفي CI استخدم npm ci: يثبت من الـ lock بالضبط وأسرع.

و node_modules لا يُرفع أبداً (.gitignore).

npx

npx create-vite@latest يشغّل أداة من npm دون تثبيتها عالمياً.

الأمان

كل حزمة تثبتها تشغّل كوداً على جهازك وخادمك:

- تحقق من الاسم (حزم مزيفة بأسماء متشابهة: expres بدل express).

- فضّل الحزم النشطة الموثوقة؛ وقلل الاعتماديات.

- npm audit يعرض الثغرات المعروفة في اعتمادياتك، و npm outdated الحزم القديمة.

- لا تشغّل npm audit fix --force بلا مراجعة: قد يرفع إصدارات MAJOR ويكسر المشروع.

تمرين

أنشئ مشروعاً جديداً، ثبّت express و -D eslint، وأضف سكربتي dev و start. احذف node_modules ثم أعد التثبيت بـ npm ci وتأكد أن المشروع يعمل.

// package.json
{
  "name": "my-api",
  "version": "1.0.0",
  "description": "API للتطبيق",
  "main": "server.js",
  "scripts": {
    "start": "node server.js",
    "dev": "nodemon server.js",
    "test": "jest"
  },
  "dependencies": {
    "express": "^4.18.2",
    "mongoose": "^7.0.0",
    "dotenv": "^16.0.0"
  },
  "devDependencies": {
    "nodemon": "^3.0.0",
    "jest": "^29.0.0"
  }
}

// تشغيل السكريبتات
// npm start
// npm run dev
// npm test
اختبر فهمك