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 expresspackage.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اختبر فهمك