React Canaries: מאפשרים השקה הדרג של יכול מחוץ ל-Meta
3 במאי 2023 מאת דן אברמוב, סופי אלפרט, ריק הנלון, סבסטיאן מרקבגה, ואנדרו קלארק
אנחנו להציע לקהילת React רוצים אפשרות לאמץ אפשרות חדשות בודדות שהעיצוב שלהן כמעט סופית, עוד לפני שהן משוחררות בגרסה יציבה, בדומה לאופן שבו Meta משתמשת במשך שנים בגרס דימום-edge של React פנימית. אנחנו מציגים ערוץ שחרור חדש ונתמך רשמית: Canary release channel. הוא יכול ל-setups מנעולים כמו frameworks לנתק בין אימוץ יכול React ספציפיות על לוח הזמנים של שחרורי React.
tl;dr
- אנחנו מציגים ערוץ Canary release channel נתמך רשמית React. בגלל שהוא נתמך רשמית, אם תיכנס רגרסיה נתייחס אליה בדחיפות דומות לבאגים בשחרורים יציבים.
- Canaries יכולים להתחיל להשתמש ביכולות חדשות פרטים של React לפני שהן נכנסות לשחרורי שמבר יציבים.
- דרוש לערוץ ניסיוני, React Canaries יכול רק להיות מאמינים באופן סביר שהן מוכנות לאימוץ. אנחנו מעודדים frameworks לשקול שילוב של גרסאות Canary נעולות של React.
- נכריז בבלוג על שינויים שוברים ואפשר חדשות כשהם נכנסים לשחרורי Canary.
- כמו תמיד, React ממשיך לעקוב אחרי כל שחרור יציב.
איך בדרך כלל מפותחות יכולות React
בדרך כלל כל יכולת ב-React עברה את אותם שלבים:
- אנחנו מפתחים גרסה ראשונית ומוסיפים לה קידומת
experimental_אוunstable_. אישית זמינה רק בערוץ השחרורexperimental. הזה מצופה שהיא תשתנה ממלאת. - אנחנו מוצאים צוות ב-Meta שמוכן לעזור לבדוק את ולתת משוב. זה מוביל לשינויים. אנחנו עובדים עם צוותים נוספים ב-Meta שמנסים אותה.
- בסוף אנחנו מרגישים בטוחים בעיצוב. אנחנו מסירים את הקידומת משם ה-API, והיכולת זמינה כברירת מחדל בענף
main, שבו רוב מוצרי Meta users. זה כל צוות ב-Meta יכול להשתמש בה. - ככל הביטחון בכיוון גדל, גם מפרסמים RFC עבור החברה החדשה. זה אנחנו יודעים שהעיצוב עובד על טווח רחב של מקרים, אבל ייתכנו התאמות של הרגע האחרון.
- כשאנחנו קרובים לשחרור קוד פתוח, אנחנו כותבים תיעוד ליכולת ולבסוף משחררים בגרסה שלה יציבה של React.
ה-Playbook הזה עובד טוב לרוב היכולות ששחררנו עד היום. עם זאת, כאשר שלב 5 הוא משוחרר בקוד פתוח (שלב 5).
אנחנו רוצים להציע לקהילת React ולא אפשרות ללכת בגישה דומה לזו של Meta, מרץ יכול חדשות בודדות מוקדם יותר (ברגע שהן זמינות), בלי להמתין למחזור השחרור הבא של React.
כמו תמיד, יכול כל React יגיעו בסוף לשחרור יציב.
למה לא פשוט להוציא יותר שחרורי קטין?
באופן כללי, אנחנו כן משתמשים בשחרורי מינור כדי לאפשר חדשות.
אבל זה לא תמיד אפשרי. לפעמים חדשות מקושרות ליכולות חדשות אחרות שעדיין לא הושלמו ואנחנו עדיין עושים עליהן איטרציה. אי אפשר לשחרר אותם בנפרד כי המימושים קשורים זה בזה. אי אפשר לגרס אותם בנפרד כי הן משפיעות על אותן חבילות (כל react ו-react-dom). ואנחנו צריכים לשמר את ההמשך איטרציה על החלקים שלא מוכנים בלי סבב של גרסאות מרובות, זה היה מחייב.
ב-Meta פתרנו את זה על ידי בניית React מענף main, ועדכון ידני לקומיט נעול ספציפי בכל שבוע. זו גם הגישה שבה React Native עובד כבר כמה שנים. כל שחרור יציב של React Native נעול לקומיט ספציפי מענף main של מאגר React. זה יכול ל-React Native לכלול ולא תיקוני באגים חשובים יכולים חדשות של React בהדרגה ברמת ה-framework, בלי תלוי בלוח השחרורים הגלובלי של React.
אנחנו רוצים להפוך את זרימת העבודה הזו לזמינה גם ל-frameworks ול-setups מנעולים אחרים. לדוגמה, זה יכול ל-framework שמעל React לכלול שינוי שובר שקשור ל-React לפני שהשינוי הזה נכנס לשחרור יציב של React. זה שימושי במיוחד כי חלק מהשינויים השוברים משפיעים רק על מסגרת אינטגרציות. מסגרת זו יכולה לשחרר כזה בגרסת מינור משלו בלי לשבור.
שחרורים מתגלגלים דרך ערוץ Canaries יתנו לנו לולאת מהדוקה יותר ובטיחו שהשובות החדשות מקבלות בדיקות מקיפות בקהילה. זרימת העבודה הזו קרובה יותר לאופן שבו TC39, ועדת התקנים של TK_, מטפלת בשינויים ממוספרים.ממתנות חדשות של React עשויות להיות זמינות ב-frameworks שרות מבוססי React לפני שהן מגיעות לשחרור יציב של __TK___T מאוו __TK___T.
למה לא להשתמש בשחרורי ניסיוני במקום?
למרות שמבחינה טכנית אפשר להשתמש ב-גרסאות ניסיוניות, אנחנו לא ממליצים להשתמש בפרודקשן, כי APIs ניסיוניים יכולים לעבור שינויים משמעותיים בדרך לייצוב (או להימחק לגמרי). גם Canaries להכיל טעויות (כמו כל שחרור), אבל אנחנו מתכוונים להכריז בבלוג על שינויים משמעותיים בקנרים. הקנריות הקרובות ביותר לקוד ש-Meta מריצה בפנים, בדרך כלל אפשר לראות שיהיו יציבים יחסית. אבל כן צריך לנעול גרסה ולעבור ידנית על commit log ב-GitHub כשמעדכנים בין קומים נעולים.
אנחנו מצפים שרוב מי שמשתמש ב-React מחוץ ל-setup מנוהל (כמו מסגרת) ימשיך להשתמש בשחרורי יציב. אבל אם אתם בונים מסגרת, כדאי לשקול שילוב גרסת Canary של React שנעולה לקומיט מסוים ולעדכן בקצב שלכם. הוא יכול להשתחרר למשתמשים שלכם יכול להיות באגים בודדים של React מוקדם יותר ובקצב השחרור שלכם, בדומה למה ש-React Native עושה כבר כמה שנים. החיסרון הוא לוקחים אחריות נוספת לבקש קומיטים של React נכנסים ולעדכן את המשתמשים אילו שינויים ב-React נכללים בכל שחרור שלכם.
אם אתם מחברי מסגרת ורוצים לנסות את הגישה הזו, דברו איתנו.
הכרזה מוקדמת על שינויים שוברים ויכולות חדשות
שחרורי Canary הכי טוב שאפשר למצוא את ההערכה הטובה שלנו בכל רגע למה ייכנס לשחרור היציב הבא של React.
באופן טבעי הכרזנו על שינויים חוזרים רק במחזור השחרור (בזמן שחרור גדול). עכשיו כש-Canary הוא דרך נתמכת רשמית לצרוך React, אנחנו מתכננים לעבור שינויים שוברים ואפשרויות חדשות משמעותיות ברגע שהם נכנסים ל-Canaries. לדוגמה, אם נמזג שינוי שובר שייצא ב-Canary, נכתוב עליו פוסט בבלוג React כולל קודמודים והנחיות מיגרציה לפי הצורך. לאחר מכן, אם אתם מחברי מסגרת שמוציאים שחרור גדול ומעדכנים את React canary הנעול כדי לכלול את השינוי הזה, יש לקשר לפוסט שלנו מתוך הערות השחרור. ולבסוף, כשגרסת major יציבה של React תהיה מוכנה, נקשר לאותם פוסטים של פורסמו, מה שלדעתנו יעזור לצוות להתקדם מהר יותר.
אנחנו מתכננים לתעד APIs הם נכנסו לקנרים, גם אם הם עדיין לא זמינים מחוץ ללערוץ הזה. APIs שזמינים רק ב-Canaries יסומנו עם הערה מיוחדת בדפים המתאימים. זה כלול APIs כמו [API](TK_3 ועוד כמה נוספים (כמו API ו-API) שעבורם נפרסם RFCs.
חייבים לנעול קנריות
אם החלטתם לאמץ את זרימת העבודה של Canary באפליקציה או ב-framework שלכם, ודאו אתם תמיד נועלים את הגרסה המדויקת של Canary שאתם משתמשים בה. מה ש-קנריות הם ממוקדים, הם עדיין יכולים לכלול שינויים שוברים.
דוגמה: React רכיבי שרת
כפי שהכרזנו במרץ, הקונבנציות של React רכיבי שרת ראהנסגרו, ואנחנו לא מצפים לשינויים שוברים במשתמשים. עם זאת, עדיין אי אפשר לשחרר תמיכה ב-React רכיבי שרת בגרסה יציבה של React כי אנחנו ממשיכים לעבוד על כמה אפשר שקשורות ל-framework בלבד (כמו טעינת נכסים# לעוד שינויים שם.
היא ש-React רכיבי שרת כבר מוכנים לאימוץ על ידי מסגרות. אבל עד שחרור major הבא של React, הדרך היחידה ל-framework לאמץ אותם היא לשחרר גרסת Canary נעולה של React. (כדי עותקי React, מסגרת רזולוציית react ו-react-dom לגרסת ה-Canary הנעולה שהם משחררים עם ה-framework, ולהסביר זאת למשתמשים שלהם. לדוגמה, כך עובד Next.js App Router.)
בדיקת ספריות מול גרסאות יציב וגם Canary
אנחנו לא מצפים ממחברי ספריות לבדוק כל שחרור קנרי בודד, כי זה קשה מדי. אבל כמו שעודדנו כש-הצגנו במקור את ערוצי ה-Prerelease עזרה של React לפני שלוש שנים, אנחנו מעודדים ספריות שהריץ בדיקות מול גם גרסת יציבה אחרונה וגם גרסת קנרי לאחרונה. לנפוצה, היא תפחית את המאמץ שנדרש לשדרג ספריות, כירסאות גדולות_2__.
שחרורים יציבים עובדים כמו קודם
אנחנו לא משנים שום דבר באופן שבו שחרורי React יציבים עובדים.