npm (Node Package Manager) هي أداة Node الافتراضية لتثبيت وإدارة حزم الطرف الثالث (التبعيات) وتشغيل سكريبتات المشروع. ملفان يحددان المشروع: package.json (البيان) و package-lock.json (شجرة التبعيات الدقيقة).
package.json — بيان المشروع
npm (Node Package Manager) هي أداة Node الافتراضية لتثبيت وإدارة حزم الطرف الثالث (التبعيات) وتشغيل سكريبتات المشروع. ملفان يحددان المشروع: package.json (البيان) و package-lock.json (شجرة التبعيات الدقيقة).
يسجل البيانات الوصفية والسكريبتات والتبعيات. ^4.18.0 هو نطاق semver — ^ يسمح بتحديثات الإصدار الثانوي والتصحيح المتوافقة (4.x.x لكن ليس 5.0.0).
package.json says: express ^4.18.0 (a RANGE — could install 4.18.0 or 4.19.2...)
package-lock.json: express 4.18.2 (the EXACT version + every nested dependency)
يثبت ملف القفل الإصدار الدقيق لكل حزمة (بما فيها التبعيات المتعدية) التي تم تثبيتها. هذا يضمن أن الجميع في الفريق — و CI و الإنتاج — يحصلون على شجرة التبعيات المتطابقة، مما يمنع أخطاء "يعمل على جهازي" من انجراف الإصدار.
npm install # install all deps from package.json (updates lockfile)
npm install express # add a dependency
npm install -D vitest # add a devDependency
npm ci # install EXACTLY from the lockfile (used in CI — fast, strict)
npm run dev # run a script defined in package.json
npm ci (مقابل npm install) يثبت بصرامة من ملف القفل دون تعديله — الأمر الصحيح لتكرار CI والإنتاج.
✓ ALWAYS commit package-lock.json → reproducible installs across the team & CI
npm وهذان الملفان هما أساس كل مشروع Node.
فهم package.json (التبعيات مقابل devDependencies، نطاقات semver، السكريبتات) وخاصة لماذا يوجد ملف القفل (التثبيتات الحتمية والقابلة للتكرار لشجرة التبعيات بأكملها) أمر ضروري — الالتزام بملف القفل واستخدام npm ci في CI يمنع الأخطاء الدقيقة والصعبة في التصحيح الناجمة عن حصول زملاء العمل أو الإنتاج على إصدارات حزمة مختلفة.