Node.js: مدير حزم npm

آخر تحديث: 2026-08-26

كانت أليس قد بدأت للتو في العمل على مشروع جديد يتطلب إضافة مكتبة Luxon لمعالجة التواريخ وإطار عمل Express لـ HTTP، بالإضافة إلى تهيئة أداة الاختبار Jest. في البداية، قامت بتنزيل ملفات JavaScript واحدًا تلو الآخر من المواقع الرسمية لكل منها ونسخها يدويًّا إلى مشروعها، لكنها كانت تواجه باستمرار تعارضات في الإصدارات، وكانت عملية الترقية بمثابة كابوس. استمر الوضع على هذا النحو إلى أن عرّفها أحد زملائها على npm — وهو أمر واحد لتثبيت التبعيات، حيث يتم تسجيل الإصدارات في パッケージ.json وتثبيتها على الإصدارات المحددة عبر ملف ロック. ومنذ ذلك الحين، لم يواجه الفريق أبدًا مشكلة «إنه يعمل على جهازي» مرة أخرى.

ستتعلم:

1. npm init — تهيئة مشروع

(1) التهيئة التفاعلية

عند تشغيل npm init، سيُطلب منك إدخال معلومات المشروع خطوة بخطوة، ليتم في النهاية إنشاء パッケージ.json.

▶ مثال: إنشاء ملف package.json تفاعليًّا

BASH
mkdir my-project && cd my-project
npm init
TEXT 📖 للعرض فقط
package name: (my-project)
version: (1.0.0)
description: A sample project
entry point: (index.js)
test command: jest
git repository:
keywords:
author: Alice
license: (ISC)

(2) التهيئة السريعة

استخدم -y لتخطي جميع المطالبات وإنشاء package.json الافتراضي.

▶ مثال: تخطي المطالبات لإنشاء النص بسرعة

BASH
npm init -y
TEXT 📖 للعرض فقط
Wrote to /home/alice/my-project/package.json

المحتوى الافتراضي الذي تم إنشاؤه パッケージ.json:

JSON
{
  "name": "my-project",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "license": "ISC"
}


2. npm install / uninstall — تثبيت التبعيات وإزالتها

(1) تثبيت المكونات التبعية

npm install <package> قم بتنزيل الحزمة إلى node_modules وانسخها إلى package.json.

▶ مثال: تثبيت التبعيات الخاصة بالإنتاج

BASH
npm install express

(2) تثبيت التبعيات الخاصة بالتطوير

--save-dev (يُشار إليه اختصارًا بـ -D) يقوم بتسجيل الحزم في devDependencies، وهو مخصص للاستخدام في بيئات التطوير فقط.

▶ مثال: تثبيت التبعيات الخاصة بالتطوير

BASH
npm install jest --save-dev

(3) إلغاء تثبيت التبعيات

npm uninstall احذف كلا الملفين الموجودين في node_modules والسجلات الموجودة في package.json.

▶ مثال: إلغاء تثبيت أحد المكونات التابعة

BASH
npm uninstall express

(4) تثبيت جميع المكونات التابعة

بعد استنساخ مشروع شخص آخر، قم بتشغيل npm install لاستعادة جميع التبعيات باستخدام package.json وpackage-lock.json.

▶ مثال: استعادة التبعيات

BASH
npm install
الأمر الوظيفة الحقول المطلوب ملؤها
npm install <pkg> تثبيت تبعيات الإنتاج التبعيات
npm install <pkg> --save-dev تثبيت تبعيات التطوير devDependencies
npm install <pkg> -g التثبيت العام لا تكتب في ملف package.json
npm uninstall <pkg> إلغاء تثبيت التبعيات إزالة الحقول المقابلة
npm install استعادة جميع التبعيات وفقًا للقائمة


3. التبعيات مقابل devDependencies

(1) تصنيف التبعية

dependencies يسرد الحزم المطلوبة لبيئة الإنتاج؛ devDependencies يسرد الحزم المستخدمة فقط خلال مرحلة التطوير.

▶ مثال: أقسام التبعيات في ملف package.json

JSON
{
  "dependencies": {
    "express": "^4.18.2",
    "luxon": "^3.4.4"
  },
  "devDependencies": {
    "jest": "^29.7.0",
    "eslint": "^8.56.0"
  }
}

(2) تخطي تبعيات التطوير أثناء التثبيت في بيئة الإنتاج

استخدم --production أو اضبط NODE_ENV=production لتخطي تثبيت devDependencies وتقليل حجم النشر.

▶ مثال: التثبيت في بيئة الإنتاج

BASH
npm install --production
عنصر المقارنة التبعيات التبعيات الخاصة بالتطوير
الغرض مطلوب لعمليات الإنتاج للتطوير/الاختبار فقط
أمر التثبيت npm install <pkg> npm install <pkg> -D
تثبيت الإصدار التثبيت دائمًا تخطي عند --production
الحزم الشائعة express، luxon، axios jest، eslint، nodemon
متطلبات النشر يجب تضمينها اختيارية


4. الغرض من ملف package-lock.json

(1) تحديد الإصدار بالضبط

パッケージ-ロック.json قم بتسجيل الإصدار الدقيق ورمز التجزئة الخاص بسلامة كل تابع لضمان اتساق نتائج التثبيت في جميع البيئات.

(2) تحسين سرعة التثبيت

يحتوي الملف ロック على شجرة التبعيات الكاملة، مما يسمح لـ npm بتخطي عملية تحديد الإصدارات وتنزيل الحزم مباشرةً.

▶ مثال: مقتطف من ملف «ロック»

JSON
{
  "node_modules/luxon": {
    "version": "3.4.4",
    "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.4.tgz",
    "integrity": "sha512-zaBViHBuQffgP8h...',
    "requires": {}
  }
}
الخاصية الوظيفة
الإصدار رقم الإصدار الدقيق
تم حل المشكلة رابط تنزيل الحزمة
السلامة تجزئة SHA-512، فحص السلامة
المتطلبات قائمة التبعيات الفرعية لهذه الحزمة


5. الترقيم الدلالي (SemVer)

(1) تنسيق رقم الإصدار

تنسيق SemVer هو MAJOR.MINOR.PATCH، حيث لكل مكون معنى محدد.

(2) رموز نطاق الإصدارات

استخدم الرموز الموجودة في package.json لتحديد نطاق الإصدارات المقبولة.

الرمز المعنى ^1.2.3 النطاق المسموح به ~1.2.3 النطاق المسموح به
^ متوافق مع الإصدارات الفرعية >=1.2.3 <2.0.0
~ إصدار تصحيح التوافق >=1.2.3 <1.3.0
>= أكبر من أو يساوي >=1.2.3
> أكبر من >1.2.3
x حرف البدل 1.2.x>=1.2.0 <1.3.0

▶ مثال: النتائج الفعلية لمختلف النطاقات

JSON
{
  "express": "^4.18.2",
  "lodash": "~4.17.21",
  "axios": ">=1.6.0",
  "デバッグ": "4.3.x"
}

(3) قواعد تحديث الإصدارات



6. التثبيت العام مقابل التثبيت المحلي

(1) التثبيت المحلي

بشكل افتراضي، يتم تثبيت الحزمة في مشروع node_modules؛ ويمكن للمشاريع المختلفة استخدام إصدارات مختلفة.

(2) التثبيت الشامل

أضف العلامة -g لتثبيت الحزمة في الدليل العام للنظام وتوفير أداة لسطر الأوامر.

▶ مثال: تثبيت أداة سطر الأوامر على مستوى النظام

BASH
npm install -g nodemon

(3) متى يتم استخدام التثبيت الشامل

قم بتثبيت الأدوات التي تتطلب الوصول إلى سطر الأوامر فقط (مثل nodemon و pm2)؛ أما تبعيات المشروع فيجب تثبيتها محليًّا دائمًا.

المقارنة التثبيت المحلي التثبيت العام (-g)
موقع التثبيت المشروع node_modules الدليل العام للنظام
package.json تضمين التبعيات عدم تضمينها
عزل الإصدارات استقلالية بين المشاريع مشاركة الإصدار نفسه على نطاق عالمي
حالات الاستخدام تبعيات وقت تشغيل المشروع أدوات واجهة سطر الأوامر
أمر التفريغ npm uninstall <pkg> npm uninstall -g <pkg>
الحزم الشائعة express، lodash nodemon، pm2، typescript


7. نصوص npm

(1) البرامج النصية المدمجة

start وtest هما نصوص برمجية مدمجة في npm يمكن تشغيلها مباشرةً باستخدام npm start / npm test.

(2) البرامج النصية المخصصة

يجب تنفيذ البرامج النصية الأخرى باستخدام npm run <name>.

▶ مثال: تكوين البرامج النصية الشائعة

JSON
{
  "scripts": {
    "start": "node index.js",
    "dev": "nodemon index.js",
    "test": "jest --coverage",
    "lint": "eslint src/"
  }
}
BASH
npm start
npm run dev
npm test
npm run lint

(3) الروابط بين البرامج النصية

يتم تنفيذ pre<script> وpost<script> تلقائيًا قبل البرنامج النصي المستهدف وبعده.

▶ مثال: استخدام الخطاف pre

JSON
{
  "scripts": {
    "prebuild": "npm run lint",
    "build": "node build.js",
    "postbuild": "echo Build complete"
  }
}

سيؤدي تشغيل npm run build إلى تنفيذ prebuild → build → postbuild تباعًا.

البرنامج النصي الأمر الوصف
البدء npm start تشغيل التطبيق
اختبار npm test تشغيل الاختبار
dev npm run dev وضع التطوير (مخصص)
lint npm run lint فحص الكود (مخصص)


8. الأمر npx

(1) تنفيذ حزمة عن بُعد مؤقتًا

npx يتيح لك تشغيل الحزم التي لم يتم تثبيتها مباشرةً، مما يمنع التلوث العام.

▶ مثال: استخدام create-react-app بشكل مؤقت

BASH
npx create-react-app my-app

(2) تشغيل أمر على نظام مُثبَّت محليًّا

سيقوم npx أولاً بالبحث عن node_modules/.bin محليًّا، ثم عالميًّا، وأخيرًا سيقوم بتنزيله عن بُعد.

▶ مثال: تشغيل أداة محلية

BASH
npx jest

(3) تشغيل إصدار معين

▶ مثال: استخدام إصدار معين من حزمة ما

BASH
npx express-generator@4 --view=ejs my-site


9. تهيئة ملف .npmrc

(1) التسلسل الهرمي لملفات التكوين

.npmrc يدعم ثلاثة مستويات: مستوى المشروع، ومستوى المستخدم، والمستوى العام، مرتبة حسب الأولوية من الأعلى إلى الأسفل.

▶ مثال: تكوين مصادر النسخ المتطابق في ملف .npmrc على مستوى المشروع

INI
registry=https://registry.npmmirror.com

(2) خيارات التكوين الشائعة

خيار التكوين الوظيفة مثال على القيمة
السجل تحديد مصدر التنزيل https://registry.npmmirror.com
بادئة الحفظ بادئة الإصدار الافتراضية ^ أو ~
البادئة مسار التثبيت العام /usr/local
ذاكرة التخزين المؤقت دليل ذاكرة التخزين المؤقت ~/.npm

▶ مثال: ضبط الإعدادات باستخدام أمر

BASH
npm config set registry https://registry.npmmirror.com
npm config get registry
npm config list


10. عملية تنفيذ الأمر "npm install"

100%
flowchart TD
    A[npm install] --> B{Does it exist? package-lock.json?}
    B -- Yes --> C[Read lock The exact version in the document]
    B -- No --> D[Analysis package.json Version range in]
    D --> E[Search registry Get the latest compatible version]
    E --> F[Generate a dependency tree]
    C --> G[Download the package to the cache]
    F --> G
    G --> H[Write node_modules Table of Contents]
    H --> I[Update package-lock.json]
    I --> J[Installation Complete]


11. مثال شامل: إعداد تبعيات المشروع من البداية

يوضح المثال التالي العملية الكاملة لكيفية قيام أليس بإنشاء مشروع من الصفر، وتثبيت التبعيات، وتهيئة البرامج النصية، وتشغيل خادم التطوير.

BASH
mkdir alice-server && cd alice-server
npm init -y
BASH
npm install express luxon
npm install jest nodemon --save-dev

パッケージ.json بعد التثبيت:

JSON
{
  "name": "alice-server",
  "version": "1.0.0",
  "description": "Alice's date-aware HTTP server",
  "main": "index.js",
  "scripts": {
    "start": "node index.js",
    "dev": "nodemon index.js",
    "test": "jest"
  },
  "dependencies": {
    "express": "^4.18.2",
    "luxon": "^3.4.4"
  },
  "devDependencies": {
    "jest": "^29.7.0",
    "nodemon": "^3.0.2"
  },
  "license": "ISC"
}

إنشاء ملف الإدخال index.js:

JAVASCRIPT
const express = require('express');
const { DateTime } = require('luxon');

const app = express();
const PORT = 3000;

app.get('/', (req, res) => {
  const now = DateTime.now().toISO();
  res.json({ message: 'Server is running', timestamp: now });
});

app.listen(PORT, () => {
  console.log(`Server listening on port ${PORT}`);
});

ابدأ تشغيل خادم التطوير:

BASH
npm run dev
TEXT 📖 للعرض فقط
[nodemon] starting node index.js
Server listening on port 3000


❓ أسئلة شائعة

س هل يجب تسجيل package-lock.json في Git؟
ج نعم. فهذا يضمن تثبيت الإصدارات الدقيقة ورموز التجزئة الخاصة بالسلامة، مما يضمن اتساق نتائج التثبيت على مستوى الفريق وبيئة التكامل المستمر (CI).
س هل يجب إدراج node_modules في Git؟
ج لا. فحجمه كبير جدًّا ويمكن استعادته باستخدام npm install، لذا يجب إضافته إلى .gitignore.
س ما الفرق بين ^1.2.3 و~1.2.3؟
ج تسمح علامة ^ بتحديثات الإصدارات الفرعية (>=1.2.3 <2.0.0)، بينما تسمح علامة ~ بتحديثات التصحيح فقط (>=1.2.3 <1.3.0).
س ما الفرق بين npx وnpm exec؟
ج npm exec هو الأمر المكافئ الذي توفره npm الإصدار 7 والإصدارات الأحدث؛ تعمل هذه الأوامر بنفس الطريقة، لكن npx أقصر ومتوافق مع الإصدارات السابقة.
س كيف يمكنني التحقق من إصدار حزمة مثبتة؟
ج استخدم npm list لعرض شجرة التبعيات المحلية، وnpm outdated للتحقق من الحزم التي تتوفر لها تحديثات.
س ماذا أفعل إذا فشل npm install وظهر خطأ في الأذونات EACCES؟
ج تجنب استخدام sudo. نوصي بتعيين الدليل العام إلى مسار يمكن للمستخدم الكتابة فيه باستخدام npm config set prefix.
س هل يتم تثبيت الحزم المدرجة تحت بند «التبعيات» في بيئة الإنتاج؟
ج نعم. يقوم npm install بتثبيت «التبعيات» بشكل افتراضي؛ ويجب عليك استخدام العلامة --production لتخطي «devDependencies».

📖 ملخص


📝 تمارين

  1. قم بتشغيل npm init -y لإنشاء مشروع، ثم قم بتعديل الاسم والوصف والنصوص البرمجية يدويًّا في ملف package.json
  2. قم بتثبيت express وluxon كمتطلبات، وقم بتثبيت jest كـ devDependency، ثم لاحظ التغييرات التي طرأت على ملف package.json
  3. استخدم npm list وnpm outdated للتحقق من حالة التبعية، على التوالي
  4. قم بإنشاء الملف .npmrc، واضبط السجل على https://registry.npmmirror.com، ثم أعد التثبيت للتحقق.
  5. اكتب برنامجًا نصيًّا مخصصًا hello يعرض الرسالة "Hello from npm scripts"، وقم بتشغيله باستخدام npm run hello
Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%