---
title: NPM
localeTitle: الآلية الوقائية الوطنية
---
## الآلية الوقائية الوطنية

يجعل Node.js من الممكن كتابة التطبيقات في JavaScript على الخادم. إنها مبنية على وقت تشغيل جافا سكريبت V8 ومكتوبة في C ++ - لذلك فهي سريعة. في الأصل ، تم تصميمه كخادم بيئة للتطبيقات ، ولكن المطورين بدأوا في استخدامه لإنشاء وحدات لمساعدتهم في أتمتة المهام المحلية. ومنذ ذلك الحين ، تطور نظام بيئي جديد بالكامل من الأدوات القائمة على عقدة لتحويل وجه تطوير الواجهة الأمامية.

للاستفادة من هذه الوحدات (أو الحزم) في Node.js ، يجب أن نكون قادرين على تثبيتها وإدارتها بطريقة مفيدة. هذا هو المكان الذي يأتي فيه npm ، مدير حزمة العقدة. يقوم بتثبيت الحزم التي تريد استخدامها ويوفر واجهة مفيدة للعمل معها.

## تثبيت الآلية الوقائية الوطنية

لتثبيت `npm` لدينا لتنزيل ثنائيات Nodejs في envrionment المحلي. تتضمن ثنائيات Node.js أحدث إصدار من npm. للتحقق من ذلك:

 `npm -v 
 5.6.0 
` 

يوفر مدير حزمة العقدة (NPM) وظيفتين رئيسيتين -

*   المستودعات عبر الإنترنت لحزم node.js / الوحدات القابلة للبحث على `npmjs.com` .
    
*   الأداة المساعدة لسطر الأوامر لتثبيت الحزم Node.js ، قم بإدارة الإصدارات وإدارة التبعية لحزم Node.js.
    

## تثبيت الوحدات باستخدام NPM

يمكن لـ `npm` تثبيت الحزم في الوضع المحلي أو العالمي. بشكل افتراضي ، يقوم NPM بتثبيت أي تبعية في الوضع المحلي. في الوضع المحلي ، يتم تثبيت الحزمة في مجلد node\_modules في دليل العمل الرئيسي الخاص بك. هذا الموقع مملوك للمستخدم الحالي. يتم تثبيت الحزم العالمية في {prefix} `/lib/node_modules/` والتي تعود ملكيتها إلى الجذر ، حيث عادة ما تكون {prefix} `/usr/ or /usr/local` . وهذا يعني أنك ستحتاج إلى استخدام sudo لتثبيت الحزم على مستوى العالم ، مما قد يتسبب في حدوث أخطاء في الإذن عند حل تبعيات الطرف الثالث ، فضلاً عن كونه أحد المخاوف الأمنية.

### تثبيت الحزم في الوضع العالمي

ستصبح أي حزم مثبتة عالميًا متوفرة من سطر الأوامر. نستخدم العلامة --global أو g لتثبيت الحزم عالمياً.

 `$ npm install uglify-js --global 
` 

يمكننا سرد الحزم العالمية التي قمنا بتثبيتها باستخدام الأمر list npm.

 `$ npm list --global 
 /usr/local/lib 
 ├─┬ npm@5.6.0 
 │ ├── abbrev@1.1.0 
 │ ├── ansi-regex@2.1.1 
 │ ├── ansicolors@0.3.2 
 │ ├── ansistyles@0.1.3 
 .................... 
 └─┬ uglify-js@3.0.15 
  ├─┬ commander@2.9.0 
  │ └── graceful-readlink@1.0.1 
  └── source-map@0.5.6 
` 

ومع ذلك ، فإن المخرجات مطولة نوعًا ما. يمكننا تغيير ذلك مع الخيار --depth = 0.

 `$ npm list -g --depth=0 
 /usr/local/lib 
 ├── npm@5.6.0 
 └── uglify-js@3.0.15 
` 

### تثبيت الحزم في الوضع المحلي

عند تثبيت الحزم محليًا ، فأنت تفعل ذلك عادةً باستخدام ملف package.json.

 `npm install --save express 
` 

الآن يمكنك استخدام هذه الوحدة في ملف js الخاص بك كما يلي

 `const express = require('express'); 
` 

وتنقسم الوحدات المحلية الى مزيد من نوعين من depenedencies: `devDepenednecies` و `dependencies` . الفرق بين هذين ، هو أن devDependencies هي وحدات مطلوبة فقط أثناء التطوير ، في حين أن التبعيات هي وحدات مطلوبة أيضا في وقت التشغيل. لحفظ تبعية باعتبارها devDependency على التثبيت ، نحتاج إلى القيام `npm install --save-dev` ، بدلاً من مجرد `npm install --save` .

اختزال لطيفة لتثبيت devDependency التي أحب استخدامها هو `npm i -D` . الاختزال لحفظ التبعية العادية هو `-S` بدلاً من `-D` .

### تثبيت إصدار معين من الحزمة

للقيام بذلك ، نذكر إصدار الحزمة الذي نريد تثبيته.

 `$ npm install underscore@1.8.2 -S 
` 

لإزالة تبعية عمومية ، استخدم `-g` flag.

### إلغاء تثبيت الحزم المحلية

npm هو مدير حزم لذا يجب أن يكون قادرًا على إزالة حزمة. يمكننا إزالة الحزمة:

 `$ npm uninstall underscore -S 
` 

لتحديث تبعية عالمية ، استخدم `-g` flag.

### تحديث حزمة

لتحديث حزمة ، يمكنك القيام بما يلي:

 `$ npm update underscore -S 
` 

للتحقق مما إذا كان هناك تحديث متوفر لأي حزمة مرتبطة بمشروعنا:

 `$ npm outdated 
 
 Package     Current  Wanted  Latest  Location 
 underscore    1.8.2   1.8.3   1.8.3  project 
` 

يعرض العمود الحالي لنا الإصدار المثبت محليًا. يخبرنا العمود الأحدث بأحدث إصدار من الحزمة. يخبرنا العمود "مطلوب" بأحدث إصدار من الحزمة التي يمكننا الترقية إليها دون كسر الشفرة الحالية.

## إدارة التبعيات مع package.json

إذا لم تستخدم علامة محددة وتثبيت وحدة مثل `npm install express` فسيتم تثبيت الوحدة في مجلد `node_modules` محليًا ، ولكن لن يتم تحديث `package.json` التي تحتفظ بسجلات كل تبعية نستخدمها في مشروع مع `node_modules` . وبالتالي ، فإن حزمة ستكون محددة التنمية ، لن يتم تثبيتها في بيئة runtimme. تأكد من أنك دائمًا تستخدم علامة مناسبة وتحديث ملف `package.json` محدثًا.

عند تثبيت الحزم محليًا ، فإنك تحتاج إلى ملف package.json. لتوليد واحدة يمكنك القيام بذلك باستخدام الأمر `npm init` . سيؤدي ذلك إلى طرح بعض الأسئلة عن طريق الضغط على Enter يمكنك الاحتفاظ بالقيم الافتراضية.

 `$ npm init 
 package name: (project) 
 version: (1.0.0) 
 description: Demo of package.json 
 entry point: (index.js) 
 test command: 
 git repository: 
 keywords: 
 author: 
 license: (ISC) 
` 

فكر في `package.json` باعتباره حارس جميع التبعيات أو مظاهر مشروع Node.js. إذا كنت تريد طريقة أسرع لإنشاء ملف package.json استخدم `npm init --y` .

قائمة السمات المشتركة في ملف `package.json` :

*   اسم - اسم الحزمة
    
*   نسخة - النسخة الدلالية من الحزمة
    
*   وصف - وصف الحزمة
    
*   الصفحة الرئيسية - الصفحة الرئيسية للحزمة
    
*   مؤلف - مؤلف الحزمة
    
*   المساهمين - اسم المساهمين في الحزمة
    
*   التبعيات - قائمة التبعيات. تقوم الآلية الوقائية الوطنية (NPM) تلقائيًا بتثبيت جميع التبعيات المذكورة هنا في مجلد node\_module الخاص بالحزمة.
    
*   devDependencies - قائمة بجميع الاعتماديات الخاصة بالتنمية
    
*   مستودع - نوع مستودع وعنوان URL للحزمة
    
*   نقطة الدخول الرئيسية للحزمة
    
*   الكلمات الرئيسية - الكلمات الرئيسية
    
*   الترخيص - ترخيص لحزمك حتى يعرف الناس كيف يُسمح لهم باستخدامه ، وأية قيود تفرضها عليه.
    
*   scripts - الخاصية "scripts" هي قاموس يحتوي على أوامر البرنامج النصي التي يتم تشغيلها في أوقات مختلفة في دورة حياة الحزمة الخاصة بك.
    
*   config (التكوين) - كائن يمكن استخدامه لتعيين معلمات التكوين المستخدمة في البرامج النصية للنصوص التي تستمر عبر الترقيات.
    

مثال:

 `{ 
   "name": "express", 
      "description": "Fast, unopinionated, minimalist web framework", 
      "version": "4.11.2", 
      "author": { 
 
         "name": "TJ Holowaychuk", 
         "email": "tj@vision-media.ca" 
      }, 
 
   "contributors": [{ 
      "name": "Aaron Heckmann", 
      "email": "aaron.heckmann+github@gmail.com" 
   }, 
 
    ], 
   "license": "MIT", "repository": { 
      "type": "git", 
      "url": "https://github.com/strongloop/express" 
   }, 
   "homepage": "https://expressjs.com/", "keywords": [ 
      "express", 
      "framework", 
      "sinatra", 
      "web", 
      "rest", 
      "restful", 
      "router", 
      "app", 
      "api" 
   ], 
   "dependencies": { 
      "serve-static": "~1.8.1", 
 
   }, 
   "devDependencies": { 
      "jade": "~1.9.1", 
   }, 
   "engines": { 
      "node": ">= 0.10.0" 
   }, 
   "files": [ 
      "LICENSE", 
      "History.md", 
      "Readme.md", 
      "index.js", 
      "lib/" 
   ], 
   "scripts": { 
      "test": "mocha --require test/support/env 
         --reporter spec --bail --check-leaks test/ test/acceptance/", 
      "test-cov": "istanbul cover node_modules/mocha/bin/_mocha 
         -- --require test/support/env --reporter dot --check-leaks test/ test/acceptance/", 
      "test-tap": "mocha --require test/support/env 
         --reporter tap --check-leaks test/ test/acceptance/", 
      "test-travis": "istanbul cover node_modules/mocha/bin/_mocha 
         --report lcovonly -- --require test/support/env 
         --reporter spec --check-leaks test/ test/acceptance/" 
   }, 
 
 } 
` 

## مخطوطات npm

`npm` البرامج النصية `npm` لأتمتة المهام المتكررة. على سبيل المثال ، بناء مشروعك ، وتقليل ملفات Cascading Style Sheets (CSS) و JavaScript (JS). تُستخدم البرامج النصية أيضًا في حذف الملفات والمجلدات المؤقتة ، إلخ. يمكن تخصيصها ويمكن الوصول إليها عبر كائن `scripts` في `package.json` .

 `{ 
  "name": "super-cool-package", 
  "version": "1.0.0", 
  "scripts": {} 
 } 
` 

مثال على أكثر نصوص NPM شيوعًا:

 `"scripts": { 
    "start": "node index.js", 
    ... 
 } 
` 

## npm الكاش

عندما تقوم npm بتثبيت حزمة فإنها تحتفظ بنسخة ، لذلك في المرة التالية التي ترغب في تثبيت هذه الحزمة ، لا تحتاج إلى الوصول إلى الشبكة. يتم تخزين النسخ مؤقتًا في الدليل .npm في المسار الرئيسي.

 `$ ls ~/.npm 
 lodash.zipobject 
 log-driver 
 log-symbols 
 logalot 
 logfmt 
 loglevel 
 long-timeout 
 longest 
 longest-strea 
` 

سيصبح هذا الدليل مزدحمًا مع الحزم القديمة بمرور الوقت ، لذلك من المفيد تنظيفه في بعض الأحيان.

 `$ npm cache clean 
` 

## غزل - بديل ل npm

غزل هو أيضا مدير حزمة جافا سكريبت المتقدمة والمحافظة عليها من قبل الفيسبوك. كلاهما يشتركان في أوجه تشابه عالية عندما يتعلق الأمر باستخدامهما. من المفترض أن يكون أسرع في تثبيت التبعيات من npm. لتثبيته:

 `npm install -g yarn 
` 

لا ينوي غزل استبدال npm ، أكثر مثل تحسين عليه. ويستخدم نفس ملف package.json ، ويحفظ التبعيات إلى `node_modules/` folder. لتهيئة مشروع ، سوف تستخدم:

 `yarn init 
` 

### إضافة ، وترقية ، وإزالة التبعيات

إضافة تبعية جديدة أمر سهل ومماثل إلى npm:

 `yarn add [package-name] 
` 

إذا كنت تريد إصدارًا أو علامة حزمة معينة ، فيمكنك القيام بذلك.

 `yarn add express@4.14.1 
` 

بالنسبة إلى تبعيات dev ، تبعية الأقران والتبعيات الاختيارية التي تمر بها --dev --peer --optional على التوالي.

 `yarn add gulp --dev 
` 

سيوفر الجولب تحت devDependencies. لترقية حزمة أو إزالتها ، يمكنك فقط استبدال أمر الإضافة إما بترقية أو إزالة متبوعة باسم الحزمة.

 `# upgrade a gulp from 3.9.1 to version 4 
 yarn upgrade gulp@4.0 
 
 # remove a gulp 
 yarn remove gulp 
` 

بعد كل عملية تثبيت أو ترقية أو إزالة ، يقوم الغزل بتحديث ملف 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

من المهم تذكر هذا عند تحديث الحزم للحفاظ على استقرار مشروعك!