Npm (תוכנה)

מתוך ויקיפדיה, האנציקלופדיה החופשית
npm
Npm-logo.svg
מפתח npm Inc (חברת בת של גיטהאב, שהיא חברת בת של מיקרוסופט)
מחזור חיים 12 בינואר 2010 – הווה (12 שנים)
גרסה אחרונה 9.1.2 (16 בנובמבר 2022) עריכת הנתון בוויקינתונים
מערכת הפעלה Cross-platform
נכתבה בשפות Javascript
סוג רישיון Artistic License 2.0 עריכת הנתון בוויקינתונים
קוד מקור https://github.com/npm/cli עריכת הנתון בוויקינתונים
www.npmjs.com
לעריכה בוויקינתונים שמשמש מקור לחלק מהמידע בתבנית OOjs UI icon info big.svg

npm (ראשי תיבות של Node Package Manager)[1] הוא מערכת ניהול חבילות לשפת התכנות JavaScript המתוחזקת על ידי חברת npm, Inc. המערכת מוגדרת כברירת מחדל עבור Node.js - סביבת ריצה (אנ') פופולרית של JavaScript. המערכת מורכבת מ-CLI, גם הוא נקרא npm, ומבסיס נתונים מקוון של חבילות פרטיות ציבוריות ובתשלום, הנקרא npm registry. הגישה לרישום מתבצעת דרך צד הלקוח, וניתן לעיין בחבילות הזמינות ולחפש דרך אתר npm. מנהל החבילות והרישום מנוהלים על ידי npm, Inc.

החשיבות של npm באה לידי ביטוי בכך שהוא מאפשר בקלות רבה לשתף פרויקט התלוי בחבילות\ספריות שונות (dependencies), באמצעות שמירת שם וגרסה בקובץ הנקרא package.json

npm כתובה כולה ב-JavaScript ופותחה על ידי אייזק ז. שולטר, שקיבל השראה מפרויקטים דומים אחרים כמו:PEAR )PHP) ו- CPAN (Perl).[2]

ראשי תיבות[עריכת קוד מקור | עריכה]

npm הוא רשמית "קיצור רקורנימי רקורסיבי עבור 'npm is not a package manager'.[3] עם זאת, בתחילת הדרך ראשי התיבות התייחסו ל-"Node Package Manager".[4] הרחבת השם שונתה בשנת 2014.[5]

תיאור[עריכת קוד מקור | עריכה]

npm נכללת כפיצ'ר מומלץ בתוכנית ההתקנה של Node.js.[6] המערכת מורכבת מCLI המתקשר עם רישום מרחוק (remote registry). אופן זה מאפשר למשתמשים לצרוך ולהפיץ את מודולי ה-JavaScript הזמינים ברישום.[7] החבילות ברישום הן בפורמט CommonJS וכוללות קובץ מטא-דאטה בפורמט JSON. למעלה מ-1.3 מיליון חבילות זמינות ברישום המרכזי.[8] מאחר שהרישום אינו כולל תהליך בדיקה, חלק מהחבילות האמורות עלולות להיות באיכות נמוכה, לא מאובטחות או זדוניות.[9] על מנת להתמודד עם בעיה זו, npm מסתמכת על דיווחי משתמשים כדי להסיר חבילות בעייתיות.[10] npm חושפת סטטיסטיקות כמו מספר הורדות, כדי לסייע למפתחים לשפוט את איכות החבילות.[11]

שימוש[עריכת קוד מקור | עריכה]

npm יכולה לנהל חבילות המהוות צימוד (dependency) מקומי של פרויקט מסוים (כלומר, חבילות\ספריות שהקוד שאנחנו כותבים זקוק להן כדי לרוץ), וגם חבילות התקנה של כלים גלובליים של JavaScript.[12] יכולת חשובה של npm בהקשר זה, היא התקנת כלל החבילות הרלוונטיות לפרויקט, בפקודה אחת בלבד, דרך קובץ בשם package.json.[13] בקובץ זה, ניתן לציין גרסה רצויה של כל חבילה מבוקשת לצורך הפרויקט, וכך מתאפשר למפתחים לעדכן אוטומטית את החבילות שלהם ובו בזמן להימנע משינויי שבירה לא רצויים כתוצאה מהבדלי גרסאות.[14]

קובץ ה-package.json שמור ביחד עם קוד הפרויקט ומפרט באופן מסודר אודות החבילות הרלוונטיות לקוד. דוגמה בסיסית לתוכנו של הקובץ, נראית כך:

{
  "name": "my_application",
  "version": "1.0.0",
  "dependencies": {
    "lodash": "^4.17.4"
  },
  "devDependencies" : {
  "gulp": "~3.1.0"
  }
}

בדוגמה לעיל, השם והגרסה מתייחסים לתוכנה אותה אני בונה, ואשר קובץ ה-package.json הוא חלק ממנה. תחת השדה dependencies נמצאת ספריה פופולרית בJavaScript בשם lodash, אשר הקוד שלי זקוק לה, בגרסה 4.17.4, כדי לרוץ. תחת השדה devDependencies נמצאות חבילות אשר אני זקוק להן רק בפיתוח, ולא בסביבת הפרודקשן (היכן שהתוכנה בסופו של דבר מיועדת לרוץ). משמעות הסימנים ^ ו-~ על יד מספר הגרסה, משמעותם היא מה תת-הגרסה החדשה ביותר שניתן להתקין. במקרה של ^, למשל בדוגמה לעיל, אם קיימת ל-lodash תת-גרסה 4.17.8, היא החדשה יותר וNPM תתקין אותה בעת ההרצה, אך לא כאשר קיימת תת-גרסה חדשה, למשל 4.18.0. כאשר מופיע הסימן ~, תתעדכן גם תת-הגרסה. למשל בדוגמה לעיל, אם קיימת ל-gulp תת-גרסה של 3.2.0, היא זו שתותקן, אך לא 4.0.0.

על מנת להתקין חבילה (dependency) מסוימת, למשל lodash, באופן שבו החבילה גם תתווסף לקובץ ה-package.json בקוד, עלי לכתוב את הפקודה הבאה בשורת הפקודה:

npm i --save lodash

פיצ'ר נוסף שמאפשרת npm הוא יצירת סקריפטים, באופן בו פקודה קצרה מוגדרת מראש בקובץ package.json, תריץ בשורת הפקודה סקריפט מסוים. כך למשל, הקוד הבא מביא לכך שבהרצת הפקודה npm start, ירוץ קובץ app.js (כיוון שהפקודה node נועדה להריץ קובצי node.js):

{
  "name" : "my_app",
  "scripts": {
    "start" : "node app.js"
  }
}

חלופות[עריכת קוד מקור | עריכה]

ישנן מספר חלופות קוד פתוח ל-npm בכל הנוגע להתקנת JavaScript מודולרי, כולל ied, pnpm, npmd ו- Yarn (מערכת ששוחררה על ידי פייסבוק באוקטובר 2016).[15] עם זאת, כל החבילות האמורות תואמות לרישום של npm, ומשתמשות בו כברירת מחדל. ההבדלים בין החבילות באים לידי ביטוי בחוויות שונות בצד הלקוח, המתמקדות בדרך כלל בשיפור ביצועים ודטרמיניזם בהשוואה ל-npm.[16]

רישום[עריכת קוד מקור | עריכה]

npm מסתמכת על בסיס נתונים NoSQL מסוג Couch DB לניהול נתונים זמינים לציבור.[17]

קישורים חיצוניים[עריכת קוד מקור | עריכה]

ויקישיתוף מדיה וקבצים בנושא Npm בוויקישיתוף

הערות שוליים[עריכת קוד מקור | עריכה]

  1. ^ "Initial drop. Ugly, sketchy, and not even yet quite a "work in progr… · npm/cli@4626dfa". GitHub.
  2. ^ Schlueter, Isaac Z. (25 במרץ 2013). "Forget CommonJS. It's dead. **We are server side JavaScript.**". GitHub. {{cite web}}: (עזרה)
  3. ^ Clarke, Darcy (12 בפברואר 2021). "npm - a JavaScript package manager". GitHub. npm. נבדק ב-5 באוקטובר 2021. {{cite web}}: (עזרה)
  4. ^ "NPM - a JavaScript package manager". GitHub. 12 בפברואר 2022. {{cite web}}: (עזרה)
  5. ^ "NPM is a nice JavaScript package manager · NPM/Cli@cbb890e". GitHub.
  6. ^ Dierx, Peter (30 במרץ 2016). "A Beginner's Guide to npm – the Node Package Manager". sitepoint. נבדק ב-22 ביולי 2016. {{cite web}}: (עזרה)
  7. ^ Ampersand.js. "Ampersand.js – Learn". ampersandjs.com. נבדק ב-22 ביולי 2016. {{cite web}}: (עזרה)
  8. ^ Nassri, Ahmad (14 באפריל 2020). "So long, and thanks for all the packages!". The npm Blog. נבדק ב-2021-01-06. {{cite web}}: (עזרה)תחזוקה - ציטוט: url-status (link)
  9. ^ Ojamaa, Andres; Duuna, Karl (2012). "Assessing the Security of Node.js Platform". 2012 International Conference for Internet Technology and Secured Transactions. IEEE. ISBN 978-1-4673-5325-0. נבדק ב-22 ביולי 2016. {{cite book}}: (עזרה)
  10. ^ "npm Code of Conduct: acceptable package content". נבדק ב-9 במאי 2017. {{cite web}}: (עזרה)
  11. ^ Vorbach, Paul. "npm-stat: download statistics for NPM packages". npm-stat.com.
  12. ^ Ellingwood, Justin. "How To Use npm to Manage Node.js Packages on a Linux Server". DigitalOcean. נבדק ב-22 באוקטובר 2016. {{cite web}}: (עזרה)
  13. ^ "npm-install". docs.npmjs. נבדק ב-22 באוקטובר 2016. {{cite web}}: (עזרה)
  14. ^ "semver". docs.npmjs. נבדק ב-22 באוקטובר 2016. {{cite web}}: (עזרה)
  15. ^ "Hello, Yarn!". The npm Blog. 11 באוקטובר 2016. נבדק ב-17 בדצמבר 2016. {{cite web}}: (עזרה)
  16. ^ Katz, Yehuda (11 באוקטובר 2016). "Why I'm working on Yarn". נבדק ב-17 בדצמבר 2016. {{cite web}}: (עזרה)
  17. ^ "registry | npm Docs". docs.npmjs.com. נבדק ב-2021-05-10.