使用 ignoreList 來源對應擴充功能,改善 Chrome 開發人員工具的偵錯體驗。
Chrome 開發人員工具會剖析來源對應中的 ignoreList 欄位,協助改善開發人員的偵錯體驗。請查看「Console」中的下列堆疊追蹤。開發人員工具會自動隱藏所有第三方框架,只顯示與程式碼相關的框架。
ignoreList 前後的堆疊追蹤。後者會隱藏不相關的第三方框架,協助您在偵錯時更快找出問題。
什麼是 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 開發人員工具會套用這項資訊,隱藏這些忽略檔案的框架。
在中斷點偵錯期間,「來源」面板中的「呼叫堆疊」也適用這項功能。
在背景中,開發人員工具預設會啟用一項額外設定:「自動新增已知的第三方指令碼以忽略清單」。請依序前往「開發人員工具」>「設定」>「忽略清單」。
您可以使用 ignoreList 來源對應欄位,選擇在「來源」面板中隱藏忽略的檔案,專注於程式碼。

如何填入 ignoreList
好消息是,Angular 和 Nuxt 等架構已在來源對應中設定 ignoreList。只要升級至最新版本,就能立即使用。輕鬆改善堆疊追蹤。
另一方面,Vite 和 Rollup 等建構工具則提供設定選項。此外,您也可以使用 webpack 外掛程式。
如果您是架構或程式庫維護人員,請務必瞭解如何實作這些設定,改善使用者的偵錯體驗。請參閱下一節,瞭解 Angular 和 Nuxt 的幕後運作方式。
如果偏好的架構和建構工具尚未支援這項功能,該怎麼辦?
我們積極與架構和建構工具合作,以導入這些新設定。您也可以通知維護人員這項功能,例如,您可以在他們的存放區中回報問題。
或者,您也可以在「開發人員工具」>「來源」>「頁面」窗格的檔案樹狀結構中,手動將不相關的指令碼新增至忽略清單,達到類似的效果。
個案研究:Nuxt 和 Angular 導入
請參考以下兩個個案研究。
Nuxt 中的 ignoreList
從 Nuxt 3.3.1 版開始,node_modules 和 Nuxt buildDir 的內容已標示為「偵錯工具應忽略」。
這是透過使用 Vite 和 Rollup 變更 Nuxt 的建構設定來達成:
/* 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 和 Nuxt 團隊的貢獻!
Angular 中的 ignoreList
從 Angular v14.1.0 開始,node_modules 和 webpack 資料夾的內容已標示為「忽略」。
具體做法是建立外掛程式,連結至 webpack 的 Compiler 模組,藉此變更 angular-cli。
我們的工程師建立的 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)));
如要進一步瞭解開發人員工具中其他 Angular 偵錯改善項目,請參閱「個案研究:使用開發人員工具改善 Angular 偵錯」。
Chrome 開發人員工具團隊在此感謝 Angular 團隊,他們對這項實作的成功貢獻良多。您的努力和配合至關重要,我們非常感謝您的辛勞。感謝 Angular 團隊促成這項合作!