סקריפטים אגנוסטיים לחבילות עם Node.js

כיצד לפשט הפעלת סקריפטים ב-NPM, Yarn ו-PNPM

אם יש לך סקריפטים מותאמים אישית בקובץ package.json שלך, כמו "npm my-script" או "yarn my-script", הם יעבדו רק עם מנהל החבילות שאתה מגדיר. אבל NPM מציעה API להתקשר לקובץ ההפעלה הנוכחי בכל פעם, מבלי לציין זאת במפורש.

{
  "scripts": {
    "cleanup": "./clean-up.js",
    "copy": "./copy.js",
    "prepare": "npm run cleanup && npm run copy"
  }
}

שימוש ב-$npm_execpath

על ידי שימוש במחרוזת "$npm_execpath" במקום "npm" או "yarn" (או מנהל חבילות אחר כמו "pnpm"), הסקריפט הזה יעבוד עם כל מנהל חבילות, לא משנה מה המפתח הנוכחי השתמש כדי לקרוא לסקריפט המקורי .

{
  "scripts": {
    "cleanup": "./clean-up.js",
    "copy": "./copy.js",
    "prepare": "$npm_execpath run cleanup && $npm_execpath run copy"
  }
}

האם זה מתאים לכל המכונות?

למרבה הצער, השימוש ב-"$npm_execpth" כדי לגרום לסקריפטים לעבוד עם כל מנהל חבילות לא עובד בצורה מהימנה במחשבים שבהם מותקנת Windows.

מהי הדרך האמינה ביותר לקרוא לסקריפטים ב-package.json?

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

זה עדיף במכשירים שאינם מריצים Windows, שבהם אתה יכול להשתמש ב-"$npm_execpath" כדי לבצע באופן אמין את הסקריפטים האלה.