يجعل Node.js من الممكن كتابة التطبيقات في JavaScript على الخادم. إنها مبنية على وقت تشغيل جافا سكريبت V8 ومكتوبة في C ++ - لذلك فهي سريعة. في الأصل ، تم تصميمه كخادم بيئة للتطبيقات ، ولكن المطورين بدأوا في استخدامه لإنشاء وحدات لمساعدتهم في أتمتة المهام المحلية. ومنذ ذلك الحين ، تطور نظام بيئي جديد بالكامل من الأدوات القائمة على عقدة لتحويل وجه تطوير الواجهة الأمامية.
للاستفادة من هذه الوحدات (أو الحزم) في Node.js ، يجب أن نكون قادرين على تثبيتها وإدارتها بطريقة مفيدة. هذا هو المكان الذي يأتي فيه npm ، مدير حزمة العقدة. يقوم بتثبيت الحزم التي تريد استخدامها ويوفر واجهة مفيدة للعمل معها.
يمكن لـ `npm` تثبيت الحزم في الوضع المحلي أو العالمي. بشكل افتراضي ، يقوم NPM بتثبيت أي تبعية في الوضع المحلي. في الوضع المحلي ، يتم تثبيت الحزمة في مجلد node\_modules في دليل العمل الرئيسي الخاص بك. هذا الموقع مملوك للمستخدم الحالي. يتم تثبيت الحزم العالمية في {prefix} `/lib/node_modules/` والتي تعود ملكيتها إلى الجذر ، حيث عادة ما تكون {prefix} `/usr/ or /usr/local` . وهذا يعني أنك ستحتاج إلى استخدام sudo لتثبيت الحزم على مستوى العالم ، مما قد يتسبب في حدوث أخطاء في الإذن عند حل تبعيات الطرف الثالث ، فضلاً عن كونه أحد المخاوف الأمنية.
وتنقسم الوحدات المحلية الى مزيد من نوعين من depenedencies: `devDepenednecies` و `dependencies` . الفرق بين هذين ، هو أن devDependencies هي وحدات مطلوبة فقط أثناء التطوير ، في حين أن التبعيات هي وحدات مطلوبة أيضا في وقت التشغيل. لحفظ تبعية باعتبارها devDependency على التثبيت ، نحتاج إلى القيام `npm install --save-dev` ، بدلاً من مجرد `npm install --save` .
اختزال لطيفة لتثبيت devDependency التي أحب استخدامها هو `npm i -D` . الاختزال لحفظ التبعية العادية هو `-S` بدلاً من `-D` .
يعرض العمود الحالي لنا الإصدار المثبت محليًا. يخبرنا العمود الأحدث بأحدث إصدار من الحزمة. يخبرنا العمود "مطلوب" بأحدث إصدار من الحزمة التي يمكننا الترقية إليها دون كسر الشفرة الحالية.
## إدارة التبعيات مع package.json
إذا لم تستخدم علامة محددة وتثبيت وحدة مثل `npm install express` فسيتم تثبيت الوحدة في مجلد `node_modules` محليًا ، ولكن لن يتم تحديث `package.json` التي تحتفظ بسجلات كل تبعية نستخدمها في مشروع مع `node_modules` . وبالتالي ، فإن حزمة ستكون محددة التنمية ، لن يتم تثبيتها في بيئة runtimme. تأكد من أنك دائمًا تستخدم علامة مناسبة وتحديث ملف `package.json` محدثًا.
عند تثبيت الحزم محليًا ، فإنك تحتاج إلى ملف package.json. لتوليد واحدة يمكنك القيام بذلك باستخدام الأمر `npm init` . سيؤدي ذلك إلى طرح بعض الأسئلة عن طريق الضغط على Enter يمكنك الاحتفاظ بالقيم الافتراضية.
`npm` البرامج النصية `npm` لأتمتة المهام المتكررة. على سبيل المثال ، بناء مشروعك ، وتقليل ملفات Cascading Style Sheets (CSS) و JavaScript (JS). تُستخدم البرامج النصية أيضًا في حذف الملفات والمجلدات المؤقتة ، إلخ. يمكن تخصيصها ويمكن الوصول إليها عبر كائن `scripts` في `package.json` .
عندما تقوم npm بتثبيت حزمة فإنها تحتفظ بنسخة ، لذلك في المرة التالية التي ترغب في تثبيت هذه الحزمة ، لا تحتاج إلى الوصول إلى الشبكة. يتم تخزين النسخ مؤقتًا في الدليل .npm في المسار الرئيسي.
غزل هو أيضا مدير حزمة جافا سكريبت المتقدمة والمحافظة عليها من قبل الفيسبوك. كلاهما يشتركان في أوجه تشابه عالية عندما يتعلق الأمر باستخدامهما. من المفترض أن يكون أسرع في تثبيت التبعيات من npm. لتثبيته:
بعد كل عملية تثبيت أو ترقية أو إزالة ، يقوم الغزل بتحديث ملف yarn.lock الذي يتتبع إصدار الحزمة المضبوط المثبت في دليل node\_modules. تم تحديث ميزة مشابهة في npm. الآن هناك `package-lock.json` التي تتصرف بالضبط بنفس الطريقة كما `yarn.lock` في إصدارات أحدث من npm.
### أرقام إصدار الحزمة وماذا تعني
يكون الإصدار الأول لحزمة npm دائمًا 1.0.0
إصلاح الأخطاء ، أو تغييرات طفيفة زيادة الرقم الثالث ، سوف تصبح 1.0.0 هانس 1.0.1
الميزات الجديدة التي لا تكسر الإصدارات السابقة من حزمة زيادة الرقم الثاني ، سوف تصبح 1.0.0 هنس 1.1.0
جميع التغييرات التي تكسر الإصدارات السابقة من حزمة زيادة الرقم الأول ، سوف تصبح 1.0.0 هنس 2.0.0