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

האתגר של שקיפות בקנה מידה

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

Nx מחליף גישה זו אד-הוק עם תוכנית מתודולוגית במקום להעתיק ולהדביק, מפתחים מנהלים פקודה - FLT:0 - ולקבל פרויקט שמתאים לכל תקן שהצוות הגדיר.ה התבנית אינה עותק סטטי; זהו גנרטור שיכול להטמיע לוגיקה, לבקש קלט, ולעמוד תצורה באופן אוטומטי.

כיצד ניתן ל-Nx Consistency

Nx משיג עקביות באמצעות שלושה מנגנונים עיקריים: גנרטורים, תצורה משותפת, ושערי ביצוע (לעתים קרובות נקרא "סכמטיים" בתיעוד Nx הישן) הם פונקציות שיוצרות או משנים קבצים.הם הכלי העיקרי לתבניות מותאמות אישית.

גנרטורים: הקרן לתבניות מכס

גנרטור Nx הוא קובץ TypeScript (או JavaScript) המייצא פונקציית ההרחבה:4. פונקציה זו מקבלת פונקציה זו FLT:5 (הפשטה על מערכת הקבצים) ו-FLT:6 (האפשרויות שהתקבלו על ידי המפתח) בתוך הגנרטור, אתה יכול לקרוא, לעדכן, למחוק קבצים.

לדוגמה, דמיינו את הצוות שלכם דורש כל ספריה לפני מועד מראש לכלול מבנה תיקיה ספציפי: AFLT 7 במאי עבור יצוא חביות, תיקיה של FLT:8 עבור רכיבי תגובה, ו-FLT:9 תיקיה עבור בדיקות יחידה. גנרטור מותאם אישית יכול לספוג את זה באופן אוטומטי.זה יכול גם להוסיף את הספריה לקובץ חבית גלובלי, להירשם ב-FLT:10, וכל הגדרה הנדרשת על שם הספרייה.

עיצוב גנרטורים ב Nx

יצירת גנרטור מותאם אישית כוללת ארבעה שלבים ברמה גבוהה: הגדרת ממשק הגנרטור, יישום ההיגיון, רישום זה ב-FLT:11 או FLT:12, ולבחון אותו נגד עץ לעג.

שלב 1: Define the Schema and Interface

החל מהחלטת אילו פרמטרים תקבל הגנרטור אפשרויות נפוצות כוללות את ה-FLT:13, FLT:14, FLT:15 (עבור מגבלות תלויות Nx), ו-FLT:16 (CSS, SCSS, CSS-in-JS) אלה מוגדרים בקובץ FLT:17 אשר גם מפרט כללי אימות (למשל, שדות ברירת מחדל, שימוש לרעה ב- CLIx).

שלב 2: יישום ההיגיון הגנרטור

תפקיד הגנרטור מקבל 18 (FLT:18 ו- FLT:19 להשתמש בכלים של FLT:20 כדי אינטראקציה עם העץ.

  • (ב) [15] , ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
  • (ב) ,0) ,DeadProjectConfigurationFLT:1 , הוא מציג את הפרויקט החדש במרחב העבודה.
  • (ב) ויקרא י"ד: "וַיָּבְהִיא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא" (בראשית כ"ד, כ"ד).
  • (ב) ,0) ,ד"ד-ד'ד-ד'ר (ב) ,"הבא" (ב)"ה) ,"התורה" (ב"ב)

קבצי תבנית מאוחסנים לצד הגנרטור ומשתמשים ב- EJS syntax עבור אינטרפולציה משתנה.לדוגמה, תבנית LT:24 עשויה להכיל את ה-FLT:25 כדי להיות מוחלף עם שם הספרייה.You יכול לכלול גם בלוקים מותניים או לולאות בתוך תבניות אם ההיגיון הוא פשוט; עבור לוגיקה מורכבת יותר, מעדיף לתמרן את העץ בגנרטור עצמו.

שלב 3: לרשום את הגנרטור

גנרטורים רשומים ב-FLT:26 (או FLT:27 עבור הגדרות ישנות יותר) תחת סעיף LT:28 עבור תוסף מקומי, ה-FLT:29 קובץ בתוך specifies הפרויקט של התוסף אשר גנרטורים זמינים והיכן הקוד שלהם חי.

שלב 4: בדוק את הגנרטור

Nx מספק עוזר בדיקה, מ-FLT:31, מ- בדיקות יחידה אשר להפעיל את הגנרטור שלך על עץ וירטואלי, וקובע את מבנה הקובץ המתקבל.בנוסף, מקרים של מבחן: מה קורה אם הספריה כבר קיימת? אם המנהלית היא קן? אם האפשרויות הדרושות חסרות? - בדיקת Robust מבטיחה את הגנרטור נשאר אמין ככל שהמרחבים מתפתחים.

תקנים מתקדמים עם Nx

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

קידוד משותף ועיבוד קוניגורים

(ב) קובצי התצורה של האתר (Setrattier) בשורש סביבת העבודה (Nx's ESLint plugin (SeveFLT:33) מאפשרים לך להגדיר כללים מרחבי עבודה, תוך כדי מתן היתרי מדרגה לפרויקט, לדוגמה, באפשרותך לאכוף כי כל הספריות חייבות לעקוב אחר אמנת שם (למשל, תיקון FLT:34, שימוש במסמכים אלה של ELT) באופן כללי, במיוחד, או כללי (למשל, לא ניתן להשתמש ב-ALT39, או ב-E.

שילוב עם Nx השפיע על פקודות

(ה) ,(ה) , ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇

גרסאות תלותיות משותפות

Nx פותר את התלויות באמצעות יחיד FLT:46 שורש זה אומר שכל הפרויקטים חולקים את אותה גרסה של, אומר, תגובה או Lodash - חיסול של skew. for monorepos עם מסגרות שונות, אתה עדיין יכול להשתמש ניהול תלות ברמת העבודה באמצעות pinsLT:47 או FLT:48 מקומות עבודה, אבל Nx לאכוף כי אין נעלי תואמים בגרסה אישית שלה ⁇ s יכול גם כן כדי לאמת את הגרסאות ספציפיות של פיקוח.

דור קוד כשער

לעתים קרובות להתעלם טכניקת אכיפת דורש כי פרויקטים חדשים נוצרים רק באמצעות גנרטורים.בכמה מקומות עבודה Nx, אתה יכול לפרסם תוסף המספק את הדרך היחידה מותר ליצור ספרייה או יישום.אם מפתח יוצר באופן ידני קבצים, הם מסכנים את שובר הגרף התלות ולגרום ל-FLT:50 להתנהג בצורה לא נכונה.

מעבר ל-Scaffolding: Standardizing Architecture

תבניות מכס וכללי lint יכולים לא רק את מבנה הקובץ ואת סגנון הקוד, אלא גם דפוסים אדריכליים.כאן Nx מאיר בהשוואה לכלים פשוטים יותר.

מבנה קרנר כחוזה

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

  • (FLT:0)apps/BuildFLT:1) - יישומים הניתנים לפרוס (web, Mobile, Serverless function)
  • (ב) , (ב) , ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
  • (ב) ,0) ,Llibs/shared/utilsFIRLT 1
  • (ב) ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
  • (ב) ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇

הגנרטור מותאם אישית שלך יכול לאכוף את זה כברירת מחדל למנהלי ה-FLT:51, מה שמוביל לקטגוריה (למשל, תכונה, משותפת, גישה לנתונים), ו הצבת הפרויקט בהתאם.

אמנות ומגזינים

תגי Nx הם metadata המצורפים לפרויקטים כי חוק הגבול מודול משתמש.לדוגמה, ספרייה מתויגת (FLT:52) יכול להיות מותר לייבא FLT:53 אבל לא (FLT:54) Define את האמנה המתגת במסמך ברמה של עבודה, וליישם אותה ב גנרטור: כאשר מפתח יוצר ספרייה חדשה של סוג "נתונים-גישה", הגנרטור מוסיף באופן אוטומטי את התגים של LT:55 לאחר מכן.

שם משותף לתבניות נפוצות

שקול גנרטורים לבניית דאגות צולבות: logging, גבולות שגיאה, קובצי לקוח API, הגדרות נתיב במקום כל מפתח יישום שירות כניסה שונה, גנרטור יוצר שירות עקבי עם הספרייה שנבחרה של הצוות (למשל, וינסטון, Pino) מראש-config-config זהה חל על שאילתות GraphL, נקודות קצה, ניהול המדינה פרוסות, ועוד מודל של כל אחד.

שיפור תקנים לתוך זרימת העבודה של הצוות שלך

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

התחל קטן: גנרטור אחד, חוק אחד

אל תנסו ליצור כל סוג פרויקט אפשרי ביום אחד.זהה את הסוג הנפוץ ביותר של הצוות שלכם יוצר – ככל הנראה ספרייה עבור שכבה מסוימת או מעטפת יישום חדשה – ולבנות גנרטור עבור זה. באופן סימולטני, להציג חוק אכיפה אחד, כגון פורמט טרום-שכבתי ב- CI.Let the Team ליהנות לפני הוספת מורכבות נוספת.

מסמך גנרטורים וועידות שלך

גנרטורים הם חסרי תועלת אם אף אחד לא יודע שהם קיימים.הוספת מנהל לשורש העבודה עם דף קצר רישום כל הגנרטורים המותאמים אישית, האפשרויות שלהם, ודוגמאות.מנע את השמות מוסכמות והגדרות תגים. שמור מסמך זה מעודכן ככל שמרחב העבודה מתפתח.עוד, קישור אליו מהפלט של הפיקוד על ה-FLT:57 או מהודעות בכפוף לשגיאה של חוק המודול.

שימוש ב-Nx Console for Discoverability

(FLT:0)Nx ConsoleofLT:1 הוא תוסף קוד VS וג'טBrains המספק GUI עבור גנרטורים ריצה.It מתעד אוטומטית את כל הגנרטורים מתוספים מותקנים, כולל אלה המותאמים אישית שלך. עודד את הצוות שלך להשתמש בו - הם יכולים לראות בדיוק מה גנרטור יוצר לפני הפעלתו, ואת הschema מסלק אפשרויות ברורות.

מבוסס על Feedback

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

צמצום ההשפעה של ההסכמה

איך יודעים אם התבניות והסטנדרטים המותאמים אישית שלכם עובדים?

  • (FLT:0) ניכוי זמן מפוספס: עד כמה זמן לוקח חבר צוות חדש להקים סביבת פיתוח מקומית וליצור את התכונה הראשונה שלהם?
  • (FLT:0) ביטול שינויים בתצורה ידנית:FreaLT:1 , בדוק את ההיסטוריה של ביצוע ההתאמות של נתיבי תצורה, להוסיף תלות נעדרים, או מחדש תיקיות לאחר הבריאה הראשונית.
  • (FLT:0)אזהרות lint בסקירה קוד:03FLT 1:1 אם שערי CI שלך עובדים, מפתחים רואים שגיאות lint לפני שהם דוחפים.
  • (FLT:0)Faster PR Review מחזורי:FLT:1 כאשר כל פרויקט נראה דומה, סוקרים יכולים להתמקד בהחלטות לוגיות ועסקים במקום להתווכח על סידורי תיקיה או על שם.

לעקוב אחר המדדים האלה באופן לא רשמי עם הצוות שלך.אם אתה משתמש בכלי כמו Code Climate או לוח מחוונים עבור הכדאיות של CI, אתה יכול להפיק מספרים אובייקטיביים.המטרה היא לא להגיע לשלמות, אלא כדי להפחית באופן רציף את החיכוך שנגרם על ידי חוסר עקביות.

מסקנה

שקיפות במונותרופו אינה תאונה; היא תוצאה של כלי מכוון ומשמעת צוות. Nx נותן לך את הכוח לקודש את החלטות הצוות שלך לתוך גנרטורים, לאכוף אותם עם linting ו- CI שערי, ולפתח אותם כפי שהארגון שלך לומד.תבניות המכס מבטלות את ה-Commontatives, רזולוציה של שלב של העתקה ופרויקטים ישנים, אשר מאוחסנים במהירות על ידי תצורה אחת של תצורה אחת, למנוע את הגנרטורים אלה.