ننشر اليوم الجزء الرابع من ترجمة 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
.
:
, , -. ,
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?
