هر دو شامل عنوان پکیجهایی میشن که ما توی توسعه برنامه ازشون استفاده میکنیم. این دو چه تفاوتهایی دارن؟ امروز متوجه میشیم 😉
نسخه صوتی این مقاله رو میتونین از Anchor گوش بدین:
devDependencies
پکیجهایی توی این قسمت قرار میگیرن که فقط هنگام توسعه برنامه استفاده میشن و در حالت Production نیازی به اونها نداریم. مثل کامپایلرهایی کدهای ما رو به ES5 تبدیل میکنن، مثل ابزارهای تست، ابزارهای ساخت مستندات و یا ابزارهای درستنویسی مثل ESLint و Prettifier ها. نکتهای که باید در نظر داشته باشیم اینه که برنامه ما بدون این پکیجها هم کار خواهد کرد.
برای اینکه یک پکیج رو به قسمت devDependencies اضافه کنیم، از --save-dev هنگام نصب اون استفاده میکنیم:
npm install packgeName --save-dev
وقتی که خودمون پکیجی رو توسعه میدیم، بهتره پکیجهایی که فقط هنگام توسعه به کارمون میان رو توی این قسمت قرار بدیم. چون کسی که از پکیج ما استفاده میکنه، به اونها احتیاجی نداره.
dependencies
پکیجهایی که ما بطور مستقیم از اونها و عملکردشون توی برنامهمون استفاده میکنیم، توی این قسمت قرار میگیرن. یعنی برنامه ما بطور واقعی وابسته به این پکیجها هست. پکیجهایی مثل react، redux، lodash و vue
وقتی با دستور npm install یک پکیج رو نصب میکنیم، بطور پیشفرض توی قسمت dependencies قرار میگیره (مگر اینکه گزینه --save-dev رو مشخص کرده باشیم)
npm install packgeName
برنامههای جاوااسکریپتی معمولاً یک فایل package.json توی مسیر اصلی دارن. وقتی توی مسیری که این فایل وجود داره، دستور npm install رو بزنیم، همه پکیجهای لیست شده توی dependencies و devDependencies نصب میشن. اگه میخوایم فقط وابستگیهای dependencies رو نصب کنیم، دستور npm install --production رو میزنیم. این برای زمانی خوبه که میخوایم روی سرور پکیجهامون رو نصب کنیم.
همچنین، همونطور که میدونیم هر پکیج موجود توی npm هم یک فایل package.json داره. باید در نظر داشته باشیم که وقتی یک پکیج خاص رو میخوایم نصب کنیم مثلاً npm install react، فقط پکیجهایی نصب میشن که توی قسمت dependencies اون پکیج لیست شدن و پکیجهای devDependencies رو نخواهیم داشت.
وابستگیهای Transitive ؟
فرض کنیم پکیج A وابسته به پکیج B هست. پس باید انتظار داشته باشیم که توی package.json پکیج A و توی قسمت dependencies، عنوان پکیج B رو ببینیم. حالا فرض کنیم پکیج B هم وابسته به یک پکیج دیگه به اسم C هست. پس پکیج A بطور غیر مستقیم به پکیج C هم وابستگی داره. به نحوه وابستگی پکیج A به C، میگن وابستگی Transitive. یعنی پکیج A برای فعالیتش نیاز به حضور پکیج C داره:
A -> B -> C -> D ...
وقتی توی مسیری که فایل package.json وجود داره، دستور npm install رو بزنیم، همه وابستگیهای Transitive هم نصب میشن. دقت کنین که وابستگیهای Transitive باید توی قسمت dependencies نوشته شده باشن. وابستگیهای Transitive که توی devDependencies لیست شدن، نصب نخواهند شد.