DDoS Community

Cover image for על 𝗡𝗣𝗠, 𝗡𝗣𝗫 ומה שביניהם
Elnatan Nitzan
Elnatan Nitzan

Posted on

על 𝗡𝗣𝗠, 𝗡𝗣𝗫 ומה שביניהם

מי שמפתח ב React יודע שכדי להקים פרוייקט חדש משתמשים בפקודה:
𝚗𝚙𝚡 𝚌𝚛𝚎𝚊𝚝𝚎-𝚛𝚎𝚊𝚌𝚝-𝚊𝚙𝚙

באחת הקבוצות עלתה שאלה מה זה בעצם 𝗡𝗣𝗫 ולמה לא משתמשים בפקודה שאנחנו מכירים יותר מהיום-יום: 𝗡𝗣𝗠.

את האמת שלא ידעתי לענות על השאלה הזו בשלוף, וזה איתגר אותי לחפור קצת ברשת על העניין.

אז בואו נעשה קצת סדר:
𝗡𝗣𝗠 = Node Package Manager

דרך שורת הפקודה אנחנו מבצעים פעולות (הורדה/הסרה/עדכון וכו') הקשורות בחבילות/ספריות ה JavaScript שכלולות ב npm, כש- React היא אחת הידועות שבהן.

עד גרסא 5.2.0 של npm - כדי להריץ חבילה מסויימת שהורדנו באמצעות npm, היינו צריכים לעשות אחד מה-2:

  1. להקליד בשורת הפקודה את הנתיב המקומי ששם שוכנת החבילה אותה אנו מעוניינים להריץ. למשל:

./node_modules/.bin/your-package-name

  1. או להוסיף בקובץ package.json של הפרויקט שלנו אובייקט בשם scripts, ובתוכו להכניס קיצור דרך לפקודה באמצעותה אנו מתכוונים להריץ את החבילה. ואז להשתמש בפקודה: 𝚗𝚙𝚖 𝚛𝚞𝚗 𝚢𝚘𝚞𝚛-𝚙𝚊𝚌𝚔𝚊𝚐𝚎-𝚗𝚊𝚖𝚎

כדי לייעל את האופן בו אנחנו יכולים להריץ חבילות, החל מגרסא 5.2.0 שיצאה לפני כ-4 שנים npm הוסיפו פקודה שנקראת npx.

𝗡𝗣𝗫 = Node Package Execute

ובעצם באמצעות הרצת פקודה שמתחילה במילה npx בתוספת שם חבילת ה- npm המבוקשת אנחנו מתקינים ומריצים אותה לוקלית באופן מיידי.

ולכן אנחנו משתמשים בפקודה בשביל להתקין ולהריץ פרוייקט חדש ב React.

יש מי שיטעה ויתקין את חבילת create-react-app על המחשב באופן גלובלי באמצעות
𝚗𝚙𝚖 𝚒𝚗𝚜𝚝𝚊𝚕𝚕 𝚌𝚛𝚎𝚊𝚝𝚎-𝚛𝚎𝚊𝚌𝚝-𝚊𝚙𝚙 -g

זו טעות, מכיוון שכל פעם שירצה להתקין פרויקט חדש ייעשה שימוש בגרסה הגלובלית המותקנת על המחשב שלו, ולא בגרסא המעודכנת של react שנמצאת בשרתי npm.

לכן בדוקומנטציה הרשמית של React וגם בריפו המקורי שלהם ב Github הם ממליצים למחוק באופן גלובלי את חבילת create-react-app מהמחשב (במידה והתקנת אותה בעבר) ורק אז להשתמש בדרך הרשמית npx.

ולסיום:
מי שבכל זאת מעוניין להשתמש במילה npm כדי להתקין ולהריץ פרויקט חדש, יוכל לעשות זאת (מגרסה +6 של npm) באמצעות הפקודה:

𝚗𝚙𝚖 𝚒𝚗𝚒𝚝 𝚛𝚎𝚊𝚌𝚝-𝚊𝚙𝚙 <𝚖𝚢-𝚊𝚙𝚙>
שהיא מבצעת את אותה פעולה של
𝚗𝚙𝚡 𝚌𝚛𝚎𝚊𝚝𝚎-𝚛𝚎𝚊𝚌𝚝-𝚊𝚙𝚙

יש לכם מידע נוסף לגבי npx?
מוזמנים לשתף בתגובות

reactjs #react #npm #npx

Discussion (0)