تاریخ انتشار: دوشنبه, ۲۲ ارديبهشت ۱۳۹۹، ۰۹:۴۱ ق.ظ نویسنده: محمدیان

چطور میتوانیم از دستورات خط فرمان آرگومان دریافت کنیم؟ اگر دستور زیر را اجرا کنیم چه اتفاقی می افتد؟

node app.js print

با اجرای این دستور، فایل شما اجرا میشود و هیچ اتفاق دیگری نمیفتد، اما شما میتوانید کلمه print را به صورت آرگومان دریافت کنید و تصمیم بگیرید که مثلا اگر کاربر این دستور را وارد کرد چه اتفاقی بیفتد.

چطور به آرگومان های دستور دسترسی پیدا کنیم؟ به صورت زیر:

process.argv
console.log(process.argv)

ابتدا این دستور را بررسی کنید تا ببینید که argv یک آرایه است و عضو اول آن آدرس فایل اجرایی nodejs در سیستم عامل را برمیگرداند و عضو دوم آن آدرس فایل اجرایی برنامه شما را در خود نگه میدارد. عضو سوم به بعد از کاربر قابل دریافت است. مثلا در اولین مثال: کلمه print عضو سوم آرایه argv میشود. میتوانید دستور زیر را در فایل app.js قرار دهید و این مورد را امتحان کنید.

console.log(process.argv[2])

و حالا دستور زیر را در cmd وارد کنید:

node app.js print

مورد زیر را هم با مواردی که تا کنون آموختید بررسی کنید.

node app.js print --title="your name for example"

میتوانید از آرایه argv، یک لاگ بگیرید و نتایج را مشاهده کنید.

 

حالا که موارد فوق رو متوجه شدید، یه ماژول حرفه ای بهتون معرفی میکنم که خیلی راحت تر با آرگومان ها کار کنید. ماژول yargs رو به صورت زیر در پروژه خودتون قرار بدید و اون رو فراخوانی کنید.

npm install yargs --save
const yargs = require('yargs');
بررسی کنید
console.log(yargs);
console.log(yargs.argv);

و حالا دوباره دستور زیر رو بررسی کنید

node app.js print --title="your name for example"

متوجه تفاوت ها شدید؟ 

yargs به ما آبجکت تحویل میده، آرایه دستورات ارسال شده از خط فرمان با _ در آبجکت yargs در دسترس خواهد بود مثلا:

let firstCommand = yargs._[0];
console.log(firstCommand);
  نتیجه در مثال ما => print

نکته : اگر دستور به صورت زیر وارد شود، yargs چه واکنشی به آن نشان میدهد؟

node app.js print --title "mokhtar"
علامت = وارد نشده

yargs تشخیص میدهد که print یک دستور است و title به عنوان یک ورودی متغیر ارسال شده.

 

با همین اطلاعات میتوانیم برنامه های قابل اجرا با command line بنویسیم. فقط کافیست لیست دستورات مورد نظر خودمان را تعریف کنیم و اگر کاربر دستورات مورد نظر ما را وارد کرد، عملیات خاصی را اجرا کنیم و اگر مثلا داده ای وارد نشده بود یا نوع داده وارد شده با داده مورد نظر ما تناسب نداشت، یک پیغام خطا برای کاربر ارسال کنیم.

 

پکیج yargs محدود به توابع فوق نمی شود و کتابخانه ای غنی است . با مراجعه به مستندات آن میتوانید اطلاعات مفیدی بدست بیاورید. یکی از توابع دیگر yargs تابع commands است که میتوانیم توسط آن یک دستور کامند لاین بسازیم.

yargs
  .command('get', 'make a get HTTP request', {
    url: {
      alias: 'u',
      default: 'http://yargs.js.org/'
    }
  })
  .help()
  .argv

اگر در کنسول دستور زیر را تایپ کنیم:

node index.js --help

//---------------- نتیجه ------------------
index.js [command]

Commands:
  index.js get  make a get HTTP request

Options:
  --version  Show version number                                       [boolean]
  --help     Show help                                                 [boolean]

برای آرگومانهایی هم که میخوایم دریافت کنیم، خواص مختلفی وجود داره که باعث میشه بتونیم مثل فیلد باهاشون برخورد کنیم.مثلاً:

yargs
  .command('print', 'this is my test', {
    body:{
        describe:'i am descripttion of print bode',
        demand:true,
        alias:'p'
    }
  })
  .help()
  .argv

describe : توضیحات مربوط به فیلد body هست.

demand : آیا پر کردن این فیلد برای اجرای دستور الزامی است؟

alias : میتونیم یه مخفف هم برای دستورمون در نظر بگیریم در مثال ما مثلا print-- میتونه p-- هم باشه.

تاریخ انتشار: دوشنبه, ۲۲ ارديبهشت ۱۳۹۹، ۰۹:۰۶ ق.ظ نویسنده: محمدیان

در فایل جاوااسکریپت خود، متغیر سراسری module را با دستور 

console.log(module)

بررسی نمائید. اگر دقت کنیدمی بینید که با یک آبجکت روبرو هستید و این آبجکت دارای آبجکت دیگری با نام exports است.

حالا میتوانید دستورات زیر را به شرط آشنایی با آبجکت های جاوااسکریپت به راحتی درک کنید.

module.exports.name = "Mokhtar Mohammadiyan";
module.exports = {
name : "Mokhtar Mohammadiyan"
}
var name = function(){
    return "Mokhtar Mohammadian";
}

module.exports = {
    name
}

میتوانید مثال های بیشتری در ذهن خود بسازید، مخصوصاً با استفاده از کلاس های es5 و یا typescript و یا همان آبجت خالص js.

 

درک module.exports برای من سخت بود، واسه همین چیزی که خودم فهمیدم رو با شما به اشتراک میزارم.

درک module.exports : 

module.exports یا exports یک شی خاص است که به طور پیش فرض در هر پرونده JS در برنامه Node.js گنجانده شده است. module یک متغیر است که ماژول فعلی را نشان می دهد و exports آبجکتی است که به عنوان ماژول در معرض دید برنامه قرار می گیرد. بنابراین ، هر آنچه را که به وسیله module.exports صادر یا  export کنید، به عنوان یک ماژول توسط برنامه اصلی دیده خواهد شد. امیدوارم که متوجه شده باشید.

 

موفق و پیروز باشید