package.json چیست؟ و داخلش چه چیز هایی وجود داره؟

طراحی وب سایت راستین وب :‌ اگر درگیر پروژه های جاوا اسکریپتی بوده باشید و از npm هم استفاده کرده باشید حتما داخل دایرکتوری پروژتون چشمتون به فایلی با نام package.json خورده.خب این یک فایل با فرمت json هستش که یک سری اطلاعات را درمورد پروژه شامل میشه و مثلا باعث میشه npm بتونه پروژتون رو مدیریت کنه و .... (البته این تنها فایده این فایل نیست)همونطور که گفتیم package.json یک فایل با فرمت جیسون هستش پس از یک سری key و value ها ساخته شده که آشنایی با اون ها مارو با این فایل بیشتر آشنا می کنه:name:این key همون نام پروژتونه و اگر میخاین یک پکیج npm بسازید و اون رو publish کنید حتما قبل انتخاب اسم داخل سایت npm سرچ کنید که اسم مدنظرتون قبلا توسط کسی دیگه ای گرفته نشده باشه.اگر هم پروژتون قرار نیست داخل npm منتشر بشه اهمیتی از این نظر نداره.version:این فیلد ورژن کنونی پروژه تون رو مشخص می کنه که درصورتی که میخاین پروژتون رو در npm منتشر کنید این فیلد مهمه و هر بار که میخاین پکیجتون رو در npm آپدیت کنید باید ورژن بالاتری نسبت به ورژن قبلی داخل فایل package.json تون باشه.description:این فیلد توضیحات مربوط به پروژتونه که بهتره داخلش توضیح بدین کاری پروژتون انجام میده دقیقا چه چیزی هستش و درصورت انتشار پروژتون به مردم کمک میکنه بهتر اون رو پیدا کنند.repository:در این فیلد repository پروژتون یعنی همون جایی که کدتون رو قرار میدید رو مشخص میکنید و از هرنوعی میتونه باشه (git,svn,....)برای مثال میتونید کد زیر رو ببینید: &quotrepository&quot: { &quottype&quot : &quotgit&quot, &quoturl&quot : &quothttps://github.com/npm/cli.git&quot }scripts:این فیلد شامل یک سری اسکریپت هایی میشه که در زمان های مختلف میتونند اجرا بشوند برای مثال کد زیر رو ببینید: &quotscripts&quot: { &quotstart&quot: &quotecho hello&quot }خب این کد در package.json شما باعث میشه که قبل start پروژه شما مقدار hello در ترمینال شما نمایش داده بشه :) (البته در لینوکس)و لیست کامل لایف سایکل هاش رو میتونید اینجا ببینید.config:این فیلد شامل مقداریه که شما در فیلد قبلی ینی scripts استفاده کردید ینی برای مثال اگر داخل package.json مون مقادیر زیر رو داشته باشیم:{ &quotconfig&quot :{ &quotname&quot : &quotmorteza&quot } , &quotscripts&quot : { &quotstart&quot : &quotnode sayHello.js&quot } }حال داخل فایل sayHello.js که قرار بوده قبل استارت پروژه ران بشه ما به مقدار name که داخل کانفیگ تعریف کردیم طبق کد زیر دسترسی داریم:console.log(&quothello&quot + process.env.npm_package_config_name) یعنی process.env.npm_package_config_ رو دقیقا به قبل name اضافه میکنیم.dependencies:مهم ترین فیلد package.json هستش که شامل تمام پکیج هاییه که برای پروژتون لازمه و هم چنین ورژن اون هارو هم درون خودش داره و هر بار که شما یک چیزی رو نصب میکنید داخل این فیلد(یا فیلد های مشابهش) نوشته میشه. مثلا اگر کامند زیر رو داخل دایرکتوری پروژتون بزنید:npm install reactدر این صورت داخل package.json تغییری مثل کد زیر رخ خواهد داد:&quotdependencies&quot: { &quotreact&quot: &quot^16.12.0&quot, }که میگه این پروژه به لایبرری react در ورژن 16.12.0 و درصورت وجود بالاترش نیاز داره.فیلد هایی مشابه دیگه ای مثل devDependencies هم وجود داره که مختص زمان خاصی اند مثلا ممکنه یک سری از نیازمندی هاتون فقط برای فاز توسعه باشه مثل prettier که فقط برای فرمت دهی کد هاتون استفاده میشه این نیاز مندی هارو بهتره در devDependencies قرار بدین.من سعی کردم فیلد هایی که مهم تر از بقیه بودن رو بهتون معرفی کنم و اگر شما فیلد دیگه رو مهم میدونید حتما کامنت کنید و اگر به لیست کل این فیلد ها نیاز دارید به سایت npm مراجعه کنید یا اینجا کلیک کنید.ورژن پکیج های NPMورژن پکیج های npm از سه بخش تشکیل میشه :patch:وقتی تغییر میکنه که یه باگی فیکس میشه و میتونید بدون اینکه نگرانی آپدیتش کنید و هیچ مشکلی براتون پیش نیاد.minor :ورژنی که فیچر جدید اضافه میکنه و روی فیچرهای قبلی تغییری ایجاد نمیشهmajor:ورژنی که داخلش تغییر اساسی میکنه و با آپدیت ممکنه کل مکانیسم استفاده از اون تغییر بکنه و آپدیت کردنش باعث بشه کدتون از کار بیافتهدرضمن من مرتضی شجاعی هستم و اینجا درمورد چیز هایی که یاد میگیرم مینویسم و ادعایی هم در مورد نوشته هام ندارم و میدونم داخلش اشتباهاتی وجود داره و ممنون میشم در اصلاحشون به من کمک کنید. اگر دوست داشتید میتونید من رو دنبال کنید. :))))