זמן הריצה של Node.js
פונקציית Cloud Run פועלת בסביבה שכוללת גרסת מערכת הפעלה, חבילות תוספים, תמיכה בשפה וספריית Functions Framework שתומכת בפונקציה ומפעילה אותה. הסביבה הזו מזוהה לפי גרסת השפה, והיא נקראת זמן ריצה.
מידע על סביבות ריצה באופן כללי, ועל גרסת Ubuntu שבה כל סביבת ריצה של Node.js משתמשת, זמין במאמר סביבת ההפעלה של פונקציות Cloud Run.
כדי להתחיל לפתח ולפרוס פונקציות Cloud Run באמצעות Node.js, אפשר לעיין במדריך למתחילים.
כדי ליצור ולבדוק את הפונקציות במערכת המקומית, אפשר לעיין במאמר בנושא הרצת פונקציות באמצעות Functions Framework.
בחירת זמן הריצה
פונקציות ב-Cloud Run תומכות בכמה גרסאות של Node.js, שמפורטות בדף תמיכה בזמן ריצה. במהלך הפריסה, תוכלו לבחור את זמן הריצה המועדף של Node.js לפונקציה. פרטים על פריסה מ-Google Cloud CLI מופיעים במאמר פריסת פונקציה ב-Cloud Run.
סביבת הפעלה
סביבת ההפעלה כוללת את זמן הריצה, מערכת ההפעלה, חבילות וספרייה שמפעילה את הפונקציה.
גרסה 18 של Node.js וגרסאות חדשות יותר משתמשות בסביבת ביצוע שמבוססת על Ubuntu 22.04. גרסאות קודמות ל-Node.js 18 מבוססות על Ubuntu 18.04. מידע נוסף זמין במאמר בנושא סביבת ההפעלה של פונקציות Cloud Run.
הספרייה שמפעילה את הפונקציה היא Node.js Functions Framework.
מבנה קוד המקור
כדי שפונקציות Cloud Run יוכלו למצוא את ההגדרה של הפונקציה, לכל סביבת ריצה יש דרישות מסוימות לגבי המבנה של קוד המקור. מידע נוסף זמין במאמר כתיבת פונקציות Cloud Run.
ציון יחסי תלות
אפשר לציין יחסי תלות של הפונקציות על ידי רישום שלהם בקובץ package.json. מידע נוסף זמין במאמר בנושא ציון יחסי תלות ב-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
Node.js
שימוש בתווכה לטיפול בבקשות HTTP
פונקציות HTTP Cloud Run ב-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.