در پست قبلی در مورد استفاده از process برای دریافت آرگومانها از خط فرمان بحث کردیم. اما process ضعفهایی دارد. و برای دریافت اطلاعات دقیقتر و بهتر از خط فرمان باید کد نویسی های پیچیده ای بکنید. در این میان ماژول yargs بسیار کاربردی می باشد و می توانید به جای process با استفاده از yargs اطلاعات دقیقتری را از خط فرمان دریافت کنید. اولین کاری که باید انجام دهید این است که با استفاده از دستور زیر ماژول yargs را نصب کنید.
npm install yargs --save
بند آخر دستور –save است که به آن flag گفته می شود. استفاده از –save باعث می شود تا در فایل package.js در قسمت پیش نیازها نام ماژول ذخیره شود و در صورتی که پوشه ماژول ها را حذف کنید (مثلا در مورد اشتراک گذاری برنامه در github و …) فقط با یک دستور زیر تمامی ماژول ها به راحتی نصب می شود.
npm install
یک نمونه از فایل package.js که وابستی به دو ماژول را در بخش انتهایی فایل نشان می دهد:
{ "name": "node", "version": "1.0.0", "description": "just a test", "main": "app.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [ "keyword" ], "author": "Bahram Ahady", "license": "ISC", "dependencies": { "lodash": "^4.17.11", "yargs": "^12.0.5" } }
بعد از نصب yargs اولین کاری که باید بکنید باید در داخل پروژه خود این ماژول را require کنید. به این شکل:
const yargs = require('yargs');
حالا خط زیر را در خط فرمان (cmd) و یا ترمینال لینوکس خود وارد نمایید:
node app.js test1 test2 --title="salam" --body="my text body"
ماژول yargs متودی به نام argv دارد که بوسیله آن می توانید دقیقتر از خط فرمان اطلاعات مورد نیاز را دریافت کنید. برای امتحان کد زیر را در فایل خود اجرا کنید:
var argv = yargs.argv; console.log(argv);
در صورت اجرا، خروجی به این شکل خواهد بود:
{ _: [ 'test1', 'test2' ], title: 'salam', body: 'my text body', '$0': 'app.js' }
مثلا در خطا بالا دو متغییر title , body تعریف شذه است که برای دریافت آنها می توان به شکل زیر اقدام کرد:
var title = argv.title; var body = argv.body;
برای دریافت و ذخیره دو آگومان اولی یعنی test1 و test2 نیز به این شکل اقدام کنید:
var first = argv._[0]; var first = argv._[1];