סביבת זמן הריצה של Node.js

פונקציית Cloud Run שלכם פועלת בסביבה שכוללת גרסה של מערכת הפעלה עם חבילות של תוספים, תמיכה בשפה וספרייה של Node.js Functions Framework שתומכת בפונקציה ומפעילה אותה. הסביבה הזו מזוהה לפי גרסת השפה, והיא נקראת מזהה זמן הריצה.

הכנת הפונקציה

אפשר להכין פונקציה ישירות ממסוף Google Cloud או לכתוב אותה במחשב המקומי ולהעלות אותה. כדי להכין את המחשב המקומי לפיתוח ב-Node.js, אפשר לעיין במאמר הגדרת סביבת פיתוח ב-Node.js.

סביבות זמן ריצה וקובצי אימג' בסיסיים נתמכים של Node.js

זמן ריצה המזהה של סביבת זמן הריצה מקבצים תמונת הבסיס בזמן הריצה
‫Node.js 24 nodejs24
  • ‫google-24 (ברירת מחדל)
  • google-24-full
  • google-24/nodejs24
  • google-24-full/nodejs24
  • ‫Node.js 22 nodejs22
  • ‫google-22 (ברירת מחדל)
  • google-22-full
  • google-22/nodejs22
  • google-22-full/nodejs22
  • ‫Node.js 20 nodejs20
  • ‫google-22 (ברירת מחדל)
  • google-22-full
  • google-22/nodejs20
  • google-22-full/nodejs20
  • ‫Node.js 18 nodejs18
  • ‫google-22 (ברירת מחדל)
  • google-22-full
  • google-22/nodejs18
  • google-22-full/nodejs18
  • ‫Node.js 16 nodejs16 google-18-full google-18-full/nodejs16
    ‫Node.js 14 nodejs14 google-18-full google-18-full/nodejs14
    ‫Node.js 12 nodejs12 google-18-full google-18-full/nodejs12
    ‫Node.js 10 nodejs10 google-18-full google-18-full/nodejs10
    ‫Node.js 8 nodejs8 יצא משימוש יצא משימוש
    ‫Node.js 6 nodejs6 יצא משימוש יצא משימוש

    בחירת זמן הריצה

    במהלך הפריסה, אפשר לבחור באחת מסביבות זמן הריצה הנתמכות של Node.js עבור הפונקציה.

    אפשר לבחור גרסת זמן ריצה באמצעות מסוף Google Cloud או ה-CLI של gcloud. לוחצים על הכרטיסייה עם ההוראות לשימוש בכלי הרצוי:

    gcloud

    מציינים את תמונת הבסיס של Node.js לפונקציה באמצעות הדגל --base-image, במהלך פריסת הפונקציה. לדוגמה:

    gcloud run deploy FUNCTION \
        --source . \
        --function FUNCTION_ENTRYPOINT \
        --base-image nodejs24
    

    מחליפים את:

    • FUNCTION בשם הפונקציה שאתם פורסים. אפשר להשמיט את הפרמטר הזה לגמרי, אבל אם תשמיטו אותו, תתבקשו לציין את השם.

    • FUNCTION_ENTRYPOINT עם נקודת הכניסה לפונקציה בקוד המקור. זה הקוד ש-Cloud Run מריץ כשהפונקציה פועלת. הערך של הדגל הזה צריך להיות שם של פונקציה או שם מלא של מחלקה שקיימים בקוד המקור.

    הוראות מפורטות לפריסת פונקציה באמצעות ה-CLI של gcloud מופיעות במאמר פריסת פונקציות ב-Cloud Run.

    המסוף

    אפשר לבחור גרסת זמן ריצה כשיוצרים או מעדכנים פונקציית Cloud Run במסוף Google Cloud . הוראות מפורטות לפריסת פונקציה זמינות במאמר פריסת פונקציות ב-Cloud Run.

    כדי לבחור סביבת ריצה במסוף Google Cloud כשיוצרים פונקציה, פועלים לפי השלבים הבאים:

    1. במסוף Google Cloud , נכנסים לדף Cloud Run:

      כניסה ל-Cloud Run

    2. לוחצים על כתיבת פונקציה.

    3. ברשימה Runtime בוחרים גרסת זמן ריצה של Node.js.

    4. לוחצים על Create ומחכים ש-Cloud Run ייצור את השירות באמצעות עדכון placeholder.

    5. המסוף יפנה אתכם לכרטיסייה מקור, שבה תוכלו לראות את קוד המקור של הפונקציה. לוחצים על שמירה ופריסה מחדש.

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

    מבנה קוד המקור

    כדי שפונקציות Cloud Run יוכלו למצוא את ההגדרה של הפונקציה, קוד המקור צריך להיות במבנה מסוים. מידע נוסף זמין במאמר בנושא כתיבה של פונקציות Cloud Run.

    ציון יחסי תלות

    אפשר לציין יחסי תלות של הפונקציות על ידי רישום שלהם בקובץ package.json. מידע נוסף זמין במאמר Specify dependencies in Node.js.

    סקריפט build של NPM

    כברירת מחדל, סביבת זמן הריצה של Node.js מפעילה את הפקודה npm run build אם מזוהה סקריפט build ב-package.json. אם אתם צריכים שליטה נוספת בשלבי הבנייה לפני הפעלת האפליקציה, אתם יכולים לספק שלב בנייה בהתאמה אישית על ידי הוספת סקריפט gcp-build לקובץ package.json.

    כדי למנוע את הרצת הסקריפט npm run build ב-build, אפשר:

    • הוספה של סקריפט gcp-build עם ערך ריק בקובץ package.json: "gcp-build":"".

    • הגדרת משתנה הסביבה של ה-build‏ GOOGLE_NODE_RUN_SCRIPTS למחרוזת ריקה כדי למנוע את ההפעלה של כל הסקריפטים.

    השלמה של פונקציה אסינכרונית

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

    פונקציות מבוססות-אירועים

    החזרה מרומזת

      exports.implicitlyReturning = async (event, context) => {
        return await asyncFunctionThatReturnsAPromise();
      };
    

    החזרה מפורשת

      exports.explicitlyReturning = function (event, context) {
        return asyncFunctionThatReturnsAPromise();
      };
    

    פונקציות HTTP

    // OK: await-ing a Promise before sending an HTTP response
    await Promise.resolve();
    
    // WRONG: HTTP functions should send an
    // HTTP response instead of returning.
    return Promise.resolve();
    
    // HTTP functions should signal termination by returning an HTTP response.
    // This should not be done until all background tasks are complete.
    res.send(200);
    res.end();
    
    // WRONG: this may not execute since an
    // HTTP response has already been sent.
    return Promise.resolve();

    שימוש בתווכה לטיפול בבקשות HTTP

    פונקציות HTTP ב-Node.js מספקות אובייקטים של request ו-response שתואמים ל-ExpressJS, כדי לפשט את השימוש בבקשות HTTP. פונקציות Cloud Run קוראות את גוף הבקשה באופן אוטומטי, כך שתמיד תקבלו את גוף הבקשה בלי קשר לסוג המדיה. כלומר, צריך להניח שבקשות HTTP נקראו במלואן עד שהקוד מופעל. השימוש בהטמעה של אפליקציות ExpressJS צריך להיעשות עם ההערה הבאה – במיוחד, יכול להיות שתווכה שמצפה שגוף הבקשה לא ייקרא לא תפעל כמו שצריך.

    שימוש במודולים של ES

    מודולים של ECMAScript (מודולים של ES או ESM) הם תכונה ללא סימון שמוגדרת בתקן TC39 ב-Node מגרסה 14 ואילך לטעינת מודולים של JavaScript. בניגוד ל-CommonJS, ‏ ESM מספק API אסינכרוני לטעינת מודולים. היא גם מספקת שיפור פופולרי בתחביר עם הצהרות import ו-export שאפשר להשתמש בהן בפונקציית Cloud Run (במקום בהצהרות require).

    כדי להשתמש ב-ESM בפונקציית Cloud Run, צריך להצהיר על "type": "module" בתוך package.json.

    {
      ...
      "type": "module",
      ...
    }
    

    אחר כך תוכלו להשתמש בהצהרות import ו-export.

    מידע נוסף על שימוש במודולים של ES