اليوم ، في الجزء الخامس من ترجمة دليل Node.js ، سنكمل تحليل ميزات npm ، على وجه الخصوص ، سنتطرق إلى مشكلات مثل اكتشاف الإصدارات المثبتة من حزم npm ، وتثبيت الإصدارات القديمة من الحزم ، وتحديث التبعيات ، وإلغاء تثبيت الحزم محليًا وعالميًا. نتحدث هنا عن npx.

[ننصحك بقراءة] أجزاء أخرى من الدورة معرفة إصدارات حزم npm المثبتة
لمعرفة إصدارات كافة حزم npm المثبتة في مجلد المشروع ، بما في ذلك تبعياتها ، قم بتشغيل الأمر التالي:
npm list
ونتيجة لذلك ، على سبيل المثال ، قد ينتج ما يلي:
> npm list /Users/flavio/dev/node/cowsay └─┬ cowsay@1.3.1 ├── get-stdin@5.0.1 ├─┬ optimist@0.6.1 │ ├── minimist@0.0.10 │ └── wordwrap@0.0.3 ├─┬ string-width@2.1.1 │ ├── is-fullwidth-code-point@2.0.0 │ └─┬ strip-ansi@4.0.0 │ └── ansi-regex@3.0.0 └── strip-eof@1.0.0
يمكنك معرفة نفس الشيء من خلال النظر إلى
package-lock.json
للمشروع ، ولكن بنية الشجرة التي يعرضها الأمر أعلاه أكثر ملاءمة للعرض.
للحصول على قائمة مماثلة من الحزم المثبتة عالميًا ، يمكنك استخدام الأمر التالي:
npm list -g
يمكنك عرض معلومات حول حزم المستوى الأعلى المحلية فقط (أي تلك التي قمت بتثبيتها بنفسك والمدرجة في
package.json
) على النحو التالي:
npm list
ونتيجة لذلك ، إذا قمت ، على سبيل المثال ، بتثبيت حزمة cowsay فقط ، فسيتم عرض ما يلي:
> npm list
لمعرفة إصدار حزمة معينة ، استخدم الأمر التالي:
npm list cowsay
نتيجة لتطبيقه ، نحصل على ما يلي تقريبًا:
> npm list cowsay /Users/flavio/dev/node/cowsay └── cowsay@1.3.1
هذا الأمر مناسب أيضًا لمعرفة إصدارات التبعية للحزم التي قمت بتثبيتها. في هذه الحالة ، يعمل اسم حزمة التبعية كاسم الحزمة التي تم تمريرها إليها ، وسيبدو إخراج الأمر كما يلي:
> npm list minimist /Users/flavio/dev/node/cowsay └─┬ cowsay@1.3.1 └─┬ optimist@0.6.1 └── minimist@0.0.10
سيتم تمييز إدخال حول حزمة التبعية في هذا الهيكل.
إذا كنت تريد معرفة ما هو أحدث إصدار لحزمة متوفرة في مستودع npm ، فستحتاج إلى أمر من النموذج التالي:
npm view [package_name] version
ورداً على ذلك ، تقوم بإصدار رقم إصدار الحزمة:
> npm view cowsay version 1.3.1
تثبيت إصدارات قديمة من حزم npm
قد يكون تثبيت إصدار قديم من حزمة npm ضروريًا لحل مشكلات التوافق. يمكنك تثبيت الإصدار المطلوب من الحزمة من npm باستخدام البنية التالية:
npm install <package>@<version>
في حالة حزمة cowsay التي نستخدمها كمثال ،
install cowsay
بتثبيت أحدث إصدار له (1.3.1 في وقت كتابة هذا التقرير). إذا كنت بحاجة إلى تثبيت الإصدار 1.2.0 ، فاستخدم هذا الأمر:
npm install cowsay@1.2.0
يمكنك تحديد إصدارات بتثبيت حزم عالمية:
npm install -g webpack@4.16.4
إذا كنت بحاجة إلى معرفة إصدارات الحزمة المتوفرة في npm ، فيمكنك القيام بذلك بمساعدة هذا البناء:
npm view <package> versions
هنا مثال على نتيجة عملها:
> npm view cowsay versions [ '1.0.0', '1.0.1', '1.0.2', '1.0.3', '1.1.0', '1.1.1', '1.1.2', '1.1.3', '1.1.4', '1.1.5', '1.1.6', '1.1.7', '1.1.8', '1.1.9', '1.2.0', '1.2.1', '1.3.0', '1.3.1' ]
تحديث تبعيات المشروع إلى أحدث إصداراتها
عند تثبيت حزمة باستخدام أمر من نوع
npm install <packagename>
، يتم تنزيل أحدث إصدار من المستودع ووضعه في مجلد
node_modules
. في هذه الحالة ، تتم إضافة الإدخالات المقابلة إلى ملفات
package.json
و
package-lock.json
الموجودة في مجلد المشروع.
بالإضافة إلى ذلك ، من خلال تثبيت حزمة ، تبحث npm عن تبعياتها وتثبيتها.
لنفترض أننا قمنا بتثبيت حزمة cowsay المألوفة عن طريق تشغيل الأمر
npm install cowsay
. سيتم تثبيت الحزمة في مجلد
node_modules
للمشروع ، وسيكون الإدخال التالي في ملف
package.json
:
{ "dependencies": { "cowsay": "^1.3.1" } }
package-lock.json
ستتضمن أيضًا معلومات حول هذه الحزمة. هنا جزء منه:
{ "requires": true, "lockfileVersion": 1, "dependencies": { "cowsay": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/cowsay/-/cowsay-1.3.1.tgz", "integrity": "sha512-3PVFe6FePVtPj1HTeLin9v8WyLl+VmM1l1H/5P+BTTDkMAjufp+0F9eLjzRnOHzVAYeIYFF5po5NjRrgefnRMQ==", "requires": { "get-stdin": "^5.0.1", "optimist": "~0.6.1", "string-width": "~2.1.1", "strip-eof": "^1.0.0" } } } }
من هذين الملفين يمكنك معرفة أننا قمنا بتثبيت إصدار cowsay 1.3.1 ، وأن قاعدة تحديث الحزمة محددة كـ
^1.3.1
. في الجزء الرابع من هذه السلسلة من المواد ، تحدثنا بالفعل عن قواعد الإصدار الدلالي. تذكر أن هذا الإدخال يعني أن npm يمكنها تحديث الحزمة عندما يتم إصدار إصداراتها الثانوية والتصحيحات.
على سبيل المثال ، إذا ظهر إصدار ثانوي جديد من الحزمة وقمنا بتشغيل الأمر
npm update
، يتم تحديث الإصدار المثبت من الحزمة ويتم تحديث المعلومات حول الحزمة المثبتة في ملف
package-lock.json
، ويظل ملف
package.json
هو.
لمعرفة ما إذا تم إصدار إصدارات جديدة من الحزم المستخدمة في المشروع ، يمكنك استخدام الأمر التالي:
npm outdated
فيما يلي نتائج هذا الأمر لمشروع لم يتم تحديث تبعياته لفترة طويلة:
تحليل تبعيات المشروع الموقوفةبعض تحديثات الحزمة المتاحة هي إصداراتها الرئيسية ، ولن تحدث تحديثات لها عند
npm update
الأمر
npm update
. لا يتم إجراء الترقية إلى الإصدارات الرئيسية من قبل هذا الفريق ، نظرًا لأنها (حسب التعريف) قد تحتوي على تغييرات كبيرة لا تتميز بالتوافق مع الإصدارات السابقة السابقة ، وتسعى npm إلى حفظ المطور من المشاكل التي قد تتسبب في استخدام هذه الحزم.
للترقية إلى الإصدارات الرئيسية الجديدة من جميع الحزم المستخدمة ، قم بتثبيت
npm-check-updates
عالميًا:
npm install -g npm-check-updates
ثم قم بتشغيل الأداة المساعدة التي قدمها:
ncu -u
سيقوم هذا الأمر بتحديث ملف
package.json
، وإجراء تغييرات على التعليمات الخاصة بإصدارات الحزمة المناسبة في
devDependencies
dependencies
و
devDependencies
. سيسمح ذلك لـ npm بتحديث الحزم المستخدمة في المشروع إلى إصدارات رئيسية جديدة بعد تشغيل الأمر
npm update
.
إذا كنت ترغب في تثبيت أحدث إصدارات الحزمة لمشروع قمت بتنزيله للتو ، والذي لا يحتوي حتى الآن على مجلد
node_modules
، فبدلاً من
npm update
، قم بتشغيل الأمر
npm install
.
إلغاء تثبيت الحزم محليًا أو عالميًا
لإلغاء تثبيت حزمة تم تثبيتها مسبقًا محليًا (باستخدام أمر
install <package-name>
) ، قم بتشغيل أمر يبدو كالتالي:
npm uninstall <package-name>
إذا كانت الحزمة مثبتة عالميًا ، فستحتاج إلى استخدام علامة
-g
(--global
) لإزالتها. على سبيل المثال ، قد يبدو أمر مشابه كما يلي:
npm uninstall -g webpack
عند تنفيذ مثل هذا الأمر ، لا يهم المجلد الحالي.
حول الاختيار بين التثبيت العالمي والمحلي للحزم
متى ولماذا يتم تثبيت الحزم بشكل أفضل على مستوى العالم؟ للإجابة على هذا السؤال ، دعونا نتذكر كيف يختلف التثبيت المحلي والعالمي للحزم:
- يتم تثبيت الحزم المحلية في الدليل الذي تنفذ فيه أمرًا من النموذج
npm install <package-name>
. توجد هذه الحزم في مجلد node_modules
الموجود في هذا الدليل. - يتم تثبيت الحزم العمومية في مجلد خاص (أي منها يعتمد على الإعدادات المحددة لنظامك) ، بغض النظر عن المكان الذي تنفذ فيه أمرًا من النموذج
npm install -g <package-name>
.
ربط الحزم المحلية والعالمية في الرمز هو نفسه:
require('package-name')
إذن ما هي أفضل طريقة لتثبيت الحزم؟
بشكل عام ، يجب تثبيت جميع الحزم محليًا. ونتيجة لذلك ، حتى إذا كان لديك العشرات من مشاريع Node.js ، يمكنك ضمان استخدامها ، إذا لزم الأمر ، لإصدارات مختلفة من الحزم نفسها.
يؤدي تحديث الحزمة العالمية إلى حقيقة أن جميع المشاريع التي يتم تطبيقها عليها ستستخدم إصدارها الجديد. من السهل أن نفهم أن هذا ، من حيث دعم المشروع ، يمكن أن يؤدي إلى كابوس حقيقي ، حيث قد تكون الإصدارات الجديدة من بعض الحزم غير متوافقة مع إصداراتها القديمة.
إذا كان لكل مشروع نسخته المحلية من الحزمة ، على الرغم من أن هذا قد يبدو وكأنه مضيعة للموارد ، فهذه رسوم صغيرة جدًا للفرصة لتجنب العواقب السلبية التي قد تنجم عن عدم توافق الإصدارات الجديدة من الحزم التي يتم تحديثها مركزيًا مع رمز المشروع.
يجب تثبيت الحزم عالميًا عندما تكون بعض الأدوات المساعدة التي يتم استدعاؤها من سطر الأوامر والتي يتم استخدامها في العديد من المشاريع.
يمكن أيضًا تثبيت هذه الحزم محليًا عن طريق تشغيل الأدوات المساعدة لسطر الأوامر التي توفرها باستخدام npx ، ولكن لا تزال بعض الحزم مثبتة بشكل أفضل عالميًا. مثل هذه الحزم التي قد تكون على دراية بها ، على سبيل المثال ، ما يلي:
- نبم
- إنشاء رد فعل التطبيق
- فيو-كلي
- نخر كلي
- موكا
- رد فعل CLI الأصلي
- غاتسبي كلي
- الى الابد
- نديمون
من الممكن أن نظامك يحتوي بالفعل على حزم مثبتة عالميًا. لمعرفة ذلك ، استخدم الأمر التالي:
npm list -g --depth 0
حول تبعيات المشروع
متى يجب اعتبار الحزمة بمثابة تبعية منتظمة للمشروع ضرورية لضمان عملها ، ومتى - باعتبارها تبعية للتنمية؟
عند تثبيت حزمة باستخدام أمر مثل
npm install <package-name>
يتم تثبيتها على أنها تبعية منتظمة. يتم تسجيل سجل هذه الحزمة في قسم
dependencies
في ملف
package.json
(قبل npm 5 ، تم عمل هذا السجل فقط باستخدام علامة -
--save
، والآن ليس من الضروري استخدامه).
يسمح لك استخدام
--save-dev
بتثبيت الحزمة تبعية تطوير. في هذه الحالة ، يتم تسجيلها في قسم
devDependencies
من ملف
devDependencies
.
تبعيات التنمية هي حزم مطلوبة في عملية تطوير المشروع ؛ أثناء عملها الطبيعي ، لا تكون مطلوبة. تشمل هذه الحزم ، على سبيل المثال ، أدوات الاختبار ، Webpack ، Babel.
عندما يتم نشر مشروع باستخدام الأمر
npm install
في
npm install
، حيث يوجد مجلد يحتوي على ملف
package.json
، سيؤدي ذلك إلى تثبيت جميع التبعيات ، حيث يفترض npm أن هذا التثبيت يتم لغرض العمل على المشروع.
لذلك ، إذا كانت الحزمة بحاجة إلى النشر في الإنتاج ، فعند نشرها ، تحتاج إلى استخدام الأمر npm
install --production
. بفضل علامة
--production
، لن يتم تثبيت تبعيات
--production
.
فائدة Npx
الآن سنتحدث عن فريق واحد قوي جدًا ،
npx ، ظهر في npm 5.2. إحدى إمكاناتها هي تشغيل الملفات القابلة للتنفيذ المضمنة في حزم npm. لقد فكرنا بالفعل في استخدام npx لتشغيل ملف مماثل من حزمة cowsay. الآن لنتحدث عن هذا بمزيد من التفصيل.
n استخدم npx لتبسيط تشغيل الأوامر المحلية
قام مطورو Node.js بنشر العديد من الملفات القابلة للتنفيذ (الأدوات المساعدة) في شكل حزم من المفترض أن يتم تثبيتها على مستوى العالم ، والتي توفر وصولًا ملائمًا إلى قدراتهم ، حيث يمكنك تشغيلها من سطر الأوامر ببساطة عن طريق إدخال اسم الأمر المطابق. ومع ذلك ، كان العمل في مثل هذه البيئة غير مريح للغاية إذا كان مطلوبًا تثبيت إصدارات مختلفة من نفس الحزم.
باستخدام أمر الأمر
npx commandname
يبحث تلقائيًا عن الملف المطلوب في مجلد المشروع
node_modules
. هذا يلغي الحاجة إلى معرفة المسار الدقيق لمثل هذا الملف. وهذا يجعل التثبيت الشامل للحزمة غير ضروري ، مما يوفر الوصول إليها من أي مكان في نظام الملفات من خلال استخدام متغير نظام
PATH
.
er أداء المرافق دون الحاجة إلى تثبيتها
يحتوي Npx على ميزة أخرى مثيرة للاهتمام ، والتي بفضلها يمكن تشغيل الأدوات المساعدة دون تثبيتها أولاً. هذا مفيد بشكل رئيسي للأسباب التالية:
- لا تركيب المرافق المطلوبة.
- يمكنك تشغيل إصدارات مختلفة من نفس الأدوات المساعدة عن طريق تحديد الإصدار المطلوب باستخدام بنيةversion.
دعونا نلقي نظرة على كيفية استخدام هذه الآلية ، باستخدام أداة
cowsay
التي تعرفها بالفعل. لذا ، إذا تم تثبيت حزمة cowsay على مستوى العالم ، فإن تنفيذ
cowsay "Hello"
على سطر الأوامر سينتج إلى وحدة التحكم بقرة "تتحدث":
_______ < Hello > ------- \ ^__^ \ (oo)\_______ (__)\ )\/\ ||----w | || ||
إذا لم يتم تثبيت حزمة cowsay بشكل عام ، فسيؤدي أمر مشابه إلى ظهور خطأ.
تتيح لك الأداة المساعدة npx تنفيذ مثل هذه الأوامر دون تثبيتها. يبدو ، في إطار مثالنا ، كما يلي:
npx cowsay "Hello"
سيعمل مثل هذا الأمر ، ولكن على الرغم من أن البقرة "الناطقة" ، بشكل عام ، لا تحقق الكثير من الفوائد ، إلا أنه يمكن استخدام نفس النهج لتنفيذ أوامر أكثر فائدة. إليك بعض الأمثلة:
- هناك أداة سطر أوامر مصممة لإنشاء تطبيقات Vue وتشغيلها. باستخدام npx ، يمكن تسميتها على
npx vue create my-vue-app
: npx vue create my-vue-app
. - يمكنك استخدام الأداة المساعدة
create-react-app
تطبيقات React. تبدو مكالمتها من خلال npx على النحو التالي: npx create-react-app my-react-app
.
بعد تنزيل واستخدام رمز npx المناسب ، سيتم حذفه.
▍ إطلاق كود JavaScript باستخدام إصدارات مختلفة من Node.js
من أجل تشغيل بعض التعليمات البرمجية باستخدام إصدارات مختلفة من Node.js ، يمكنك ، باستخدام npx ، الوصول إلى
node
حزمة npm ، مشيرة إلى إصدارها. يبدو هذا:
npx node@6 -v
هذا يلغي الحاجة إلى أدوات مثل nvm أو مديري الإصدارات الأخرى من Node.js.
fragبدء أجزاء التعليمات البرمجية التعسفية المتاحة في عنوان معين
Npx يسمح لك بتشغيل التعليمات البرمجية التي تم نشرها في npm ليس فقط. على وجه الخصوص ، إذا كان لديك رابط إلى جزء معين من التعليمات البرمجية (على سبيل المثال ، منشور منشور على
GitHub ) ، يمكنك تشغيله على
النحو التالي :
npx https:
بالطبع ، عند تنفيذ مثل هذا الرمز ، يجب ألا تنسى الأمان. Npx يمنح المطور فرصًا رائعة ، ولكنه يعني أيضًا مسؤولية كبيرة.
▍ النتائج
تحدثنا اليوم عن بعض آليات npm المفيدة واستخدام npx. عند هذه النقطة ، يجب أن يكون لديك فهم أساسي لجهاز npm وكيفية العمل مع مدير الحزم هذا. إذا كنت تريد إلقاء نظرة أعمق على npm ، فراجع
صفحة وثائق المشروع وجرب المزيد.
في المرة القادمة سوف نناقش بعض آليات Node.js الأساسية ، التي يجب فهمها لتطوير التطبيقات بنجاح لهذا النظام الأساسي.
أعزائي القراء! هل تستخدم npx؟
