ג'אסט הוא כלי להרצת משימות לפרויקט. הוא עובד עם כל שפה ויש לו תחביר שקצת דומה ל make, רק שבעוד ש make נועד ספציפית לבנות מודולים לפרויקט, ג'אסט הוא יותר כללי במטרה שלו ומכוון להרצת משימות וניהול התלויות ביניהן.
בואו נראה דוגמה קצרה איך just יכול לעזור לנו בפרויקט node כש npm מתחיל להסתבך. נניח שיש לי קובץ package.json כזה:
{
"name": "demo-project",
"version": "1.0.0",
"description": "A simple demo project",
"main": "index.js",
"scripts": {
"start": "npm run build && NODE_ENV=production node index.js",
"build": "echo building the app",
"test": "echo \"Error: no test specified\" && exit 1"
},
"dependencies": {
"express": "^4.18.2"
},
"devDependencies": {
"nodemon": "^2.0.22",
"babel-cli": "^6.26.0"
}
}
שימו לב לבלוק הסקריפטים ובמיוחד לסקריפט start:
"start": "npm run build && NODE_ENV=production node index.js",
הסקריפט מריץ שני דברים, קודם את build ואחרי זה מפעיל את התוכנית. הוא יפעיל את התוכנית רק אם build הצליח ובהפעלת התוכנית הוא יגדיר משתנה סביבה בשם NODE_ENV
. זה סקריפט שנועד להפעלה רק על מערכות יוניקס ואין בו באמת ניהול תלויות למרות שזה קצת נראה כמו. נדמיין שמישהו יוסיף עוד סקריפט לקובץ:
publish: "npm run build && npm run start"
אז במצב כזה ה build ירוץ פעמיים, כי publish יקרא לו ואז start גם יפעיל אותו.
כשה npm מתחיל להסתבך, just יכול להציל את המצב. ג'אסט הוא כלי שרץ משורת הפקודה, אבל אנחנו יכולים להוסיף אותו לקובץ ה package.json בתור תלות נוספת לפיתוח כדי שאנשים לא יצטרכו להתקין אותו בנפרד:
"devDependencies": {
"just-install": "2.0.2",
}
אחרי שהוספנו והתקנו אותו אנחנו יוצרים קובץ בשם justfile
בתיקייה הראשית של הפרויקט עם תוכן שנראה כמו Makefile:
default:
just --list
start: build
NODE_ENV=production
node index.js
build:
echo building app
ועכשיו אפשר למחוק את כל בלוק הסקריפטים מ package.json ולעבור לעבוד עם just. אני מריץ:
$ npx just
just --list
Available recipes:
build
default
start
כדי לראות את רשימת האפשרויות, ואז בשביל המשחק אני מריץ:
$ npx just start
echo building app
building app
NODE_ENV=production
node index.js
starting app
ואני רואה ש start הריץ גם את build וגם את פקודת ה node. בשביל להוסיף סקריפט publish ל justfile אני כותב:
publish: build start
echo publish
ובהפעלה ברור ש build רץ רק פעם אחת:
$ npx just publish
echo building app
building app
NODE_ENV=production
node index.js
starting app
echo publish
publish
התיעוד של just מצוין ויש לו הרבה פחות פינות חדות בהשוואה ל make וגם ChatGPT מכיר אותו די טוב אז לא תהיה לכם בעיה להיעזר ב AI כשצריך. אפשר לקרוא יותר על הכלי בגיטהאב שלהם בקישור:
https://github.com/casey/just/