שיפור חוויית ניפוי הבאגים בכלי הפיתוח ל-Chrome באמצעות התוסף ignoreList
של מפת המקור.
כלי הפיתוח ל-Chrome מנתח את השדה ignoreList
במפות המקור כדי לשפר את חוויית ניפוי הבאגים של המפתחים. כדאי לעיין ב-מסוף בסטראק טריי (stack trace) הבא. כלי הפיתוח מסתיר באופן אוטומטי את כל המסגרות של הצד השלישי, ומציג רק את הפריימים שרלוונטיים לקוד שלכם.
מה זה ignoreList
?
תוספים של מפות מקור הם שדות נוספים שמאחסנים מידע משלים על מפת המקור. שדות כאלה מתחילים בקידומת x_
.
בכלי הפיתוח ל-Chrome נעשה שימוש בשדה ignoreList
(אם סופק), כדי לסנן את הקוד שנוצר ולאפשר למפתחי אתרים להתמקד רק בקוד שהם מחברים. לדוגמה, במפת המקור הבאה.
/* demo.js.map */
{
"version": 3,
"mappings": "AAAAA, ..."
"sources": [
"app.js",
"components/Button.ts",
"node_modules/.../framework.js",
"node_modules/.../library.js",
...
],
"ignoreList": [2, 3],
...
}
בשדה sources
מוצגת רשימה של המקורות המקוריים שבהם נעשה שימוש ברשומה mappings
. כדי לקבל מידע נוסף על אופן הפעולה של המיפויים, אפשר לצפות בסרטון מהן מפות מקור?
מכיוון ששני הקבצים node_modules/…/frameworks.js
ו-node_modules/.../library.js
הם סקריפטים של צד שלישי, אפשר לציין את השדה ignoreList
כדי לציין את המיקומים שלהם בשדה sources
. כלי הפיתוח ל-Chrome יחיל את המידע הזה כדי להסתיר פריימים מהקבצים שהמערכת מתעלמת מהם.
הדבר נכון גם לגבי מקבץ הקריאות בחלונית מקורות במהלך ניפוי באגים בנקודת עצירה.
מאחורי הקלעים, בכלי הפיתוח מופעלת הגדרה נוספת כברירת מחדל: הוספה אוטומטית של סקריפטים מוכרים של צד שלישי לרשימת קטעי הקוד להתעלמות. הוא נמצא ב-DevTools > הגדרות > רשימת ההתעלמות.
בעזרת השדה ignoreList
של מפת המקור, יש לכם אפשרות להסתיר את הקבצים שנדחו בחלונית מקורות כדי להתמקד בקוד.
איך מאכלסים את ignoreList
החדשות הטובות הן שמסגרות כמו Angular ו-Nuxt כבר מגדירות את ignoreList
במפות המקור שלהן. שדרגו לגרסה העדכנית ביותר, והכול מוכן מראש. אתם מקבלים שיפורים של מעקב הסטאק בקלות.
לעומת זאת, כלים ל-build כמו Vite ו-Rollup מספקים הגדרות להגדרתו. כדי לעשות את זה יש גם פלאגין של Webpack.
אם אתם אחראים על תחזוקה של מסגרת או ספרייה, חשוב להבין איך מטמיעים את ההגדרות האלה כדי לשפר את חוויית ניפוי הבאגים של המשתמשים. בקטע הבא מוסבר איך Angular ו-Nuxt עשו את זה מאחורי הקלעים.
מה קורה אם עדיין אין תמיכה ב-Rust בסביבת ה-framework ובכלי ה-build האהובים עליכם?
אנחנו עובדים באופן פעיל עם מסגרות ומפתחים כלים כדי להטמיע את ההגדרות החדשות האלה. אפשר גם לעזור בכך כדי להודיע לבעלי האתרים על התכונה הזו. לדוגמה, אפשר לדווח על בעיה במאגר שלהם.
לחלופין, אפשר להוסיף סקריפטים לא רלוונטיים לרשימת הפריטים להתעלמות באופן ידני ישירות מעץ הקבצים בחלונית DevTools > מקורות > דף כדי לקבל תוצאה דומה.
מקרים לדוגמה: הטמעה של Nuxt ו-Angular
כדאי לעיין בשני המקרים לדוגמה הבאים.
ignoreList
ב-Next
החל מ-Nuxt v3.3.1, התוכן של node_modules
ושל Nuxt buildDir
סומן כ-"to beהתעלמות על ידי debuggers".
השינוי בוצע באמצעות שינוי בהגדרת ה-build של Nuxt באמצעות Vite ו-rollup:
/* vite.config.ts */
const ctx: ViteBuildContext = {
config: vite.mergeConfig(
build: {
rollupOptions: {
output: {
sourcemapIgnoreList: (relativeSourcePath) => {
return relativeSourcePath.includes('/node_modules/') || relativeSourcePath.includes(ctx.nuxt.options.buildDir)
},
}
})
צוות DevTools רוצה להביע את התודה שלו לצוותים של Vite ו-Nuxt על שהפכו את זה לאפשרי. אנחנו מעריכים את המאמצים ושיתוף הפעולה שלך, שהיו חיוניים להצלחת ההטמעה. שוב תודה רבה לצוותי Vite ו-Next על התוכן שהוספתם!
ignoreList
ב-Angular
החל מ-Angular v14.1.0, התוכן של התיקיות node_modules
ו-webpack
סומן כ'לביטול'.
השינוי בוצע באמצעות שינוי ב-angular-cli
על ידי יצירת פלאגין שמתחבר למודול Compiler
של ה-webpack.
הפלאגין של Webpack שהמהנדסים שלנו יצרו בשלב PROCESS_ASSETS_STAGE_DEV_TOOLING
ומאכלס את השדה ignoreList
במפות המקור בנכסים הסופיים שנוצרו על ידי ה-Webpack והדפדפן נטען.
const map = JSON.parse(mapContent) as SourceMap;
const ignoreList = [];
for (const [index, path] of map.sources.entries()) {
if (path.includes('/node_modules/') || path.startsWith('webpack/')) {
ignoreList.push(index);
}
}
map[`ignoreList`] = ignoreList;
compilation.updateAsset(name, new RawSource(JSON.stringify(map)));
מידע נוסף על שיפורים אחרים לניפוי באגים ב-Agular בכלי הפיתוח זמין במאמר מקרה לדוגמה: Better Angular ניפוי באגים באמצעות כלי פיתוח.
צוות כלי הפיתוח ל-Chrome רוצה להודות לצוות Angular על התרומה החשובה שלו להצלחת ההטמעה הזו. המאמצים והשיתוף שלך היו חיוניים, ואנחנו מודים לך על העבודה הקשה. תודה, צוות Angular שאפשר לעשות את זה.