آموزش Node.js: معرفی NPM — بخش سوم

آخرین به‌روزرسانی: ۳۱ اردیبهشت ۱۳۹۸
زمان مطالعه: ۴ دقیقه

NPM اختصاری برای عبارت «مدیریت بسته نود.جی‌اس» (Node Package Manager) است. در ابتدای سال 2017 تعداد بسته‌های فهرست شده در رجیستری npm از مرز 350،000 بسته رد شد و به این ترتیب به بزرگ‌ترین رجیستری کد روی زمین تبدیل شد. بنابراین می‌توانید مطمئن باشید که برای هر چیزی دست کم یک بسته وجود دارد. رجیستری npm در ابتدا به عنوان روشی برای دانلود و مدیریت وابستگی‌های Node.js آغاز شد، اما مدتی است که به ابزاری تبدیل شده که برای فرانت‌اند جاوا اسکریپت نیز استفاده می‌شود. npm کارهای زیادی انجام می‌دهد. برای مطالعه بخش قبلی این سری مقالات آموزشی می‌توانید به لینک زیر مراجعه کنید:

دانلودها

NPM دانلود وابستگی‌های پروژه را مدیریت می‌کند.

نصب همه وابستگی‌ها

اگر پروژه‌ای یک فایل packages.json داشته باشد، با اجرای دستور زیر همه موارد نیاز پروژه در پوشه node_modules نصب می‌شوند. اگر خود این پوشه وجود نداشته باشد، ایجاد می‌شود.

npm install

نصب بسته منفرد

در npm امکان نصب یک بسته منفرد خاص با استفاده از دستور زیر وجود دارد:

npm install <package-name>

در اغلب موارد فلگ‌های بیشتری به دستورها اضافه می‌شود:

  • save– : این فلگ بسته را نصب کرده و مدخلی را به بخش dependencies فایل package.json اضافه می‌کند.
  • save-dev– : بسته را نصب می‌کند و مدخلی را به بخش devDependencies فایل package.json اضافه می‌کند.

تفاوت به طور عمده در این است که devDependencies عموماً ابزار توسعه محسوب می‌شوند و شبیه به یک کتابخانه تست هستند؛ در حالی که dependencies در زمان production اپلیکیشن بسته‌بندی می‌شود.

به‌روزرسانی بسته‌ها

به‌روزرسانی با اجرای دستور زیر نیز به سادگی اجرا می‌شود:

npm update

npm همه بسته‌ها را برای دریافت نسخه جدیدتری که شرط‌های نسخه‌بندی شما را تأمین کند بررسی خواهد کرد. می‌توان یک بسته منفرد را نیز برای به‌روزرسانی تعیین کرد:

npm update <package-name>

نسخه‌بندی

npm علاوه بر دانلودهای ساده، به مدیریت «نسخه‌بندی» (versioning) نیز می‌پردازد، بنابراین می‌توانید هر نسخه خاصی از یک بسته را تعیین کنید و یا یک نسخه بالاتر یا پایین‌تر از آنچه مورد نیاز است را «الزام» (require) کنید.

در اغلب موارد ممکن است متوجه شوید که یک کتابخانه تنها با نسخه اصلی انتشار یافته از یک کتابخانه دیگر سازگار است و یا یک باگ در آخرین نسخه از یک کتابخانه که همچنان رفع نشده است موجب بروز مشکلی شده است.

تعیین نسخه دقیق یک کتابخانه موجب می‌شود که همه افراد دقیقاً از همان نسخه استفاده کنند و بدین ترتیب کل تیم نسخه یکسانی را اجرا می‌کنند تا این که بار دیگر فایل package.json به‌روزرسانی شود.

اجرای وظایف

فایل 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

NPM بسته‌ها را در کجا نصب می‌کند؟

زمانی که یک بسته را با استفاده از npm (یا yarn) نصب می‌کنید، می‌توانید 2 نوع نصب داشته باشید:

  • نصب محلی
  • نصب سراسری

زمانی که دستور npm install را وارد می‌کنید، به صورت پیش‌فرض اتفاقی مانند زیر رخ می‌دهد:

npm install lodash

این بسته در درخت فایل جاری و در پوشه فرعی node_modules نصب می‌شود.

زمانی که این اتفاق می‌افتد، npm مدخل lodash را در مشخصه dependencies فایل packages.json در پوشه کنونی وارد می‌کند. نصب سراسری نیز با استفاده از فلگ g- صورت می‌گیرد:

npm install -g lodash

زمانی که این اتفاق رخ بدهد، npm بسته را در پوشه محلی نصب نخواهد کرد؛ بلکه به جای آن بسته را در یک مکان سراسری نصب می‌کند. اما این مکان سراسری دقیقاً کجاست؟ دستور npm root –g به ما اعلام می‌کند که موقعیت دقیق بسته روی سیستم در کجا است.

روی یک سیستم macOS یا Linux این مکان می‌تواند در مسیر usr/local/lib/node_modules/ باشد. در سیستم‌های ویندوزی این مسیر ممکن است به صورت C:\Users\YOU\AppData\Roaming\npm\node_modules باشد. اگر از nvm برای مدیریت نسخه‌های Node.js استفاده می‌کنید، این مکان می‌تواند متفاوت از مسیرهای فوق باشد. برای نمونه nvm در روی برخی سیستم‌ها از مسیر Users/flavio/.nvm/versions/node/v8.9.0/lib/node_modules/ استفاده می‌کند.

شیوه استفاده یا اجرای بسته نصب شده با NPM

در این بخش روش include کردن و استفاده از بسته نصب شده در پوشه node_modules را بررسی می‌کنیم. در واقع می‌خواهیم بررسی کنیم هنگامی که یک بسته با استفاده از دستور npm در پوشه node_modules نصب شود یا به صورت سراسری نصب شود، چگونه می‌توان در کد Node از آن استفاده کرد. فرض کنید بسته lodash را که یک کتابخانه محبوب از ابزارهای کاربردی جاوا اسکریپت است با استفاده از دستور زیر نصب کرده‌اید:

npm install lodash

بدین ترتیب بسته در پوشه محلی node_modules نصب می‌شود. برای استفاده از این کتابخانه در کدهای خودتان باید آن را با استفاده از کلیدواژه require در کد ایمپورت کنید:

const _ = require('lodash)

اگر بسته یک فایل اجرایی باشد، فایل مربوطه باید در پوشه node_modules/.bin/ قرار گیرد. یک روش ساده برای نمایش این حالت cowsay (+) است. بسته cowsay یک برنامه خط فرمان ارائه می‌کند که می‌تواند برای تولید یک «cow say» استفاده شود. cowsay-ها برنامه‌ای هستند که تصاویر ASCII از یک گاو یا بعضاً حیوان‌های دیگر تولید می‌کنند که پیامی را بیان می‌کند.

npm

زمانی که این بسته با استفاده از دستور زیر نصب می‌شود:

npm install cowsay

برای خود چند وابستگی در پوشه node_modules نصب می‌کند. یک پوشه پنهان bin. وجود دارد که شامل «پیوندهای نمادین» (Symbolic links) به فایل‌های باینری cowsay است.

اجرای cowsay

برای اجرای cowsay کافی است عبارت زیر را وارد کنید:

./node_modules/.bin/cowsay

به این ترتیب برنامه مربوطه اجرا می‌شود، اما npx که در نسخه‌های اخیر npm (از نسخه 5.2 به بعد) گنجانده شده است، گزینه بسیار بهتری محسوب می‌شود. در این حالت کافی است دستور زیر را اجرا کنید:

npx cowsay

npx به این صورت مکان بسته شما را پیدا می‌کند.

به این ترتیب به پایان بخش سوم راهنمای آموزش Node.js می‌رسیم. در بخش بعدی این سلسله مقالات آموزشی در مورد فایل Package.json صحبت خواهیم کرد. بخش چهارم این سری مقالات را با رجوع به لینک زیر مطالعه کنید:

اگر این مطلب برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

==

بر اساس رای ۱ نفر
آیا این مطلب برای شما مفید بود؟
شما قبلا رای داده‌اید!
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
freecodecamp

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *