مفدمه

در این درس، ابزارهای مورد نیاز برای توسعه‌ی اپلیکیشن با Node.js را نصب می‌کنیم. ابتدا یک نسخه‌ی پایدار (stable) از Node.js و سپس یک ویرایشگر کد مناسب برای Node.js را نصب می‌کنیم. در پایان نیز نحوه‌ی کار با Node.js REPL را خواهیم دید که امکان تست کدهای Node.js در ترمینال را فراهم می‌کند.

نصب Node.js

توسعه‌ی Node.js مثل اکثر پروژه‌های متن‌باز با انتشار نسخه‌های LTS و STS همراه است. نسخه‌های LTS یا Long Term Support نسخه‌های پایداری هستند که از پشتیبانی طولانی‌مدت‌تری برخوردارند. یک نسخه‌ی LTS برای مدت ۱۸ ماه در فاز فعال یا Active و بعد از آن برای ۱۲ ماه در فاز نگهداری یا Maintenance قرار می‌گیرد و مجموعاً از یک پشتیبانی ۳۰ ماهه برخوردار است. اما نسخه‌های STS برای ۶ ماه پشتیبانی می‌شوند. توصیه‌ی اکید آن است که در فاز تولید (production) حتماً از یک نسخه‌ی LTS که در وضعیت Active یا Maintenance قرار دارد، استفاده کنیم.

یادآوری می‌کنم که Node.js مستقل از پلتفرم است و روی لینوکس، مک و ویندوز قابل نصب است و روی همه‌ی این پلتفرم‌ها عملکرد کاملاً یکسانی دارد. در ادامه، خواهیم دید که چطور می‌توانیم آخرین نسخه‌ی LTS از Node.js را روی توزیع‌های لینوکسی و ویندوز نصب کنیم.

نصب Node.js روی لینوکس

در مورد نصب Node.js روی توزیع‌های لینوکسی، نکات و مواردی وجود دارد که باید مد نظر قرار دهیم. فرض کنید قصد داریم آخرین نسخه‌ی LTS از Node.js را روی یک توزیع لینوکسی مثل Ubuntu نصب کنیم.

بر خلاف خیلی از پکیج‌های دیگر، در مورد Node.js نصب از طریق ریپوزیتوری‌های استاندارد APT گزینه‌ی مناسبی نیست. چون سرعت انتشار نسخه‌های Node.js خیلی بیشتر از آن است که امکان افزودن به‌موقع آنها به ریپوزیتوری‌های APT وجود داشته باشد. مهمترین دلیل این امر، وابستگی‌های (dependencies) زیادی است که Node.js دارد. در حال حاضر (اکتبر 2024) نسخه‌ی 20.18.0 از Node.js ارائه شده اما آخرین نسخه‌ی موجود در ریپوزیتوری‌های APT نسخه‌ی 12.22.0 است.

گزینه‌ی دیگری که برای نصب پکیج‌ها در اختیار کاربران توزیع‌های لینوکسی مانند Ubuntu قرار دارد و به‌سرعت در حال محبوب‌شدن است، پکیج‌های Universal و به‌ویژه Snap است. برای Node.js پکیج Snap وجود دارد و با استفاده از کامند sudo snap install node --classic قابل نصب است اما تجربه‌ی ما نشان داده که این پکیج با برخی ابزارهای توسعه ناسازگاری‌هایی دارد و می‌تواند مشکلاتی را ایجاد کند که رفع آنها اصلاً ساده نیست.

با این حساب، نه ریپوزیتوری‌های استاندارد توزیع‌ها مانند APT و نه پکیج‌های Snap روش مناسبی برای نصب Node.js روی یک توزیع لینوکسی نیستند؛ پس روش مناسب برای این کار چیست؟ در وبسایت nodejs.org چند روش برای این کار پیشنهاد شده که ما در اینجا به یکی از پرطرفدارترین این روش‌ها یعنی نصب از طریق NVM می‌پردازیم.

NVM یا Node Version Manager همانطور که از نامش پیداست، ابزاری است برای مدیریت نسخه‌های Node روی یک سیستم. این ابزار علاوه بر اینکه امکان نصب جدیدترین نسخه‌های Node.js را فراهم می‌کند، مزایای دیگری نیز دارد. برای مثال، می‌توانیم چند نسخه از Node.js را به صورت همزمان روی سیستم خود نصب کنیم و بین این نسخه‌ها جابجا شویم. به این ترتیب، همیشه می‌توانیم ویژگی‌های نسخه‌های جدیدتر را آزمایش کنیم و در صورت بروز مشکل Backward Compatibility به یک نسخه‌ی LTS سوئیچ کنیم.

ابتدا با استفاده از کامند cURL زیر آخرین نسخه‌ی NVM در حال حاضر را نصب می‌کنیم:

$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

کامند بالا باعث دانلود و اجرای یک اسکریپت می‌شود که کار نصب NVM را انجام می‌دهد. سپس، ترمینال را ری‌استارت کنید و با استفاده از کامند زیر، نسخه‌ی مورد نظر از Node.js را (در اینجا نسخه‌ی 20 ) دانلود و نصب کنید:

$ nvm install 20

حالا برای اطمینان از نصب صحیح Node.js و npm کامندهای زیر را وارد کنید:

$ node -v
$ npm -v
          

نتیجه‌ی اجرای این کامندها باید چیزی شبیه زیر باشد:

$ node -v 
v20.18.0
$ npm -v
v10.8.1
          

اگر بخواهیم نسخه‌های دیگری را هم نصب کنیم، می‌توانیم به همین ترتیبی که دیدیم، این کار را انجام دهیم و با استفاده از کامند nvm use X که به جای X باید شماره‌ی یک نسخه مانند 20 وارد شود، آن نسخه را به‌عنوان نسخه‌ی فعال تعیین کنیم.

نصب Node.js روی ویندوز

نصب Node.js روی ویندوز کار ساده‌ای است. کافیست به وبسایت nodejs.org رفته، فایل نصب پیشنهادی را دانلود کرده و آن را نصب کنیم. این روش به توضیح بیشتری نیاز ندارد.

اما اگر ترجیح می‌دهید که از یک Package Manager برای نصب Node.js روی ویندوز استفاده کنید، می‌توانید از ابزار fnm یا Fast Node Manager استفاده کنید؛ البته به‌شرطی که ابزار Winget را روی سیستم خود نصب و به‌روزرسانی کرده باشید. برای این منظور، کامندهای زیر را یکی‌یکی اجرا کنید (خطوطی که با # شروع شده‌اند، کامنت هستند).

# installs fnm (Fast Node Manager)
> winget install Schniz.fnm

# download and install Node.js
> fnm use --install-if-missing 20

# verifies the right Node.js version is in the environment
> node -v

# verifies the right npm version is in the environment
> npm -v

وقتی Node.js را به هر یک از روش‌های بالا نصب کنید، ابزار npm نیز به همراه آن روی سیستم شما نصب می‌‌شود. npm یا Node Package Manager ابزاری است برای دسترسی به اکوسیستم کتابخانه‌های اکسترنالی که توسط دیگران نوشته شده و ما می‌توانیم از آنها در پروژه‌های خود استفاده کنیم.

نصب یک ویرایشگر کد

برای نوشتن کدها به یک ویرایشگر متن یا کد نیاز داریم و برای این منظور، گزینه‌های متعددی مقابل ما قرار دارد. اما به‌طور کلی انتخاب یک ویرایشگر بیش از هر چیز به سلیقه و تجربه‌ی کار احتمالی شما با یک ویرایشگر خاص بستگی دارد.

اگر هیچ ایده‌ای ندارید، توصیه می‌کنم Visual Studio Code را که به‌اختصار vscode خوانده می‌شود، روی سیستم خود نصب کنید. امکانات vscode بیشتر از آن است که آن را یک ویرایشگر بنامیم؛ در واقع، vscode یک IDE است که علاوه بر ویرایشگر، امکانات متنوع دیگری مانند محیط ترمینال داخلی و ابزارهای دیباگر نیز ارائه می‌دهد. این IDE مورد پشتیبانی مایکروسافت است، پلاگین‌های زیادی دارد، از زبان‌های مختلف پشتیبانی می‌کند، در تکمیل خودکار کدها بسیار هوشمند عمل می‌کند و روی مک، لینوکس و ویندوز قابل استفاده است.

کار با Node.js REPL در ترمینال

REPL مخفف Read-Evaluate-Print Loop و به معنای حلقه‌ی خواندن، ارزیابی و چاپ است. Node.js دارای یک پیاده‌سازی اختصاصی از REPL است که در قالب یک شل (shell) مانند Bash یا PowerShell در دسترس ما قرار دارد. برای دستیابی به این شل کافیست عبارت node را در ترمینال تایپ کنیم. با این کار، کنترل ترمینال در اختیار مفسر Node.js قرار می‌گیرد و ما می‌توانیم کدهای جاوااسکریپت را وارد کنیم و نتیجه را با یک رویکرد تعاملی دریافت کنیم. برای خروج از محیط Node.js REPL می‌توانیم عبارت exit را تایپ کنیم و یا اینکه از کلیدهای CTRL-D استفاده کنیم.

ابزار Node.js REPL در فرایند توسعه بسیار مفید واقع می‌شود و امکان تست سریع دستورات و ویزگی‌های مختلف را برای ما فراهم می‌کند. مثال زیر را ببینید. توجه داشته باشید که هر خطی که با کاراکتر > شروع شده، عبارت یا گزاره‌ای است که ما وارد کرده‌ایم و سایر خطوط نتیجه‌ی تفسیر این عبارات و گزاره‌های جاوااسکریپتی توسط مفسر Node.js هستند.

node
> 3 + 3
6
> 3 / 0
Infinity
> console.log("Hello, world!")
Hello, world!
> let name = "Danial Razi"
> console.log(name);
Danial Razi

ما در محیط REPL به همه‌ی ماژول‌های هسته‌ی Node.js دسترسی داریم. یادآوری می‌کنم که Node.js یک محیط میزبان برای جاوااسکریپت است و بنابراین باید علاوه بر یک مفسر، ماژول‌های پایه‌ای را نیز برای اعمالی مانند I/O و Networking ارائه دهد؛ همانطور که یک مرورگر وب به عنوان یک محیط میزبان جاوااسکریپت، تعدادی API درونی مانند DOM و BOM را شامل است. بنابراین، Node.js مجهز به یک مفسر حاوااسکریپت و یک کتابخانه استاندارد از ماژول‌های Built-in است و کتابخانه‌ها و ماژول‌های اکسترنال نیز از طریق npm به پروژه اضافه می‌شوند.