package.json
. ستأخذك هذه المقالة عبر ملف package.json وآمل أن تكون مفيدة لك! فهم package.json
ضمن الدليل الجذر لكل مشروع (الحزمة التي تم تنزيلها من npm، أو مشاريع Nodejs الأخرى)، يوجد بشكل عام ملف package.json، الذي يحدد الوحدات المختلفة المطلوبة للمشروع، بالإضافة إلى معلومات تكوين المشروع ( البيانات الوصفية مثل الاسم والإصدار والترخيص وكيفية بدء المشروع وتشغيل البرامج النصية وما إلى ذلك). يقوم أمر npm install
تلقائيًا بتنزيل الوحدات المطلوبة بناءً على ملف التكوين هذا.
ملف package.json
هو كائن JSON، وكل عضو في الكائن هو إعداد للمشروع الحالي. على سبيل المثال، name
هو اسم المشروع، version
هو الإصدار (باتباع تنسيق "الإصدار الرئيسي. الإصدار الثانوي. الإصدار الثانوي"). كما أنها ستلعب أدوارًا متعددة في دورة حياة المشروع، بما في ذلك التطوير والاختبار والإصدارات عبر الإنترنت.
يعمل package.json
كيفية إنشاء package.json
1. استخدم عميل أداة سطر الأوامر CLI
npm init
سيؤدي هذا إلى بدء استبيان سطر الأوامر، والذي سيؤدي إلى إنشاء package.json
في الدليل الذي بدأت فيه الأمر.
إدخال الواجهة الأمامية (vue) لدورة الإتقان: أدخل التعلم
2. أنشئ قيمة افتراضية
للحصول على القيمة الافتراضية package.json
، يرجى تشغيل npm init
مع علامة --yes
أو -y
:
npm init -y
ستستخدم هذه الطريقة package.json
من الملف الحالي، وتقوم المعلومات المستخرجة من الدليل بإنشاء قيم افتراضية، مع تخطي خطوة الإجابة على الأسئلة.
3. قم بإنشاء
ملف package.json جديد يدويًا مباشرة في الدليل الجذر للمشروع، ثم أدخل المحتوى ذي الصلة. يرجى الاطلاع على الملاحظات الموجودة على package.json أدناه للحصول على التفاصيل.
شرح تفصيلي للحقول المشتركة في ملفات package.json
1. الاسم
هو حقل مطلوب، وهو اسم الوحدة/الحزمة الحالية، ويجب أن يكون الطول أقل من أو يساوي 214 حرفًا، ولا يمكن أن يبدأ بـ "." ) أو "_" (شرطة سفلية) ولا يمكن أن تحتوي على أحرف كبيرة.
قد يتم تمرير هذا الاسم كمعلمة إلى require()، لذا يجب أن يكون قصيرًا، لكن لا يزال ذا معنى.
2. الإصدار
هو حقل مطلوب، رقم إصدار الحزمة الحالية، الافتراضي هو
1.0.0
عند إنشائه لأول مرة.
يجب أن يكون الإصدار قابلاً للحل بواسطة وحدة Node-semver التي يعتمد عليها npm. يحدد تقدم تكرار الإصدار للمشروع الحالي. (اتبع تنسيق "الإصدار الرئيسي. الإصدار الثانوي. الإصدار الثانوي")
ربما لا ينتبه العديد من الأصدقاء الآن إلى رقم الإصدار أو لا يهتمون به، ويفضلون استخدام رقم إصدار المنتج، أو git طريقة رمز التجزئة.
3. يجب أن يكون حقل الوصف
الاختياري عبارة عن سلسلة. معلومات وصف الحزمة الحالية عبارة عن سلسلة. يساعد الأشخاص في العثور على الحزمة عند استخدام بحث npm.
إذا لم تكن هناك معلومات description
في package.json، يستخدم npm السطر الأول من README.md في المشروع كمعلومات الوصف. ستساعد معلومات الوصف هذه الآخرين في البحث عن مشروعك، لذا ينصح بكتابة معلومات description
بشكل جيد.
4. يحدد الحقل الاختياري الرئيسي
ملف الإدخال لتحميل المشروع.
القيمة الافتراضية لهذا الحقل هي index.js
ضمن الدليل الجذر للوحدة النمطية.
5.
الحقل الاختياري للبرامج
scripts
هو كائن تجزئة يتكون من أوامر البرنامج النصي ويتم تنفيذها في دورات حياة مختلفة للحزمة. المفتاح هو حدث دورة الحياة والقيمة هي الأمر المطلوب تشغيله. يحدد اختصار سطر أوامر npm لتشغيل أمر البرنامج النصي، على سبيل المثال، يحدد start الأمر الذي سيتم تنفيذه عند تشغيل npm run start. يمكننا تخصيص الأمر الذي نريد تشغيل البرنامج النصي فيه.
المرجع: http://www.ruanyifeng.com/blog/2016/10/npm_scripts.html
البرنامج النصي لتنفيذ تكوين البرامج النصية
1) قم بتنفيذ الأمر echo xxx
لماذا يمكن تنفيذه؟
عندما أقوم بتنفيذ تشغيل npm، سيتم إنشاء Shell جديد تلقائيًا وسيتم تنفيذ أمر البرنامج النصي المحدد في Shell هذا. لذلك، طالما يمكن تشغيل الأمر بواسطة Shell (عادةً Bash)، فيمكن كتابته في البرنامج النصي npm. سيتم أيضًا نسخ العقدة_modules/.bin في الدليل الحالي إلى مسار النظام الحالي (إنها مجرد نسخة مؤقتة. بعد اكتمال التنفيذ، ستتم استعادة متغير PATH إلى حالته الأصلية)، وبالتالي فإن جميع البرامج النصية في وحدة العقدة /.bin الدليل الفرعي للدليل الحالي، يمكن استدعاء الكل مباشرة باستخدام اسم البرنامج النصي دون إضافة مسار.
على سبيل المثال:
إذا استخدمنا Node لتنفيذ خدمة Node.js، فيمكن node + 文件
استخدام node server.js
؛ يمكننا أيضًا استخدام webpack لحزم ملف الواجهة الأمامية، webpack-dev-server
بالطبع يلزم تثبيت خادم webpack-dev-الوحدات النمطية التابعة
"البرامج النصية": { "build": "webpack --mode=development", "dev": "webpack-dev-server --mode=development --contentBase=./dist", "الخادم": "عقدة app.js" }
ندخل npm run server
في أداة سطر الأوامر، وسيتم استدعاء Node app.js لمساعدتنا في تشغيله.
نموذج قصير:
بداية npm هي بداية تشغيل npm npm stop هو اختصار npm run stop npm test هو اختصار لاختبار تشغيل npm npm Restart هو اختصار npm run stop && npm run rise && npm run start
البرامج النصية شائعة الاستخدام ----- نقل المجموعة عبر الإنترنت
// حذف الدليل "نظيف": "منطقة ريمراف/*", // إنشاء خدمة HTTP "تخدم" محليًا: "http-server -p 9090 dist/"، // افتح المتصفح "open:dev": "opener http://localhost:9090"، // قم بتحديث "livereload" في الوقت الفعلي: "live-reload --port 9091 dist/"، // إنشاء ملف HTML "build:html": "jade Index.jade > dist/index.html"، // طالما أن ملف CSS يتغير، أعد تنفيذ البناء "watch:css": "watch 'npm run build:css' Assets/styles/"، // طالما أن ملف HTML يتغير، أعد تنفيذ البناء "watch:html": "watch 'npm run build:html' Assets/html"، // النشر إلى Amazon S3 "deploy:prod": "s3-cli sync ./dist/ s3://example-com/prod-site/", // إنشاء الرمز المفضل "build:favicon": "العقدة النصية/favicon.js", "start": "cross-env NODE_ENV=خادم عقدة الإنتاج/index.js"،
6. التبعيات وتبعيات dev
هي حقول اختيارية يحدد حقل
dependencies
الوحدات التي يعتمد عليها المشروع، ويحددdevDependencies
الوحدات النمطية المطلوبة لتطوير المشروع.
تشير القيمة إلى كائن. يتكون كل عضو في هذا الكائن من اسم الوحدة ومتطلبات الإصدار المقابلة، مما يشير إلى الوحدة التابعة ونطاق الإصدار الخاص بها.
لم يتم إنشاء package.json افتراضيًا، وسيتم إنشاؤه عندما نقوم بتثبيت وحدة npm install
.
تثبيت npm السريع تثبيت npm السريع --حفظ npm install Express --save-dev
الرمز أعلاه يعني تثبيت الوحدة السريعة بشكل منفصل،
dependencies
.--save-dev
تعني كتابة الوحدة --save
سمة dependencies
devDependencies
7. التبعيات المجمعة
حقل اختياري، التبعيات الأخرى مجمعة في نفس الوقت عند نشر الحزمة.
8.
حقل اختياري لـ PeerDependeency، تبعية التوافق، إذا كان مشروعك أو وحدتك تعتمد على وحدة أخرى في نفس الوقت، لكن الإصدار الذي تعتمد عليه مختلف.
على سبيل المثال، يعتمد مشروعك على الإصدار 1.0 من الوحدة A والوحدة B، وتعتمد الوحدة A نفسها على الإصدار 2.0 من الوحدة B.
{ "name": "الشاي الموعود"، "تبعيات الأقران": { "شاي": "1.x" } }
يحدد الكود أعلاه أنه عند تثبيت وحدة chai-as-promised
، يجب تثبيت chai
البرنامج الرئيسي معًا، ويجب أن يكون إصدار chai
1.x
إذا كانت التبعية التي حددها مشروعك هي الإصدار 2.0 من chai
، فسيتم الإبلاغ عن خطأ.
9.
حقل الحاوية الاختياري يُستخدم حقل الحاوية لتحديد موقع الملف القابل للتنفيذ المطابق لكل أمر داخلي.
قم بإنشاء الملف /bin/www في الدليل الجذر للمشروع
#!قم بتكوين
"bin"في العقدة
/usr/bin/envpackage.json: {
"lee-cli"::./bin/www" }
يضيف npm link
مسار القيمة لسمة bin في الحزمة إلى رابط عام، وينشئ اتصال اختصار،
وينفذ lee-cli
في سطر الأوامر لتنفيذ ملف bin/www. العملية هي:
في المثال أعلاه، سيقوم www بإنشاء رابط رمزي node_modules/.bin/www
. نظرًا لأنه سيتم إضافة الدليل node_modules/.bin/
إلى متغير PATH الخاص بالنظام في وقت التشغيل، فيمكن استدعاء هذه البرامج النصية مباشرة من خلال الأوامر بدون مسار عند تشغيل npm.
10. التكوين
يستخدم حقل التكوين لإخراج القيم إلى متغيرات البيئة
{ "الاسم": "الحزمة"، "التكوين" : { "المنفذ": "8080" }، "البرامج النصية" : { "البدء" : "node server.js" } }
إذا أردنا تغييره، فيمكننا استخدام
npm config set package:port 80
11. يحدد الحقل الاختياري للمحركات
إصدار النظام الأساسي الذي تعمل عليه الوحدة، مثل إصدار معين من Node أو المتصفح إصدار
npm
المطبق
"المحركات" : { "العقدة": ">=0.10.3 <0.12" }
12.
حقل الترخيص الاختياري، يشير إلى تعريف الترخيص المطبق على الكود الموضح في package.json. البروتوكولات المختلفة لها قيود مختلفة. اسمح للمستخدمين بمعرفة الأذونات التي لديهم لاستخدام الوحدة النمطية الخاصة بك والقيود المفروضة على استخدامها.
يرجى الرجوع إلى: Choosealicense.com/ لاختيار الترخيص.
على سبيل المثال: MIT: الحد الأقصى للإذن، يمكن للآخرين تغيير الكود الخاص بك بعد تنزيله، قيمة التثبيت الافتراضية.
13.
مجال اختياري للمؤلف، مطور المشروع.
14.
حقل اختياري خاص، قيمة منطقية، سواء كانت خاصة. عند التعيين على "صحيح"، يرفض npm النشر.
هذه طريقة لمنع إصدار الحزم الخاصة إلى الغرباء. إذا كنت ترغب في تغليف حزمة ليتم نشرها فقط في سجل محدد (على سبيل المثال، سجل داخلي)، فيمكنك استخدام وصف قاموس PublishConfig أدناه لتجاوز معلمات تكوين التسجيل في وقت النشر.
15.
الحقل الاختياري للكلمات الأساسية، الكلمات الأساسية للمشروع، عبارة عن مصفوفة سلسلة. يساعد الأشخاص في العثور على الحزمة عند استخدام بحث npm.
16.
يحدد الحقل الاختياري نظام التشغيل نظام التشغيل الذي يمكن تشغيل الوحدة عليه.
17.
يحدد نمط النمط موقع ملف النمط عند استخدامه بواسطة المتصفح.
18.
يمكن أن يكون نوع المكان الذي يتم فيه تخزين رمز حزمة المستودع git أو svn على Github
19.
لا يحتوي الحقل الاختياري للصفحة الرئيسية على عناوين URL ببادئات البروتوكول مثل http://.
مشكلة الإصدار:
الإصدار: "1.0.0"
1.0.0:
تغيير الرقم الأول يعني: عدم التوافق مع الكود القديم، والتحديث على نطاق واسع، وإصدار الإصدار الجديد؛
والرقم الثاني يعني: تمت إضافة بعض الوظائف، والتوافق معالإصدارات السابقة
؛الرقم
يعني: تمت إضافة بعض الوظائف، وتعني البتة المتوافقة مع الإصدارات السابقة
: تصحيحات صغيرة، وتصحيحات للأخطاء؛
عندما ننشر المشروع، نستخدم npm + git
npm version patch
(تصحيح التصحيح). استخدم git tag
للتنفيذ وسيتم تشغيلها تلقائيًا في git. npm version minor
لتغيير الرقم الثاني من رقم الإصدار؛npm version major
لتغيير الرقم الأول من رقم الإصدار؛ ؛إصدار npm [<newversion> |. إصدار أولي |. رئيسي: رقم الإصدار الرئيسي ثانوي: رقم الإصدار الثانوي التصحيح: رقم التصحيح premajor: الإصدار الرئيسي الأولي prepatch: الإصدار الثانوي الأولي prerelease: إصدار ما قبل النشر
ملاحظة: ملاحظة، إذا تم الإبلاغ عن خطأ: دليل عمل Git غير نظيف، فهذا يعني أنك تحتاج إلى git status
لتكون نظيفة الآن.
إضافة بوابة . git Commit -m "package.json شرح تفصيلي"
npm versin monir -m"增加版本号"
git Push -u Origin master
كيفية صياغة القواعد؟
كمستخدمين، يمكننا أن نشير في ملف package.json إلى مقدار التحديثات التي يمكننا قبولها لهذه الحزمة (بافتراض أننا نعتمد حاليًا على الإصدار 1.2.4):
إذا كنا نعتزم فقط قبول التحديثات لإصدار التصحيح (أي، تغيير الرقم الأخير)، يمكنك كتابته على النحو التالي:
1.2 1.2.x ~1.2.4
إذا قبلت تحديثات الإصدار الثانوية (التغييرات في المركز الثاني)، يمكنك الكتابة على النحو التالي:
1 1.x ^1.2.4
إذا كان بإمكانك قبول تحديثات الإصدار الرئيسية (قبول التغييرات في الإصدار الثانوي وتغييرات إصدار التصحيح بشكل طبيعي)، فيمكنك الكتابة على النحو التالي:
*x
للتلخيص: هناك ثلاثة أنواع من تغييرات الإصدار، أي نوع من تحديث الحزم التابعة يتم قبوله ?اكتب رقم الإصدار بدقة حتى الرقم السابق.
دورة الإصدار ومراحله:
إلى
مزيد2.1.0-beta.1
2.1.0-beta.1
يتم استخدامه بشكل عام من قبل المستخدمين مثل هذا، ولن يتم تثبيت هذا النوع من الأشياء من قبل المستخدمين الداخليين والمختبرين.
أمثلة | على |
---|---|
حزمة | التبعية |
~ | 1.2.3 الإصدار الرئيسي + الإصدار الثانوي + الإصدار التصحيحي؛ 1.2.3 <= الإصدار < 1.3.0؛ الإصدار الرئيسي 1.2.0 <= الإصدار < 0 |
~1 | الإصدار الرئيسي؛ 1.0.0 <= الإصدار <2.0.0 |
وصف | نطاق إصدار | مثيل | الرمز |
---|---|---|---|
1.0.0 | 1.0.0 | مقفل على الإصدار 1.0.0 ويجب أن يكون هذا الإصدار. | |
^ سيطابق أحدث حزمة تبعية للإصدار الكبير | ^1.2.3، ^0.2.3 | >=1.2.3 <2.0.0، >=0.2.3 <0.3.0 | يعني تثبيت أحدث إصدار من 1.xx (ليس أقل من 1.2 .3، بما في ذلك 1.3.0)، ولكن لن يتم تثبيت 2.xx، مما يعني أنه لن يتم تغيير رقم الإصدار الرئيسي أثناء التثبيت. تجدر الإشارة إلى أنه إذا كان رقم الإصدار الرئيسي هو 0، فإن علامة الإقحام تتصرف بنفس طريقة التلدة، وذلك لأنها لا تزال في مرحلة التطوير، وحتى التغييرات الطفيفة في رقم الإصدار قد تتسبب في عدم توافق البرنامج. (الإصدار الرئيسي) |
~ سوف يتطابق مع أحدث حزمة تبعية للإصدار الثانوي | ~1.2.3 | >=1.2.3 <1.3.0 | يعني تثبيت أحدث إصدار من 1.2.x (ليس أقل من 1.2.3)، ولكن ليس تثبيت 1.3.x وهذا يعني أنه لن يتم تغيير رقم الإصدار الرئيسي ورقم الإصدار الثانوي أثناء التثبيت. |
>= | >=2.1.0 | >=2.1.0 | أكبر من أو يساوي 2.1.0 |
<= | <=2.0.0 | <=2.0.0 | أقل من أو يساوي 2.0.0 |
الأخير | تثبيت الإصدار الأحدث | ||
* | >=0.0.0 | أي إصدار | |
- | 1.2.3 - 2.3.4 | >=1.2.3 <=2.3.4 |
الفرق بين تثبيت Dependencies
والتبعيات dependencies
إن devDependencies
عبارة عن وحدات مطلوبة للتطوير، لذا يمكننا تثبيتها حسب الحاجة أثناء عملية التطوير لتحسين كفاءة التطوير لدينا، مثل بعض مكتبات الطرف الثالث المعروفة، webpack
، و rollUp
، و less
، babel
، وما إلى ذلك. ليست هناك حاجة لتثبيته في بيئة الإنتاج.
يوصى بتثبيت المكتبات التالية في devDependencies
:
حزمة التبعية (تحديد، تحديث، محلي، استخدام، إلغاء التثبيت)
1. تثبيت حزمة التبعية المحلية
npm
install jquery.
قم بإنشاء دليل node_modules
في الدليل الحالي، ثم قم بتنزيل الحزمة التي حددناها في هذا الدليل.
2. لتحديد إصدار التثبيت، يمكنك @版本号
بعد اسم الحزمة.
إذا كان اسم الحزمة يبدأ بـ package @
، فهي حزمة ذات نطاق محدد .
تثبيت npm [email protected] تثبيت npm jquery@">=1.1.0 <2.2.0"بعد تحديث
npm install jquery@latest
، سيتغير رقم الإصدار في التبعيات أيضًا.
3. قم بتحديث الحزمة التابعة
npm update jquery
4. استخدم الحزمة
Let jquery = require('jquery');
<script src="/node_modules/jquery/dist/jquery.js">// هذا يحتاج إلى الانتباه إلى المسار</script>
6 ، إلغاء تثبيت الحزمة التابعة
npm إلغاء تثبيت jquery
الإصدار الدلالي (قواعد الإصدار الدلالي)
https://docs.npmjs.com/about-semantic-versioning
https://github.com/npm/node-semver
package ملاحظات .json
وفقًا لما ورد أعلاه عندما نستخدم npm init
سيُطلب منا ملء عدة عناصر، بعضها اختياري وبعضها الآخر مطلوب، وهي جميعها حقول يجب أن يحتوي عليها محتوى package.json
: name
و version
إذا لم يكن الأمر كذلك، فلا يمكن تنفيذ install
xxx
ملاحظات أخرى: