למד כיצד לבנות תוכנית עם ממשק שורת פקודה סטנדרטי באמצעות ספרייה מועילה זו.
אפליקציות CLI (Command Line Interface) הן אפליקציות מבוססות טקסט פשטניות הפועלות בטרמינל כדי להשלים משימות ספציפיות. יישומי CLI ממלאים תפקיד מכריע בזרימת העבודה של כמעט כל מפתח ומקצוען IT.
הם בעיקר כלי שירות המקיימים אינטראקציה עם מערכת ההפעלה או יישומים כאלה מותקן באופן מקומי או זמין דרך האינטרנט כדי לבצע משימה בהתאם לקלט המשתמש ו הנחיות.
הבנת יישומי CLI
ממשק שורת פקודה מאפשר לך ליצור אינטראקציה עם תוכנית על ידי הקלדת שורות טקסט. תוכניות CLI רבות פועלות בצורה שונה בהתאם לפקודה שבה אתה משתמש כדי להפעיל אותן.
לדוגמה, תוכנית ls מציגה מידע על הקבצים ואת התוכן של ספריות. אתה יכול להפעיל את זה כך:
ls -l /home
פקודה זו כוללת:
- שם התוכנית: ls.
- אפשרות (או דגל). במקרה הזה, -ל היא אופציה שהיא קיצור של "ארוך" ומייצרת מידע מפורט יותר.
- ויכוח, /home. כאן, הארגומנט מציין נתיב לספרייה להצגת מידע עבורו.
בעוד שכל תוכנית עשויה להגדיר ממשק שורת פקודה משלה, אלמנטים מסוימים נפוצים ונמצאים בשימוש נרחב. עליך לפעול לפי הסטנדרטים הללו כדי שמי שמכיר את ממשק שורת הפקודה יוכל להשתמש בתוכנות שלך בקלות.
מה זה Commander.js?
Commander.js הוא חבילה המאפשרת לבנות אפליקציות CLI ב-Node.js. יש לו ספרייה עשירה של תכונות המאפשרות לך לבנות אפליקציית CLI סטנדרטית, ולבצע הרבה מהעבודה הכבדה. אתה רק צריך להגדיר פקודות, אפשרויות ופונקציונליות עבור אפליקציית CLI שלך.
שילוב זה עם חבילות אחרות כגון Chalk.js לסטיילינג, אתה יכול ליצור במהירות אפליקציית CLI פונקציונלית מלאה ב-Node.js.
בניית אפליקציית CLI ב-Node.js באמצעות Commander.js
שקול דוגמה לאפליקציית CLI, עירוני-קלי, שמחפש את המשמעות של מילים וקיצורי מדיה חברתית מ המילון העירוני. תלמד כיצד ליצור את ה-CLI ולפרסם אותו ב- npm רישום החבילות כדי שאחרים יוכלו להתקין אותו.
צור תיקיה חדשה ואתחול פרויקט Node.js חדש עם הפקודות הבאות:
mkdir urbanary-cli
cd urbanary-cli
npm init -y
CLI זה ישתמש Axios לשליחת בקשות HTTP ל-API של מילון עירוני. אתה יכול להשתמש API מהיר כדי לבדוק נקודות קצה ולהציג אישורים.
CLI פשוט עם פקודה משנה ועזרה
כדי להתחיל לבנות את ה-CLI שלך, התקן את Commander ו-Axios עם הפקודה הבאה:
npm install commander axios
צור תיקייה חדשה, פַּח, בספריית הפרויקט שלך וקובץ ריק חדש, index.js:
mkdir bin
cd bin
touch index.js
ה פַּח (קיצור של "בינארי") התיקיה חשובה מכיוון שהיא מכילה את קובץ נקודת הכניסה ש-Node קורא לו כאשר אתה מפעיל את ה-CLI שלך. ה index.js הקובץ הוא קובץ נקודת הכניסה הזה. כעת, ערוך את קובץ index.js והתחל לבנות את ה-CLI שלך עם Commander.js API.
ראשית, ייבא את תכנית חפץ ממפקד:
const { program } = require('commander');
אתה תשתמש ב- תכנית אובייקט כדי להגדיר את ממשק התוכנית שלך, כולל פקודות משנה, אפשרויות וארגומנטים. לאובייקט יש שיטות מתאימות לכל אחד מאלה; לדוגמה, כדי להגדיר פקודה משנה, השתמש ב- פקודה שיטה.
תגדיר א למצוא תת-פקודה ל-CLI לחפש מילים מתוך מילון אורבני ולהוסיף תיאור עבורו באמצעות הקוד שלהלן:
// index.js
program
.command('find ' )
.description('find meaning of a word or abbreviation or slang')
זה רושם א למצוא פקודה, המצפה למילה אחריה, ותיאור עבורה. השימוש בסוגריים זווית מסמל שהמילה היא טיעון נדרש; השתמש בסוגריים מרובעים במקום זאת ([]) כדי להפוך אותו לאופציונלי.
עליך להוסיף תיאור כי Commander.js משתמש בו כדי ליצור טקסט עזרה. כאשר אתה מפעיל את היישום עם עֶזרָה פקודה, תקבל מדריך שימוש סטנדרטי.
כדי לבדוק זאת, הוסף את הדברים הבאים:
program.parse()
לאחר מכן הפעל את התוכנית והעביר אותה עֶזרָה פקודה כדי לקבל את הפלט למטה:
כך כל יישום CLI סטנדרטי יציג את העזרה שלו למשתמשים, ועם Commander, אתה לא צריך לדאוג ליצור אותו בעצמך. ה -ח ו --עֶזרָה אפשרויות שימושיות לבדיקת מדריך השימוש עבור פקודה.
הגדרת אפשרויות והכנת התוכנית הסופית
אתה גם מגדיר אפשרות על ידי שרשרת ה אוֹפְּצִיָה שיטה להגדרת הפקודה.
הנה איך להגדיר אפשרות לכלול דוגמאות בהגדרות של מילים:
program.option('-e, --example', "Display examples")
והנה איך להגדיר אפשרות המציינת את מספר ההגדרות להחזיר:
program.option(
'-c, --count [amount]',
'amount of definitions to display (max is 10)'
)
ה אוֹפְּצִיָה השיטה מקבלת שני פרמטרים של מחרוזת, האחד עבור שם האופציה (הן קצר והן צורות ארוכות), והשני עבור התיאור שלה. התוספת [כמות] טיעון ב לספור option הוא הערך של מספר ההגדרות שיוצגו.
כעת, השיטה האחרונה להוסיף היא פעולה שיטה. אתה תיישם את למצוא הפונקציונליות של הפקודה בשיטה זו. הוסף אותו לשרשרת כך שהקוד שלך ייראה כעת כך:
program
.command('find ' )
.description('find meaning of a word or abbreviation or slang')
.option('-e, --example', "Display examples")
.option(
'-c, --count [amount]',
'amount of definitions to display (max is 10)'
)
.action(async (word, options) => {});
עם ההגדרה הזו, הנה איזו פקודה לקבל שלוש הגדרות שלה חחח עם דוגמאות ייראה כך:
urbanary-cli find lol -e -c 3
לחלופין, באמצעות הצורה הארוכה של כל אפשרות:
urbanary-cli find lol --example --count 3
לבדוק דף ה-npm של המפקד כדי ללמוד עוד עליו וכיצד להתאים את הפונקציות שלו למקרי השימוש השונים שלך.
יישום הפונקציונליות של התוכנית
ראשית, ייבא את Axios לתוך שלך index.js קובץ באופן הבא:
const axios = require('axios');
לאחר מכן, בגוף הפונקציה של פעולההפרמטר של, אתה יכול ליישם את ההיגיון להגיש בקשות למילון עירוני ולהציג תוצאות בהתאם לאפשרויות שלך.
התחל בהגדרת הבקשה שלך:
let requestOptions = {
method: 'GET',
URL: "https://mashape-community-urban-dictionary.p.rapidapi.com/define",
params: { term: word },
headers: {
'X-RapidAPI-Key': YOUR_RAPID_API_KEY,
'X-RapidAPI-Host': 'mashape-community-urban-dictionary.p.rapidapi.com'
}
}
לאחר מכן שלח את הבקשה ל-API באמצעות Axios עם הקוד הבא:
try {
let resp = await axios.request(requestOptions);
console.log(`Definitions for ${word} fetched`);
wordData = resp.data.list;
} catch (err) {
console.error(err.message)
}
המאפיין היחיד שאתה צריך מנתוני התגובה הוא ה רשימה נכס שמכיל הגדרות ודוגמאות.
עדיין ב- לְנַסוֹת לחסום, הוסף את ההיגיון הזה כדי לטפל באפשרויות ולהציג את התוצאות באופן הבא:
if (options.example && options.count) {
let cnt = 1;
let definitions = wordData.slice(0, options.count);definitions.forEach((elem) => {
console.log(`Definition ${cnt++}: ${elem.definition}`);
console.log(`Example:\n${elem.example}\n`);
});
} elseif (options.count && !options.example) {
let cnt = 1;
let definitions = wordData.slice(0, options.count);
definitions.forEach((elem) => {
console.log(`Definition ${cnt++}: ${elem.definition}`);
});
} elseif (options.example) {
console.log(`Definition: ${wordData[0].definition}`);
console.log(`Example:\n${wordData[0].example}`);
} else {
console.log(`Definition: ${wordData[0].definition}`);
}
קוד זה מעריך את ארגומנטי הפקודה באמצעות הצהרות if-else כדי לקבוע כיצד להציג את הפלט. אם ה דוגמא ו לספור האפשרויות עוברות, זה חוזר על עצמו wordData ומדפיס איתם את המספר המצוין של הגדרות ודוגמאות.
אם תעבור רק לספור, הוא מציג את הכמות הזו של הגדרות ללא דוגמאות. אם תעבור רק דוגמא, הוא מציג הגדרה אחת עם משפט לדוגמה. ה אַחֵר הצהרה היא התנהגות ברירת המחדל להדפיס רק את ההגדרה אם אינך עובר שום אפשרויות.
האפליקציה מוכנה כעת, אז השלב הבא הוא להפוך אותה לניתנת להפעלה. התחל בהוספה קו shebang לתחילת קובץ bin/index.js שלך כדי שתוכל להפעיל אותו כסקריפט עצמאי:
#!/usr/bin/env node
לאחר מכן, פתח את שלך package.json קובץ, ערוך את הערך של רָאשִׁי נכס, והוסיפו א פַּח נכס אחריו כך:
"main": "./bin/index.js",
"bin": {
"urbanary-cli": "./bin/index.js"
},
המפתח עירוני-קלי, מתחת פַּח היא הפקודה שתזין בטרמינל שלך כדי להפעיל את היישום שלך. לכן, הקפד להשתמש בשם הולם שם בעת בניית יישומי שורת הפקודה שלך.
לָרוּץ npm התקנת -g כדי להתקין את היישום באופן גלובלי, ותוכל להפעיל את היישום כפקודה מהמסוף שלך.
התמונה למטה מציגה את תהליך ההתקנה ופקודת בדיקה למציאת המשמעות של lmk:
אתה יכול גם לפרסם אותו ברישום החבילות של npm על ידי הפעלה npm לפרסם בטרמינל בתוך ספריית הפרויקט. זה הופך אותו להתקנה על ידי כל אחד מכל מקום שמשתמש npm להתקין.
קל יותר לבנות ולפרסם את האפליקציה שלך עם Node.js, בהשוואה לזמן שבו אתה לבנות CLI עם טכנולוגיות כמו Rust.
בניית יישומי CLI פונקציונליים עם Node.js
בין אם אתה עובד על חבילת npm וצריך כלי CLI שילווה אותה, או שאתה פשוט רוצה לבנות כלי לשיפור זרימת העבודה שלך כמפתחים. יש לך את כל מה שאתה צריך כדי להביא את הרעיון שלך לחיים עם חבילת Node.js Commander.
אתה יכול גם ללכת רחוק יותר על ידי שימוש בספריות אחרות כדי ליצור חוויות CLI משופרות עבור היישומים שלך, Node.js חזק מספיק כדי לשרת את המטרות שלך בלי הרבה טרחה.