دليل Node.js ، الجزء 4: ملفات npm و package.json و package-lock.json

ننشر اليوم الجزء الرابع من ترجمة Node.js. في هذه المقالة ، سنبدأ في الحديث عن npm وسننظر أيضًا في ميزات ملفات package.json و package-lock.json .




أساسيات Npm


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

في البداية ، تم إنشاء npm كنظام لإدارة الحزم لـ Node.js ، ولكن اليوم يتم استخدامه أيضًا لتطوير مشروعات الواجهة الأمامية في JavaScript. للتفاعل مع سجل npm ، يتم استخدام الأمر الذي يحمل نفس الاسم ، مما يمنح المطور كمية هائلة من الفرص.

packagesحزم التحميل


باستخدام الأمر npm ، يمكنك تنزيل الحزم من التسجيل. أدناه سننظر في أمثلة على استخدامه.

▍تثبيت جميع تبعيات المشروع


إذا كان المشروع يحتوي على ملف package.json ، فيمكنك تثبيت جميع تبعيات هذا المشروع باستخدام الأمر التالي:

 npm install 

node_modules هذا الأمر كل ما يحتاجه المشروع ويضع هذه المواد في مجلد node_modules ، node_modules إذا لم يكن موجودًا في دليل المشروع.

▍تثبيت حزمة منفصلة


يمكن تثبيت واحدة منفصلة بالأمر التالي:

 npm install <package-name> 

يمكنك أن ترى في كثير من الأحيان كيف لا يتم استخدام هذا الأمر في مثل هذا النموذج البسيط ، ولكن مع بعض العلامات. اعتبرهم:

  • تسمح --save علامة - --save بتثبيت حزمة وإضافة إدخال عنها في قسم dependencies في ملف package.json ، الذي يصف تبعيات المشروع. يستخدم المشروع هذه التبعيات لتنفيذ وظائفه الرئيسية ، ويتم تثبيتها أثناء نشرها على الخادم (بعد إصدار npm 5 ، يتم إجراء إدخالات حول الحزم المثبتة في قسم التبعيات تلقائيًا ، وبدون استخدام هذه العلامة).
  • تسمح لك علامة --save-dev بتثبيت الحزمة وإضافة إدخال عنها إلى القسم الذي يحتوي على قائمة --save-dev التطوير (أي الحزم المطلوبة أثناء تطوير المشروع ، مثل المكتبات للاختبار ، ولكنها ليست مطلوبة لتشغيلها) من ملف package.json دعا devDependencies .

▍ تحديث حزمة


لتحديث الحزم ، استخدم الأمر التالي:

 npm update 

بعد تلقي هذا الأمر ، ستقوم npm بفحص جميع الحزم بحثًا عن إصداراتها الجديدة ، وإذا وجدت إصداراتها الجديدة التي تتوافق مع قيود إصدار الحزمة المحددة في package.json ، قم بتثبيتها.

يمكنك أيضًا ترقية حزمة منفصلة:

 npm update <package-name> 

packagesتحميل حزم إصدارات معينة


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

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

في جميع هذه الحالات ، تعد القدرة على تحديد إصدارات الحزمة المطلوبة من قبل المشروع مفيدة للغاية. يتبع Npm معيار الإصدار الدلالي (semver).

unتشغيل البرامج النصية


يدعم ملف package.json القدرة على وصف الأوامر (البرامج النصية) التي يمكن إطلاقها باستخدام هذا البناء:

 npm <task-name> 

على سبيل المثال ، إليك ما تبدو عليه قائمة النصوص البرمجية في القسم المقابل من الملف:

 { "scripts": {   "start-dev": "node lib/server-development",   "start": "node lib/server-production" } } 

من الشائع جدًا استخدام هذه الميزة لبدء Webpack:

 { "scripts": {   "watch": "webpack --watch --progress --colors --config webpack.conf.js",   "dev": "webpack --progress --colors --config webpack.conf.js",   "prod": "NODE_ENV=production webpack -p --config webpack.conf.js", } } 

هذا النهج يجعل من الممكن استبدال إدخال الأوامر الطويلة ، المشحونة بالأخطاء ، بالإنشاءات البسيطة التالية:

 $ npm watch $ npm dev $ npm prod 

here أين يقوم npm بتثبيت الحزم؟


عند تثبيت الحزم باستخدام npm (أو الغزل ) ، يتوفر خياران للتثبيت: محلي وعالمي.

بشكل افتراضي ، عند استخدام أمر مثل npm install lodash ، تظهر الحزمة في مجلد node_modules الموجود في مجلد المشروع. بالإضافة إلى ذلك ، إذا تم تنفيذ الأمر أعلاه ، فإن npm ستضيف أيضًا إدخالًا لمكتبة lodash إلى قسم dependencies في ملف package.json ، الموجود في الدليل الحالي.

يتم تنفيذ التثبيت العام للحزم باستخدام علامة -g :

 npm install -g lodash 

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

لمعرفة ذلك ، استخدم الأمر التالي:

 npm root -g 

في نظام macOS أو Linux ، قد تظهر ملفات الحزمة في دليل /usr/local/lib/node_modules . على نظام التشغيل Windows ، يمكن أن يكون شيئًا مثل C:\Users\YOU\AppData\Roaming\npm\node_modules .

ومع ذلك ، إذا كنت تستخدم Node.js nvm للتحكم في الإصدار ، فقد يتغير المسار إلى مجلد الحزمة العام.

على سبيل المثال ، أستخدم nvm ، ويخبرني الأمر أعلاه أنه تم تثبيت الحزم العامة على هذا العنوان: /Users/flavio/.nvm/versions/node/v8.9.0/lib/node_modules .

and استخدام وتنفيذ الحزم المثبتة مع npm


كيفية استخدام الوحدات المركبة باستخدام npm ، محليًا أو عالميًا ، تقع في مجلدات node_modules ؟ لنفترض أنك قمت بتثبيت مكتبة lodash الشهيرة ، والتي تحتوي على العديد من وظائف المساعد المستخدمة في تطوير JavaScript:

 npm install lodash 

سيقوم مثل هذا الأمر بتثبيت المكتبة في المجلد المحلي لمشروع node_modules .

لاستخدامه في التعليمات البرمجية الخاصة بك ، ما عليك سوى استيراده باستخدام الأمر require :

 const _ = require('lodash') 

ماذا لو كانت الحزمة ملف تنفيذي؟

في هذه الحالة ، سينتهي الملف القابل للتنفيذ في node_modules/.bin/ folder .

يمكنك إلقاء نظرة على كيفية عمل هذه الآلية عن طريق تثبيت حزمة cowsay . هو برنامج فكاهي مكتوب لسطر الأوامر. إذا قمت بتمرير بعض النص إلى هذه الحزمة ، في وحدة التحكم ، على غرار فن ASCII ، فسيتم عرض صورة بقرة "تلفظ" النص المقابل. يمكن للمخلوقات الأخرى "صوت" النص.

لذا ، بعد تثبيت الحزمة باستخدام الأمر npm install cowsay ، npm install cowsay بها ، مع تبعياته ، في node_modules . وفي مجلد .bin المخفي ، ستتم كتابة روابط رمزية لملفات cowsay الثنائية.

كيفية تنفيذها؟

بالطبع ، يمكنك إدخال شيء مثل ./node_modules/.bin/cowsay في المحطة الطرفية للاتصال بالبرنامج ، وهذا نهج عملي ، ولكن من الأفضل بكثير استخدام npx ، وهي أداة لإطلاق حزمة npm التنفيذية ، المضمنة في npm منذ الإصدار 5.2. في حالتنا ، نحن بحاجة إلى الأمر التالي:

 npx cowsay 

سيتم العثور تلقائيًا على المسار إلى حزمة npx.

ملف Package.json


يعد ملف package.json عنصرًا أساسيًا في العديد من المشاريع التي تعتمد على النظام البيئي Node.js. إذا كنت مبرمجًا في جافا سكريبت ، سواء كان تطوير الخادم أو العميل ، فمن المحتمل أنك رأيت هذا الملف بالفعل. لماذا هو مطلوب؟ ما الذي يجب أن تعرفه عنه وما هي الفرص التي يمنحك إياها؟

Package.json هو نوع من ملف البيان لمشروع. يضع تحت تصرف المطور العديد من الاحتمالات المتنوعة. على سبيل المثال ، يمثل المستودع المركزي لإعدادات الأدوات المستخدمة في المشروع. بالإضافة إلى ذلك ، هو المكان الذي يكتب فيه npm والغزل معلومات حول أسماء وإصدارات الحزم المثبتة.

structure هيكل الملف


فيما يلي مثال لملف package.json بسيط:

 { } 

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

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

فيما يلي package.json أمثلة أخرى. package.json :

 { "name": "test-project" } 

يقوم بتعيين خاصية name ، وقيمتها هي اسم التطبيق أو الحزمة التي تحتوي موادها على نفس المجلد حيث يوجد هذا الملف.

فيما يلي مثال أكثر تعقيدًا أخذته من مثال تطبيق مكتوب باستخدام Vue.js:

 { "name": "test-project", "version": "1.0.0", "description": "A Vue.js project", "main": "src/main.js", "private": true, "scripts": {   "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",   "start": "npm run dev",   "unit": "jest --config test/unit/jest.conf.js --coverage",   "test": "npm run unit",   "lint": "eslint --ext .js,.vue src test/unit",   "build": "node build/build.js" }, "dependencies": {   "vue": "^2.5.2" }, "devDependencies": {   "autoprefixer": "^7.1.2",   "babel-core": "^6.22.1",   "babel-eslint": "^8.2.1",   "babel-helper-vue-jsx-merge-props": "^2.0.3",   "babel-jest": "^21.0.2",   "babel-loader": "^7.1.1",   "babel-plugin-dynamic-import-node": "^1.2.0",   "babel-plugin-syntax-jsx": "^6.18.0",   "babel-plugin-transform-es2015-modules-commonjs": "^6.26.0",   "babel-plugin-transform-runtime": "^6.22.0",   "babel-plugin-transform-vue-jsx": "^3.5.0",   "babel-preset-env": "^1.3.2",   "babel-preset-stage-2": "^6.22.0",   "chalk": "^2.0.1",   "copy-webpack-plugin": "^4.0.1",   "css-loader": "^0.28.0",   "eslint": "^4.15.0",   "eslint-config-airbnb-base": "^11.3.0",   "eslint-friendly-formatter": "^3.0.0",   "eslint-import-resolver-webpack": "^0.8.3",   "eslint-loader": "^1.7.1",   "eslint-plugin-import": "^2.7.0",   "eslint-plugin-vue": "^4.0.0",   "extract-text-webpack-plugin": "^3.0.0",   "file-loader": "^1.1.4",   "friendly-errors-webpack-plugin": "^1.6.1",   "html-webpack-plugin": "^2.30.1",   "jest": "^22.0.4",   "jest-serializer-vue": "^0.3.0",   "node-notifier": "^5.1.2",   "optimize-css-assets-webpack-plugin": "^3.2.0",   "ora": "^1.2.0",   "portfinder": "^1.0.13",   "postcss-import": "^11.0.0",   "postcss-loader": "^2.0.8",   "postcss-url": "^7.2.1",   "rimraf": "^2.6.0",   "semver": "^5.3.0",   "shelljs": "^0.7.6",   "uglifyjs-webpack-plugin": "^1.1.1",   "url-loader": "^0.5.8",   "vue-jest": "^1.0.2",   "vue-loader": "^13.3.0",   "vue-style-loader": "^3.0.1",   "vue-template-compiler": "^2.5.2",   "webpack": "^3.6.0",   "webpack-bundle-analyzer": "^2.9.0",   "webpack-dev-server": "^2.9.1",   "webpack-merge": "^4.1.0" }, "engines": {   "node": ">= 6.0.0",   "npm": ">= 3.0.0" }, "browserslist": [   "> 1%",   "last 2 versions",   "not ie <= 8" ] } 

كما ترون ، هناك الكثير من الأشياء المثيرة للاهتمام. وبالتحديد ، يمكن تمييز الخصائص التالية هنا:

  • name - يحدد اسم التطبيق (الحزمة).
  • version - يحتوي على معلومات حول الإصدار الحالي من التطبيق.
  • description - description موجز للتطبيق.
  • main - لتعيين نقطة الدخول للتطبيق.
  • private - إذا تم تعيين هذه الخاصية على " true ، فهذا يمنع نشر الحزمة عن طريق الخطأ إلى npm.
  • scripts - تحدد مجموعة من البرامج النصية Node.js التي يمكن تشغيلها.
  • dependencies - تحتوي على قائمة بحزم npm التي يعتمد عليها التطبيق.
  • devDependencies - يحتوي على قائمة بحزم npm المستخدمة عند تطوير مشروع ، ولكن ليس عندما يعمل حقًا.
  • engines - تعيين قائمة إصدارات Node.js التي يتم تشغيل التطبيق عليها.
  • browserlist - تُستخدم لتخزين قائمة المتصفحات (وإصداراتها) التي يجب أن يدعمها التطبيق.

يتم استخدام جميع هذه الخصائص إما بواسطة npm أو بواسطة أدوات أخرى مستخدمة طوال دورة حياة التطبيق.

used الخصائص المستخدمة في package.json


لنتحدث عن الخصائص التي يمكن استخدامها في package.json . هنا سنستخدم مصطلح "الحزمة" ، ولكن كل ما يقال عن الحزم ينطبق أيضًا على التطبيقات المحلية التي لا يخطط لاستخدامها كحزم.

يتم استخدام معظم الخصائص التي نصفها فقط لاحتياجات مستودع npm ، وبعضها يستخدم من قبل البرامج التي تتفاعل مع التعليمات البرمجية مثل نفس npm.

خاصية الاسم


تقوم خاصية name بتعيين اسم الحزمة:

 "name": "test-project" 

يجب أن يكون الاسم أقصر من 214 حرفًا ، ويجب ألا يتضمن مسافات ، ويجب أن يتكون فقط من الأحرف الكبيرة والواصلات ( - ) والشرطات السفلية ( _ ).

توجد قيود مماثلة لأنه عندما يتم نشر حزمة في npm ، يتم استخدام اسمها لتشكيل عنوان URL لصفحة الحزمة.

إذا نشرت رمز الحزمة على GitHub ، في المجال العام ، فإن الخيار الجيد لاسم الحزمة هو اسم مستودع GitHub المقابل.

خاصية المؤلف


تحتوي خاصية author على معلومات حول مؤلف الحزمة:

 { "author": "Flavio Copes <flavio@flaviocopes.com> (https://flaviocopes.com)" } 

يمكن تقديمه بالصيغة التالية:

 { "author": {   "name": "Flavio Copes",   "email": "flavio@flaviocopes.com",   "url": "https://flaviocopes.com" } } 

خاصية المساهمين


تحتوي خاصية contributors على مصفوفة تحتوي على معلومات حول الأشخاص الذين ساهموا في المشروع:

 { "contributors": [   "Flavio Copes <flavio@flaviocopes.com> (https://flaviocopes.com)" ] } 

قد يبدو هذا العقار كما يلي:

 { "contributors": [   {     "name": "Flavio Copes",     "email": "flavio@flaviocopes.com",     "url": "https://flaviocopes.com"   } ] } 

خاصية البق


تحتوي خاصية bugs على رابط إلى أداة تتبع الأخطاء في المشروع ، فمن المحتمل جدًا أن يؤدي هذا الرابط إلى صفحة نظام تتبع أخطاء GitHub:

 { "bugs": "https://github.com/flaviocopes/package/issues" } 

خاصية الصفحة الرئيسية


تتيح لك خاصية homepage تعيين الصفحة الرئيسية للحزمة:

 { "homepage": "https://flaviocopes.com/package" } 

خاصية الإصدار


تحتوي خاصية version على معلومات حول الإصدار الحالي من الحزمة:

 "version": "1.0.0" 

عند تشكيل قيمة هذه الخاصية ، يجب عليك اتباع قواعد الإصدار الدلالي . هذا يعني ، على وجه الخصوص ، أن رقم الإصدار يتم تمثيله دائمًا بثلاثة أرقام: xxx

الرقم الأول هو الإصدار الرئيسي للحزمة ، والثاني هو الإصدار الثانوي ، والثالث هو إصدار التصحيح.

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

ملكية الترخيص


تحتوي ملكية license على معلومات license الحزمة:

 "license": "MIT" 

خاصية الكلمات الرئيسية


تحتوي خاصية keywords على مجموعة من الكلمات الأساسية المتعلقة بوظيفة الحزمة:

 "keywords": [ "email", "machine learning", "ai" ] 

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

خاصية الوصف


تحتوي خاصية description على وصف موجز للحزمة:

 "description": "A package to work with strings" 

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

خاصية المستودع


تشير خاصية repository الى مكان وجود مستودع الحزمة:

 "repository": "github:flaviocopes/testing", 

لاحظ أن قيمة هذه الخاصية لها بادئة github . يدعم Npm أيضًا البادئات لبعض الخدمات الشائعة الأخرى من هذا النوع:

 "repository": "gitlab:flaviocopes/testing", "repository": "bitbucket:flaviocopes/testing", 

يمكن أيضًا ضبط نظام التحكم في الإصدار المستخدم في تطوير الحزمة بشكل صريح:

 "repository": { "type": "git", "url": "https://github.com/flaviocopes/testing.git" } 

يمكن أن تستخدم نفس الحزمة أنظمة تحكم إصدار مختلفة:

 "repository": { "type": "svn", "url": "..." } 

الملكية الرئيسية


تقوم الخاصية main بتعيين نقطة الدخول إلى الحزمة:

 "main": "src/main.js" 

عندما يتم استيراد حزمة إلى التطبيق ، هذا هو المكان الذي سيتم فيه البحث عن ما تصدره الوحدة المقابلة.

الملكية الخاصة


تمنع الملكية private المضبوطة على true نشر الحزمة عن طريق الخطأ إلى npm:

 "private": true 

خاصية البرامج النصية


تقوم خاصية scripts بتعيين قائمة البرامج النصية أو الأدوات المساعدة التي يمكن تشغيلها باستخدام أدوات npm:

 "scripts": { "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js", "start": "npm run dev", "unit": "jest --config test/unit/jest.conf.js --coverage", "test": "npm run unit", "lint": "eslint --ext .js,.vue src test/unit", "build": "node build/build.js" } 

هذه البرامج النصية هي تطبيقات سطر الأوامر. يمكنك تشغيلها باستخدام npm أو yarn ، على التوالي ، عن طريق تنفيذ أوامر من النموذج npm run XXXX أو yarn XXXX ، حيث XXXX هو اسم البرنامج النصي. على سبيل المثال ، قد يبدو مثل هذا:

 npm run dev 

يمكن استدعاء البرامج النصية كما تريد ، ويمكنها فعل كل شيء تقريبًا قد يرغب المطور.

خاصية التبعيات


تحتوي خاصية dependencies على قائمة بحزم npm مثبتة على أنها تبعيات للحزمة:

 "dependencies": { "vue": "^2.5.2" } 

عند تثبيت حزمة باستخدام npm أو الغزل ، يتم استخدام الأوامر التالية:

 npm install <PACKAGENAME> yarn add <PACKAGENAME> 

تتم إضافة هذه الحزم تلقائيًا إلى قائمة العناصر التابعة للحزمة الجاري تطويرها.

خاصية DevDependencies


تحتوي خاصية devDependencies على قائمة بحزم npm مثبتة على أنها تبعيات تطوير:

 "devDependencies": { "autoprefixer": "^7.1.2", "babel-core": "^6.22.1" } 

تختلف هذه القائمة عن تلك المخزنة في خاصية dependencies ، نظرًا لأن الحزم المتوفرة فيها مثبتة فقط في نظام مطور الحزمة ؛ وفي الاستخدام العملي للحزمة ، لا يتم استخدامها.

تندرج الحزم في هذه القائمة عند تثبيتها باستخدام npm أو الغزل ، كما يلي:

 npm install --dev <PACKAGENAME> yarn add --dev <PACKAGENAME> 

خاصية المحركات


تشير خاصية engines إلى إصدارات Node.js ومنتجات البرامج الأخرى المستخدمة لتوفير الحزمة:

 "engines": { "node": ">= 6.0.0", "npm": ">= 3.0.0", "yarn": "^0.13.0" } 

خاصية قائمة المستعرضات


تتيح browserlist خاصية قائمة browserlist الإبلاغ عن المتصفحات (وإصداراتها) التي سيدعمها مطور الحزمة:

 "browserslist": [ "> 1%", "last 2 versions", "not ie <= 8" ] 

يتم استخدام هذه الخاصية بواسطة Babel و Autoprefixer وأدوات أخرى. يتيح لهم تحليل هذه القائمة أن يضيفوا إلى الحزمة فقط تلك الملفات المتعددة والآليات المساعدة المطلوبة للمتصفحات المدرجة.

browserlist قيمة خاصية قائمة browserlist الموضحة هنا كمثال أنك تريد دعم إصدارين رئيسيين على الأقل من جميع المتصفحات باستخدام 1٪ على الأقل (هذه البيانات مأخوذة من CanIUse.com ) ، باستثناء IE 8 والإصدارات الأقدم من هذا المتصفح (المزيد يمكن العثور على هذا في صفحة حزمة قوائم المتصفح ).

▍التخزين في إعدادات package.json لأدوات البرامج المختلفة


في package.json يمكنك تخزين الإعدادات لأدوات مساعدة مختلفة مثل Babel أو ESLint.

كل من هذه الأدوات لها خاصية خاصة ، مثل eslintConfig أو babel . يمكن العثور على تفاصيل حول استخدام هذه الخصائص في توثيق المشاريع المعنية.

versionsحول إصدارات الحزمة والإصدارات الدلالية


, , , . , ~3.0.0 ^0.13.0 . , , .

, , , , :

  • ~ : ~0.13.0 , - . , 0.13.1 , 0.14.0 — .
  • ^ : ^0.13.0 , , - . , 0.13.1 , 0.14.0 , .
  • * : , , , — .
  • > : , .
  • >= : , .
  • <= : , .
  • < : , .
  • = : .
  • - : , — 2.1.0 - 2.6.2 .
  • || : , . < 2.1 || > 2.6 .

:

  • : , , - .
  • latest : , .

, , -. , 1.0.0 || >=1.1.0 <1.2.0 , 1.0.0 , , 1.1.0 , 1.2.0 .

package-lock.json


package-lock.json npm 5. Node.js-. ? , package.json , .

, , , , .

, package.json . package.json , (- ) .

Git node_modules , . , npm install , , , ~ , -, , , -.

^ . , , , .

, - , npm install . , . , , - , , , ( ) .

package-lock.json npm npm install .

, , ( Composer PHP) .

package-lock.json Git-, , , , , Git .

package-lock.json npm update .

▍ package-lock.json


package-lock.json , cowsay, npm install cowsay :

 { "requires": true, "lockfileVersion": 1, "dependencies": {   "ansi-regex": {     "version": "3.0.0",     "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3. 0.0.tgz",     "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="   },   "cowsay": {     "version": "1.3.1",     "resolved": "https://registry.npmjs.org/cowsay/-/cowsay-1.3.1.tgz" ,     "integrity": "sha512-3PVFe6FePVtPj1HTeLin9v8WyLl+VmM1l1H/5P+BTTDkM Ajufp+0F9eLjzRnOHzVAYeIYFF5po5NjRrgefnRMQ==",     "requires": {       "get-stdin": "^5.0.1",       "optimist": "~0.6.1",       "string-width": "~2.1.1",       "strip-eof": "^1.0.0"     }   },   "get-stdin": {     "version": "5.0.1",     "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0. 1.tgz",     "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g="   },   "is-fullwidth-code-point": {     "version": "2.0.0",     "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/ is-fullwidth-code-point-2.0.0.tgz",     "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="   },   "minimist": {     "version": "0.0.10",     "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10 .tgz",     "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8="   },   "optimist": {     "version": "0.6.1",     "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",     "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",     "requires": {       "minimist": "~0.0.1",       "wordwrap": "~0.0.2"     }   },   "string-width": {     "version": "2.1.1",     "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",     "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",     "requires": {       "is-fullwidth-code-point": "^2.0.0",       "strip-ansi": "^4.0.0"     }   },   "strip-ansi": {     "version": "4.0.0",     "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",     "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",     "requires": {       "ansi-regex": "^3.0.0"     }   },   "strip-eof": {     "version": "1.0.0",     "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",     "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8="   },   "wordwrap": {     "version": "0.0.3",     "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",     "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc="   } } } 

. cowsay, :

  • get-stdin
  • optimist
  • string-width
  • strip-eof

, , , requires , :

  • ansi-regex
  • is-fullwidth-code-point
  • minimist
  • wordwrap
  • strip-eof

, version , resolved , , integrity , .


npm package.json package-lock.json . npm npx.

أعزائي القراء! — npm yarn?

Source: https://habr.com/ru/post/ar423703/


All Articles