مدیریت وابستگی ها، حذف، نصب نسخه ای خاص و بروزرسانی پکیج های npm

درسنامه درس 3 از سری آموزش npm
مدیریت وابستگی ها، حذف، نصب نسخه ای خاص و به روز رسانی پکیج ها

با سلام و احترام به این قسمت از سری آموزشی کار با npm خوش آمدید. در این قسمت می خواهیم چند مسئله ی مهم را بررسی کنیم: اول مدیریت وابستگی ها با استفاده از فایل package.json، دوم حذف پکیج های محلی، سوم نصب ورژن خاصی از یک پکیچ و چهارم بروزرسانی پکیج های npm. بنابراین بهتر است بدون مقدمه شروع کنیم.

مدیریت وابستگی ها با package.json

اگر یادتان باشد در جلسه ی قبل Underscore v1.9.1 را نصب کردیم:

{
  ...
  "dependencies": {
    "underscore": "^1.9.1"
  }
}

علامت caret (^) در ابتدای شماره ی نسخه نشان می دهد که npm هنگام نصب این پکیج، بروزترین و جدیدترین نسخه ی آن را دانلود می کند (تنها نسخه ی اصلی و بدون توجه به اعشار باید همخوانی داشته باشد) مگر آنکه فایل package-lock.json وجود داشته باشد. در مورد پکیج ما یعنی هر چیزی قبل از نسخه ی v2.0.0. این روش نسخه بندی وابستگی ها semantic versioning (نسخه بندی معنایی) نام دارد. همچنین توجه داشته باشید که Underscore به عنوان یک خصوصیت (property) در فیلد dependencies قرار گرفته است. این رفتار در نسخه ی جدید npm به صورت پیش فرض تعیین شده است و روی پکیج هایی انجام می شود که برای اجرای برنامه مورد نیاز باشند.

البته می توانید پکیج ها را به صورت devDependency نیز ذخیره کنید؛ برای این کار باید از دستور save-dev-- استفاده شود. devDependencies پکیج هایی هستند که برای توسعه استفاده می شوند (به طور مثال برای انجام تست های مختلف و transpiling کدها). همچنین اگر private: true را به فایل package.json اضافه کنید جلوی اتفاقاتی مانند انتشار تصادفی کدهای خصوصی و اخطارهای تولید شده هنگام اجرای دستور npm install را می گیرید.

اما هیچ کدام از این موارد دلیل اصلی استفاده از package.json نیست. دلیل اصلی استفاده از فایل package.json تعیین وابستگی ها برای پرتابل (سیار) شدن محیط کاری است. به طور مثال زمانی که کدهای فرد دیگری را clone (کپی) می کنید، کافی است دستور npm i را در روت پروژه اجرا کنید تا npm تمام پکیج های لازم را برای اجرای برنامه بارگیری کند.

قبل از تمام کردن این قسمت بهتر است ببینیم Underscore کار می کند یا خیر؛ فایلی به نام test.js در روت پروژه بسازید و دستورات زیر را به آن اضافه کنید:

const _ = require("underscore");
console.log(_.range(5));

حالا با استفاده از node test.js فایل را اجرا کنید. باید در خروجی عبارت [0, 1, 2, 3, 4] را مشاهده کنید.

حذف پکیج های محلی

npm یک سیستم مدیریت پکیج است بنابراین باید بتواند پکیج ها را حذف کند. فرض کنید پکیج Underscore فعلی برای ما دردسرساز شده و با یکی از پکیج های دیگر ما ناسازگار است. برای حذف این نسخه و نصب یک نسخه ی قدیمی تر می توانیم این کار را انجام بدهیم:

$ npm uninstall underscore
removed 2 packages in 0.107s
$ npm list
project@1.0.0 /home/sitepoint/project
└── (empty)

نصب نسخه ی خاصی از یک پکیج

حالا می توانیم نسخه ی Underscore ای که می خواهیم را نصب کنیم. برای مشخص کردن نسخه باید از علامت @ استفاده کنیم:

$ npm install underscore@1.9.0
+ underscore@1.9.0
added 1 package in 1.574s

$ npm list
project@1.0.0 /home/sitepoint/project
└── underscore@1.9.0

بروزرسانی پکیج های npm

فرض کنید می خواهیم ببینیم برای Underscore نسخه ی جدیدی آمده است یا خیر. در این صورت می گوییم:

$ npm outdated
Package     Current  Wanted  Latest  Location
underscore    1.9.0   1.9.1   1.9.1  project

ستون Current نسخه ای را نمایش می دهد که به صورت محلی نصب شده است. ستون Latest آخرین نسخه ی موجود از آن پکیج را نشان می دهد. ستون Wanted نیز آخرین نسخه ی موجودی را نشان می دهد که می تواند بدون خراب کردن کدهای ما روی سیستم نصب شود.

فایل package-lock.json در npm v5 معرفی شد و کارش اطمینان از یکسان بودن وابستگی ها روی تمام دستگاه هایی است که پروژه روی آن ها نصب می باشد. هر کجا که npm پوشه ی node_modules یا فایل package.json را تغییر دهد، فایل package-lock.json نیز به صورت خودکار ساخته می شود.

می توانید این مسئله را تست کنید؛ پوشه ی node_modules را حذف کرده و npm i را اجرا کنید. آخرین نسخه ی npm پکیج Underscore v11.9.0 را نصب می کند چرا که این نسخه در فایل package-lock.json ذکر شده است اما نسخه های قبلی به خاطر قوانین semantic versioning نسخه ی v1.9.1 را دانلود می کنند. قبل از اینکه این قابلیت معرفی شود، تفاوت در نسخه های پکیج ها دردسر بزرگی برای توسعه دهندگان بود و راه حل آن هم استفاده از فایلی به نام npm-shrinkwrap.json بود که باید به صورت دستی ایجاد می شد.

حالا فرض کنید Underscore باگ نسخه ی قبلی اش را تصحیح کرده است و ما هم قصد به روز رسانی به نسخه ی جدید را داریم. بنابراین می گوییم:

$ npm update underscore
+ underscore@1.9.1
updated 1 package in 0.236s

$ npm list
project@1.0.0 /home/sitepoint/project
└── underscore@1.9.1

نکته: برای اینکه این مثال به طور صحیح کار کند باید Underscore را به عنوان یک وابستگی در فایل package.json اضافه کرده باشید. همچنین اگر ماژول های متعدد و قدیمی دارید و می خواهید همه را به روز رسانی کنید باید از دستور npm update استفاده کنید.

تمام فصل‌های سری ترتیبی که روکسو برای مطالعه‌ی دروس سری آموزش npm توصیه می‌کند:
نویسنده شوید
دیدگاه‌های شما

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.