| 選取平台: | iOS+ Android Web Flutter Unity |
網頁應用程式會在正式環境中編譯、壓縮及混淆程式碼名稱,以最佳化網路套件。如果沒有來源對應,Crashlytics 資訊主頁中的當機報告會顯示經過壓縮和模糊處理的堆疊追蹤。
如要將堆疊追蹤去模糊化,並在 Error Reporting 中顯示原始檔案名稱和行號,請使用 Firebase CLI 指令,將來源對應 (.js.map 檔案) 上傳至 Firebase。
必要條件
上傳來源對應前,請確認您已安裝 Firebase CLI 15.35.0 以上版本。瞭解如何安裝或更新 Firebase CLI。
步驟 1:在框架建構中啟用來源對應產生功能
設定前端架構或繫結器,在應用程式建構程序中產生正式版來源 (.js.map) 檔案:
Angular
在 Angular 中,您必須在 angular.json 工作區檔案中設定 sourceMap 選項,或傳遞 --source-map CLI 覆寫旗標:
方法 1 (建議):修改 angular.json
開啟 angular.json 檔案,找出要指定的特定建構設定 (例如 development 或 production)。在 options 或 configurations 區塊下設定 sourceMap 參數:
"projects": {
"APP_NAME": {
"architect": {
"build": {
"options": {
"sourceMap": true
},
"configurations": {
"production": {
"sourceMap": {
"scripts": true,
"vendor": false
}
}
}
}
}
}
}
方法 2:指令列覆寫
如果只需要用於一次性驗證建構或偵錯工作階段的來源對應,請直接將 --source-map 旗標附加至 Angular CLI 建構指令:
ng build --configuration production --source-map
Next.js
更新 next.config.ts (或 next.config.js) 檔案,將 productionBrowserSourceMaps 設為 true,在正式版建構期間啟用瀏覽器來源對應產生功能:
// next.config.ts
import type { NextConfig } from "next";
const nextConfig: NextConfig = {
// Enable browser source map emission for Crashlytics stack trace de-obfuscation
productionBrowserSourceMaps: true,
// ... rest of your Next.js configuration
};
export default nextConfig;
Next.js 會將產生的用戶端套件和來源對應 .js.map 檔案,儲存在專案根目錄的 .next 目錄中。
React / Vite
如果 React 應用程式使用 Vite 做為建構套件組合器,請更新 vite.config.ts 檔案,在建構選項中發出來源對應:
// vite.config.ts
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
export default defineConfig({
plugins: [react()],
build: {
// Emit sourcemap files for Crashlytics upload
sourcemap: true,
},
});
根據預設,Vite 會將產生的輸出套件和 .js.map 檔案儲存在 dist 目錄中。
步驟 2:使用 Firebase CLI 上傳來源對應
框架建構您的產品組合並產生 .js.map 檔案後,請使用 firebase crashlytics:sourcemap:upload 指令上傳來源對應:
firebase crashlytics:sourcemap:upload \
--project PROJECT_ID \
--app FIREBASE_APP_ID \
--debug DIRECTORY
這個指令會遞迴搜尋指定 DIRECTORY 路徑 (dist 或 .next) 中的所有 .js.map 檔案,並上傳至 Cloud Storage 進行符號對應。
步驟 3:處理來源對應
如果生成來源對應時一併生成網頁應用程式素材資源,這些素材資源可能會公開給瀏覽器要求,導致原始原始碼外洩。如要避免這種情況,同時保留去模糊化的堆疊追蹤,您可以設定網路伺服器,拒絕公開存取 .js.map 檔案,或將 --clean 旗標傳遞至 firebase crashlytics:sourcemap:upload,以便在將 .js.map 檔案上傳至 Firebase 後,自動從本機建構目錄中刪除這些檔案。
在建構管道中自動執行
如要在部署前自動將來源對應上傳至 Crashlytics 並刪除本機 .js.map 檔案,請更新 package.json 檔案中的 build 指令碼,將 --clean 旗標傳遞至 firebase crashlytics:sourcemap:upload:
Angular
"scripts": {
"build": "ng build && firebase crashlytics:sourcemap:upload --project PROJECT_ID --app FIREBASE_APP_ID --clean --debug dist"
}
Next.js
"scripts": {
"build": "next build && firebase crashlytics:sourcemap:upload --project PROJECT_ID --app FIREBASE_APP_ID --clean --debug .next"
}
React / Vite
"scripts": {
"build": "vite build && firebase crashlytics:sourcemap:upload --project PROJECT_ID --app FIREBASE_APP_ID --clean --debug dist"
}
後續步驟
- 自訂當機報告:瞭解如何回報已處理的例外狀況、新增自訂鍵來搭配去模糊化的堆疊追蹤,以及設定取樣。