آموزش Node.js: میزبانی و پیکربندی محیط توسعه — بخش دوم
اپلیکیشنهای Node.js را بسته به نیازها میتوان در مکانهای مختلفی میزبانی کرد. در ادامه فهرستی (غیر جامع) از گزینههای ممکن برای میزبانی و توزیع اپلیکیشنهای Node.js و ایجاد دسترسی عمومی معرفی شدهاند. این فهرست از سادهترین گزینههای پیکربندی محیط توسعه آغاز شده و در ادامه به سمت گزینههای پیچیده و قویتر حرکت میکند. برای مطالعه بخش قبلی این مجموعه مطلب آموزشی میتوانید به لینک زیر مراجعه کنید:
سادهترین گزینه: تونل لوکال (Local Tunnel)
حتی در صورتی که یک IP دینامیک داشته باشید یا شبکهتان تحت NAT پیکربندی شده باشد، میتوانید اپلیکیشن خود را روی سیستم لوکال توزیع کنید و درخواستها را با استفاده از تونل لوکال مستقیماً از رایانه خودتان پاسخ دهید. این گزینه برای برخی مقاصد تست کردن، نمایش دمویی از یک محصول یا اشتراک یک اپلیکیشن با گروه معدودی از افراد مناسب است.
یک ابزار بسیار خوب برای این منظور وجود دارد که ngrok (+) نام دارد. با استفاده از ngrok میتوان صرفاً با وارد کردن دستور زیر پورت مورد نظر را برای دسترسی اینترنت باز کرد:
ngrok PORT
بدین ترتیب یک دامنه از ngrok.io به دست میآورید، اما با عضویت در طرحهای پولی این سرویس میتوانید یک URL سفارشی و گزینههای امنیتی بیشتری به دست آورید. به خاطر داشته باشید که در این روش سیستم خود را برای دسترسی اینترنت باز میکنید. سرویس دیگری که بدین منظور میتوان استفاده کرد localtunnel (+) است.
توزیعهای با پیکربندی صفر
در این بخش برخی از روشهای توزیع اپلیکیشنهای Node.js را معرفی میکنیم که نیاز به هیچ پیکربندی ندارند.
Glitch: (+) یک محیط کاری و روشی برای ساخت اپلیکیشنها به روشی سریع است. به طوری که این اپلیکیشنها بیدرنگ در زیردامنه مربوطه از دامنه glitch.com در دسترس قرار میگیرند. در حال حاضر امکان داشتن یک دامنه سفارشی وجود ندارد و همچنین چند محدودیت دیگر وجود دارند؛ اما این سرویس برای ساخت پروتوتایپ بسیار عالی است. ظاهر آن جالب است و یک محیط ساده ملالآور محسوب نمیشود. شما در این محیط میتوانید همه قدرت Node.js، یک CDN، ذخیرهسازی امن برای کلیدهای احراز هویت، دستورهای ایمپورت/اکسپورت گیتهاب و موارد دیگر را در اختیار داشته باشید.
این سرویس از سوی شرکت FogBugz و Trello (و همچنین همبنیانگذار Stack Overflow) عرضه شده است. استفاده از آن برای مقاصد دمو توصیه میشود.
Codepen: کدپن (+) پلتفرم و جامعهای جذاب است. شما میتوانید پروژهای با چندین فایل ایجاد کرده و آن را روی یک دامنه سفارشی توزیع کنید.
Serverless: روشی برای انتشار اپلیکیشن است و در آن کلاً هیچ سروری برای مدیریت کردن وجود ندارد. Serverless پارادایمی است که در آن اپلیکیشنها به صورت تابع انتشار مییابند و به یک endpoint شبکه پاسخ میدهند. این پارادایم به نام FASS نیز شناخته میشود که اختصاری برای «Functions As A Service» (تابع به عنوان سرویس) است. لازم به اشاره است که Serverless Framework و Standard Library دو مورد از راهحلهای بسیار محبوب در این زمینه به حساب میآیند؛ هر دوی این موارد یک لایه تجرید برای انتشار روی AWS Lambda و دیگر راهحلهای FAAS مبتنی بر Azure یا Google Cloud ارائه میکنند.
PAAS: اختصاری برای عبارت «پلتفرم به عنوان سرویس» (Platform As A Service) است. این پلتفرمها بسیاری از مواردی را که شما در زمان توزیع اپلیکیشن باید در نظر داشته باشید، بر عهده میگیرند و بدین ترتیب دغدغههای شما کاهش مییابد.
Zeit Now: (+) یک گزینه جذاب است. در این پلتفرم کافی است عبارت now را در ترمینال وارد کنید تا عمل توزیع اپلیکیشن اجرا شود. نسخه رایگانی از آن وجود دارد که با برخی محدودیتها مواجه است؛ ولی نسخه پولی امکانات قویتری دارد. با استفاده از این گزینه کلاً فراموش میکنید که سروری هم وجود دارد و صرفاً به توزیع اپلیکیشن میپردازید.
Nanobox: (+) نیز یکی از گزینههای میزبانی و توزیع اپلیکیشنهای Node.js است.
Heroku: (+) یکی از گزینههای جالب دیگر برای توزیع اپلیکیشنهای Node.js محسوب میشود.
Microsoft Azure: سرویس ابری مایکروسافت است که گزینههای خوبی برای توزیع اپلیکیشنهای Node.js ارائه میکند.
Google Cloud Platform: پلتفرم ابری گوگل نیز ساختار جالبی برای اپلیکیشنهای شما ارائه میکند. بخش مستندات (+) Node.js آن کاملاً مفید است.
سروریهای مجازی دیگر: در این بخش برخی از شرکتهایی که سرورهای مجازی ارائه میکنند و مناسب میزبانی اپلیکیشنهای Node.js هستند را معرفی کردهایم. از جمله این شرکتها میتوان به «دیجیتال اوشن» (Digital Ocean)، «وب سرویسهای آمازون» و Linode اشاره کرد. در مورد سرویسهای وب آمازون به طور خاص باید به Amazon Elastic Beanstalk اشاره کرد، چون تا حدودی پیچیدگی AWS را کاهش داده است. از آنجا که این گزینهها یک ماشین خالی لینوکس ارائه میکنند تا روی آن کار کنید، راهنمایی خاصی در مورد آنها نمیتوان ارائه کرد. در دسته سرورهای مجازی (VPS) گزینههای زیادی وجود دارند که میتوان معرفی کرد و این موارد تنها شرکتهای شاخص محسوب میشوند.
سرورهای فیزیکی: گزینه دیگری که میتوان برای میزبانی اپلیکیشن Node.js استفاده کرد، این است که یک سرور فیزیکی را با نصب توزیعی از لینوکس پیکربندی کرده و به اینترنت وصل نمود.
شیوه استفاده از Node.js REPL
REPL اختصاری برای عبارت «Read-Evaluate-Print-Loop» (خواندن-ارزیابی-پرینت-حلقه) است و روشی عالی برای کاوش قابلیتهای Node.js به طور سریع محسوب میشود. دستور node دستوری است که برای اجرای اسکریپتهای Node.js استفاده میشود.
node script.js
اگر نام فایل را فراموش کنیم، میتوانیم از روش REPL استفاده کنیم:
Node
اگر دستور فوق را در ترمینال وارد کنید، خروجی زیر را مشاهده میکنید:
❯ node >
این دستور در حالت انتظار (idle) میماند و منتظر وارد کردن مقدار دیگری است.
نکته: اگر از چگونگی باز کردن ترمینال اطلاع ندارید، برای آشنایی با محیط ترمینال یا خط فرمان در سیستمهای عامل مختلف میتوانید از مقالات زیر بهره بگیرید:
- دستورهای ترمینال سیستم عامل مک (macOS) — راهنمای مقدماتی
- ترمینال لینوکس و آنچه برای شروع به کار با آن باید بدانید
- آموزش خط فرمان (Command Line) ویندوز – راهنمای مقدماتی
در حالت فوق REPL منتظر میماند تا نوعی کد جاوا اسکریپت را وارد کنید. برای شروع مقدار زیر را وارد کنید:
> console.log('test') test undefined >
مقدار نخست یعنی test، آن خروجی است که از کنسول میخواهیم پرینت کند و سپس مقدار «تعریف نشده» (undefined) دریافت میکنیم که مقدار بازگشتی ()console.log است. اینک میتوانیم خط جدیدی از کد جاوا اسکریپت وارد کنیم.
استفاده از tab برای تکمیل خودکار
نکته جالب در مورد REPL این است که تعاملی است. همچنان که کد را مینویسید؛ اگر کلید tab را بزنید، REPL تلاش خواهد کرد آن چه را که مینویسید تکمیل کند و با متغیری که قبلاً تعریف شده یا متغیر از قبل تعریف شده است تطبیق دهد.
کاوش اشیای جاوا اسکریپت
تلاش کنید نام کلاس جاوا اسکریپت مانند Number را وارد کنید و یک نقطه در انتهای آن وارد کرده و کلید tab را بزنید. در این زمان REPL همه مشخصهها و متدهایی که روی کلاس وجود دارند را نمایش میدهد:
کاوش اشیای سراسری
امکان بازبینی اشیای سراسری با وارد کردن عبارت global. و فشردن کلید tab نیز وجود دارد:
متغیر خاص _
اگر پس از یک کد، کاراکتر _ را وارد کنید، به آن معنی است که قصد دارید نتیجه آخرین عملیات را نمایش دهید.
دستورهای نقطه (Dot)
REPL برخی دستورهای خاص دارد که همه آنها با یک نقطه (Dot) شروع میشوند و فهرستی از آنها به شرح زیر است:
- help. – این دستور راهنمای دستورهای نقطه را نمایش میدهد.
- editor. – امکان نوشتن کدهای چند خطی جاوا اسکریپت را به سهولت در اختیار ویرایشگر قرار میدهد. زمانی که در این حالت باشید با زدن کلیدهای Ctrl+D میتوانید کدی را که نوشتهاید اجرا کنید.
- break. – زمانی که یک عبارت چند خطی را وارد میکنید با تایپ دستور.break از ورودی بیشتر خارج میشوید و عملکردی مشابه فشردن کلیدهای Ctrl+C دارد.
- clear. – ساختار REPL را به صورت یک شیء خالی ریست میکند و هر عبارت چند خطی را که هم اینک وارد شده است پاک میسازد.
- load. – یک فایل جاوا اسکریپت را با آدرس نسبی با توجه به دایرکتوری کار فعلی بارگذاری میکند.
- save. – همه مواردی را که در نشست REPL وارد کردهاید در یک فایل ذخیره میکند (باید نام فایل را ذکر کنید).
- exit. – از repl خارج میشود (معادل فشردن دو بار کلیدهای Ctrl+C است).
REPL وقتی یک گزاره چند خطی را وارد میکنید، بدون نیاز به تایپ کردن دستور editor. این مسئله را میداند. برای نمونه، اگر شروع به تایپ کردن یک چرخه تکرار مانند زیر بکنید:
[1، 2، 3].forEach(num => {
و سپس کلید Enter را بزنید، REPL به یک خط جدید میرود و آن را با 3 نقطه آغاز میکند که نشان میدهد شما مشغول کار روی یک بلوک هستید.
... console.log(num) ... })
اگر عبارت break. را در انتهای یک خط وارد کنید، حالت چند خطی متوقف میشود و گزاره اجرا نخواهد شد.
پذیرش آرگومانهای خط فرمان توسط Node.js
در یک برنامه Node.js، برای دریافت آرگومانهایی که در خط فرمان وارد میشوند، میتوانید آنها را در زمان فراخوانی اپلیکیشن به صورت زیر ارسال کنید:
node app.js
آرگومانها میتوانند مستقل باشند و یا برای مثال مانند زیر کلید و مقدار داشته باشند:
node app.js Flavio
و یا به صورت زیر باشند:
node app.js name=Flavio
بدین ترتیب روش بازیابی این مقدار از کد Node.js تغییر پیدا میکند. روشی که برای بازیابی آن استفاده میکنیم، شیء process است که از متدهای درونی Node.js محسوب میشود. این متد یک مشخصه argv افشا میکند. argv آرایهای است که شامل همه آرگومانهای ارسالی از خط فرمان است. آرگومان نخست مسیر کامل دستور node است. عنصر دوم مسیر کامل فایلی است که اجرا خواهد شد. همه آرگومانهای دیگر که از مکانی دیگر فوروارد میشوند در ادامه میآیند. میتوان حلقهای روی همه آرگومانها (شامل نام فایل و مسیر node) تعریف کرد:
process.argv.forEach((val، index) => { console.log(`${index}: ${val}`) })
دریافت صرفاً آرگومانهای اضافی
میتوان تنها آرگومانهای اضافی را به دست آورد و به این منظور باید یک آرایه جدید که دو پارامتر نخست را حذف میکند ایجاد کرد:
const args = process.argv.slice(2)
اگر یک آرگومان بدون نام اندیس به صورت زیر داشته باشید:
node app.js Flavio
با استفاده از دستور زیر میتوانید به آن دسترسی داشته باشید:
const args = process.argv.slice(2) args[0]
در این حالت:
node app.js name=Flavio
[args[0 به صورت name=Flavio است و باید آن را تجزیه کنید. بهترین روش برای انجام این کار استفاده از کتابخانه minimist (+) است که متدهایی برای کار با آرگومانها ارائه کرده است:
const args = require('minimist')(process.argv.slice(2)) args['name'] //Flavio
دریافت خروجی در خط فرمان با Node.js
روش پرینت موارد مختلف در کنسول خط فرمان با استفاده از Node.js، از یک متد ابتدایی console.log تا سناریوهای پیچیدهتر متفاوت است.
خروجی ابتدایی با ماژول console
Node.js یک ماژول console دارد که روشهای مفید زیادی برای تعامل با خط فرمان ارائه کرده است. این ماژول اساساً همان شیء console است که قبلاً در مرورگر دیدهایم. سادهترین و پراستفادهترین متد ()console.log نام دارد که یک رشته ارسالی را در کنسول پرینت میکند. اگر یک شیء ارسال شود، کنسول آن را به صورت رشته رندر میکند. امکان ارسال متغیرهای چندگانه به console.log به صورت زیر وجود دارد:
const x = 'x' const y = 'y' console.log(x، y)
در این حالت Node.js هر دوی آنها را پرینت میکند. امکان قالببندی عبارتها در حالت pretty با ارسال متغیرها و یک قید قالببندی مانند مثال زیر نیز وجود دارد:
console.log('My%s has%d years'، 'cat'، 2)
در کد فوق موارد زیر را باید توضیح دهیم:
- s% یک متغیر را به صورت رشته قالببندی میکند.
- d% یا i% یک متغیر را به صورت یک عدد صحیح قالببندی میکند.
- f% یک متغیر را به صورت عدد اعشاری قالببندی میکند.
- o% یک بازنمایی از شیء را پرینت میکند.
مثال:
console.log('%O'، Number)
پاکسازی کنسول
دستور ()console.clear، کنسول را پاک میکند (البته رفتار آن وابسته به نوع کنسول مورد استفاده است).
شمارش عناصر
()console.count یک متد کارآمد است. این کد را در نظر بگیرید:
const x = 1 const y = 2 const z = 3 console.count( 'The value of x is ' + x + ' and has been checked.. how many times?' ) console.count( 'The value of x is ' + x + ' and has been checked.. how many times?' ) console.count( 'The value of y is ' + y + ' and has been checked.. how many times?' )
اتفاقی که در کد فوق میافتد این است که count تعداد دفعاتی که یک رشته پرینت میشود را میشمارد و تعداد را نیز پس از آن پرینت میکند. بدین ترتیب در مثال زیر تعداد سیبها و پرتقالها را میشماریم:
const oranges = ['orange'، 'orange'] const apples = ['just one apple'] oranges.forEach(fruit => { console.count(fruit) }) apples.forEach(fruit => { console.count(fruit) })
پرینت رد پشته
ممکن است مواردی وجود داشته باشند که پرینت «رد پشته فراخوانی» (call stack trace) یک تابع مفید باشد و به یافتن پاسخ این پرسش کمک کند که: «چطور به این بخش از کد رسیدهایم؟»
پرینت رد پشته با استفاده از دستور ()console.trace به صورت زیر ممکن است:
const function2 = () => console.trace() const function1 = () => function2() function1()
این دستور رد پشته را پرینت میکند. برای نمونه اگر کد فوق را در Node REPL وارد کنیم، نتیجه زیر به دست میآید:
Trace at function2 (repl:1:33) at function1 (repl:1:25) at repl:1:1 at ContextifyScript.Script.runInThisContext (vm.js:44:33) at REPLServer.defaultEval (repl.js:239:29) at bound (domain.js:301:14) at REPLServer.runBound [as eval] (domain.js:314:12) at REPLServer.onLine (repl.js:440:10) at emitOne (events.js:120:20) at REPLServer.emit (events.js:210:7)
محاسبه زمان صرف شده
میتوان میزان زمانی که یک تابع طول کشیده اجرا شود را با استفاده از ()time و ()timeEnd به راحتی محاسبه کرد:
1const doSomething = () => console.log('test')
2const measureDoingSomething = () => {
3 console.time('doSomething()')
4 //do something, and measure the time it takes
5 doSomething()
6 console.timeEnd('doSomething()')
7}
8measureDoingSomething()
stdout و stderr
همانطور که دیدیم console.log برای پرینت کردن پیامها در کنسول کاملاً عالی است. این کار خروجی استاندارد یا stdout نام دارد. console.error در استریم stderr پرینت میکند. این مقدار در کنسول ظاهر میشود؛ اما در لاگ خطا قابل مشاهده است.
رنگی کردن خروجی
میتوان خروجی متن را در کنسول با استفاده از یک دنباله escape رنگی کرد. دنباله escape به مجموعهای از کاراکترها گفته میشود که برای مثال مانند زیر یک رنگ را شناسایی میکنند:
console.log('\x1b[33m%s\x1b[0m'، 'hi!')
این کد را میتوان در Node REPL امتحان کرد و خروجی کار یک عبارت !hi با رنگ زرد خواهد بود.
با این وجود، این روشی سطح پایین برای انجام این کار است. سادهترین روش برای رنگی کردن خروجی کنسول استفاده از یک کتابخانه است. Chalk (+) چنین کتابخانهای است و علاوه بر رنگی کردن خروجی، امکان سبکبندیهای مختلف دیگر آن مانند درشت (bold) کردن قلم و یا نوشتن به صورت ایتالیک و زیرخطدار را نیز میدهد.
این کتابخانه با دستور npm install chalk نصب میشود و به صورت زیر میتوانید از آن استفاده کنید:
const chalk = require('chalk') console.log(chalk.yellow('hi!'))
استفاده از chalk.yellow نسبت به تلاش برای به خاطرسپاری کدهای escape بسیار آسانتر است و کد نیز خوانایی بیشتری پیدا میکند.
ایجاد یک نوار پیشرفت
Progress (+) نام یک پکیج جالب است که برای ایجاد نوار پیشرفت در کنسول استفاده میشود. آن را با استفاده از دستور زیر میتوانید نصب کنید:
npm install progress
قطعه کد زیر یک نوار پیشرفته 10 مرحلهای ایجاد میکند. در هر 100 میلیثانیه یک گام از این نوار پیشرفت کامل میشود. زمانی که نوار به پایان برسد، بازههای زمانی پاک میشوند:
1const ProgressBar = require('progress')
2const bar = new ProgressBar(':bar', { total: 10 })
3const timer = setInterval(() => {
4 bar.tick()
5 if (bar.complete) {
6 clearInterval(timer)
7 }
8}, 100)
پذیرش ورودی از خط فرمان در Node.js
شاید تاکنون از خود پرسیده باشید چگونه میتوان یک برنامه CLI در Node.js را به صورت تعاملی درآورد؟
Node از نسخه 7 خود به بعد ماژول readline (+) را برای اجرای کارهایی مانند دریافت ورودی از استریم قابل خواندن مانند استریم process.stdin عرضه کرده است که در طی اجرای برنامه Node همان ورودی ترمینال است و به صورت هر بار یک خط ورودی را دریافت میکند.
1const readline = require('readline').createInterface({
2 input: process.stdin,
3 output: process.stdout
4})
5readline.question(`What's your name?`, (name) => {
6 console.log(`Hi ${name}!`)
7 readline.close()
8})
قطعه کد فوق نام کاربری را میپرسد و زمانی که متنی وارد شود و دکمه Enter زده شود، یک خوشامدگویی ارسال میشود.
متد ()question نخستین پارامتر (یک سؤال) را نمایش میدهد و منتظر ورودی کاربر میماند. این متد در زمان فشرده شدن کلید enter یک تابع callback فراخوانی میکند. در این تابع callback اینترفیس readline را میبندیم.
readline چند متد دیگر نیز دارد که توصیه میکنیم مستندات آنها را در صفحهای که پیشتر معرفی کردیم بررسی کنید. اگر نیاز دارید که یک رمز عبور را الزام کنید، بهتر است آن را اینک مطرح کنید، اما آن را با استفاده از کاراکترهای * نمایش دهید. سادهترین روش برای این کار، استفاده از پکیج readline-sync است که بر اساس API شباهت زیادی به readline دارد و این کار را به صورت خودکار انجام میدهد. این پکیج را میتوان با استفاده از دستور زیر نصب کرد:
npm install inquirer
سپس کد فوق را به صورت زیر بازنویسی میکنیم:
1const inquirer = require('inquirer')
2var questions = [{
3 type: 'input',
4 name: 'name',
5 message: "What's your name?",
6}]
7inquirer.prompt(questions).then(answers => {
8 console.log(`Hi ${answers['name']}!`)
9})
فایل Inquirer.js امکان انجام کارهای زیادی مانند پرسیدن سؤالات چندگانه، ارائه دکمههای رادیویی، تأییدیهها و مواردی از این دست را میدهد.
البته شناخت همه گزینههای جایگزین به خصوص آنهایی که به صورت توکار از سوی Node.js ارائه شدهاند، مفید است؛ اما اگر میخواهید ورودی CLI را در سطح بالاتری مورد استفاده قرار دهید، Inquirer.js یک گزینه بهینه محسوب میشود.
ارائه کارکردهای یک فایل Node.js با استفاده از اکسپورت
Node.js یک سیستم ماژول داخلی با نام module.exports دارد که امکان استفاده از API داخلی و افشای دادهها به فایل دیگر در همان اپلیکیشن و یا حتی اپلیکیشنهای دیگر را میدهد.
هر فایل Node.js میتواند کارکردهای افشا شده از سوی فایلهای Node.js دیگر را ایمپورت کند. زمانی که میخواهید چیزی را برای استفاده خود ایمپورت کنید، باید از دستور زیر استفاده کنید:
const library = require('./library')
از دستور فوق میتوان برای ایمپورت کردن کارکردهای افشا شده در فایل library.js که در پوشه کنونی قرار دارند استفاده کرد. در این فایل، هر کارکرد پیش از آن که بتواند از سوی فایلهای دیگر ایمپورت شود، باید افشا شود. هر شیء یا متغیر تعریف شده در این فایل به صورت پیشفرض خصوصی است و در معرض دسترسی دنیای خارجی قرار ندارد. برای افشای یک کارکرد باید از API با نام module.exports استفاده کنیم که از سوی سیستم ماژول Node.js ارائه شده است.
ماژول exports
هنگامی که یک شیء یا تابع را به صورت یک مشخصه exports انتساب میدهید، این همان چیزی است که افشا میشود. بدین ترتیب میتوان آن را در بخشهای دیگر اپلیکیشن یا حتی اپلیکیشنهای دیگر نیز ایمپورت کرد. این کار به دو روش قابل اجرا است. روش نخست این است که یک شیء را به module.exports انتساب میدهیم. module.exports به صورت آماده مصرف از سوی سیستم ماژول ارائه شده است و کار اکسپورت فایل را به آن شیء تبدیل میکند.
1const car = {
2 brand: 'Ford',
3 model: 'Fiesta'
4}
5module.exports = car
6//..in the other file
7const car = require('./car')
روش دوم برای افزودن شیء اکسپورت شده به صورت یک مشخصه exports است. بدین ترتیب امکان اکسپورت شیءها، تابعها یا دادههای چندگانه وجود دارد:
1const car = {
2 brand: 'Ford',
3 model: 'Fiesta'
4}
5exports.car = car
روش مستقیم نیز به صورت زیر است:
1exports.car = {
2 brand: 'Ford',
3 model: 'Fiesta'
4}
در فایل دیگر نیز باید با ارجاع دادن به مشخصه ایمپورت خودتان از آن استفاده کنید:
1const items = require('./items')
2items.car
روش دیگر نیز چنین است:
1const car = require('./items').car
شاید بپرسید فرق بین module.exports و exports چیست؟ حالت نخست آن «شیء» را که به آن اشاره میکند افشا میکند. حالت دوم مشخصههای شیء مورد اشاره را افشا میکند. بدین ترتیب به پایان بخش دوم سری مقالات آموزش Node.js میرسیم. در بخش بعدی در مورد npm و روش نصب پکیجها صحبت خواهیم کرد.
اگر این مطلب برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای JavaScript (جاوا اسکریپت)
- مجموعه آموزشهای طراحی سایت
- مجموعه آموزشهای برنامهنویسی
- Node.js چیست و چه نقشی در توسعه وب دارد؟ — به زبان ساده
- ساخت ربات تلگرام با استفاده از Node.js — راهنمای کاربردی
==