在追蹤前端 JS 錯誤時,需要通過追蹤 JS 代碼堆棧來定位報錯位置。RUM 支援採集 JS 錯誤堆棧資訊,通過上傳的 SourceMap 檔案即可解析 JS 堆棧。但由於 RUM 支援管理多個版本的 SourceMap 檔案,僅通過檔案名稱往往無法準確關聯異常堆棧中的 JS 檔案和對應的 SourceMap 檔案。通過使用 RUM 前端構建工具外掛程式,可以向打包產生的 JS 檔案和 SourceMap 檔案注入 UUID,以在兩者間建立雙向關聯,從而在開啟 RUM 異常明細介面時能夠自動解析和展示堆棧資訊,無需手動選擇 SourceMap 檔案。
前提條件
使用外掛程式前,請完成以下準備工作:
已在CloudMonitor 2.0 中建立工作空間和 Web/H5 RUM 應用,並擷取
workspace和serviceId,請參見接入 Web & H5 應用。構建環境使用 Node.js 20 LTS 或 Node.js 22 及以上版本。
擷取 AccessKey ID 和 AccessKey Secret,需要具有 CMS 的許可權,最小化許可權配置樣本:
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "cms:GetRumSymbolFileParams", "Resource": "*" } ] }
使用 RUM 前端構建工具外掛程式
Webpack
安裝 RUM Webpack 前端構建工具外掛程式 npm 包。
npm install -D @arms/rum-webpack-plugin整合並配置 Webpack 外掛程式。
生產構建建議使用 ,避免在 JavaScript 產物中暴露 SourceMap URL。
const { rumWebpackPlugin } = require('@arms/rum-webpack-plugin'); module.exports = { mode: 'production', devtool: 'hidden-source-map', plugins: [ rumWebpackPlugin({ workspace: 'your-workspace', serviceId: 'your-rum-service-id', version: 'your-release-version', region: 'cn-hangzhou', accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID, accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET, stsToken: process.env.ALIBABA_CLOUD_SECURITY_TOKEN, clearSourceMap: true, }), ], };說明Webpack 在
mode === 'development'或NODE_ENV === 'development'時會跳過 SourceMap 處理和上傳。請使用非 development 構建執行生產 SourceMap 上傳。
Vite
安裝 RUM Vite 前端構建外掛程式 npm 包。
npm install -D @arms/rum-vite-plugin整合並配置 Vite 外掛程式。
import { defineConfig } from 'vite'; import { rumVitePlugin } from '@arms/rum-vite-plugin'; export default defineConfig({ build: { sourcemap: true, }, plugins: [ rumVitePlugin({ workspace: 'your-workspace', serviceId: 'your-rum-service-id', version: 'your-release-version', region: 'cn-hangzhou', accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID, accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET, stsToken: process.env.ALIBABA_CLOUD_SECURITY_TOKEN, clearSourceMap: true, }), ], });說明build.sourcemap可以設定為true或 。不要設定為'inline'。
配置項
欄位 | 自動上傳必填 | 預設值 | 說明 |
| 是 | 無 | CloudMonitor 2.0 工作空間名稱。 |
| 是 | 無 | RUM 應用 Service ID。 |
| 是 | 不依賴預設值 | 應用發布版本,用於隔離不同構建的 SourceMap。建議使用真實發布版本或構建號。 |
| 是 | 不依賴預設值 | RUM 服務地區。 |
| 是 | 無 | 調用上傳策略 OpenAPI 的 AccessKey ID。 |
| 是 | 無 | 調用上傳策略 OpenAPI 的 AccessKey Secret。 |
| 否 | 無 | 使用 STS 臨時 AK/SK 時傳入的安全性權杖。 |
| 否 |
| 上傳成功後刪除本地 |
驗證注入
檢查 SourceMap 檔案
當 clearSourceMap: false 時,可以在構建目錄開啟 .map 檔案。頂層存在格式正確的 debugId 表示 SourceMap 注入成功,例如:
{
"version": 3,
"file": "index.js",
"sources": ["webpack://app/src/index.ts"],
"sourcesContent": ["throw new Error('test');"],
"mappings": "AAAA",
"debugId": "e4f083d6-b8d8-4cae-a0ea-16f2e83a6be1"
}sourcesContent 應存在且內容非空,否則 RUM 可能只能還原檔案位置,無法展示源碼上下文。
檢查瀏覽器運行時
開啟已經部署的頁面,在瀏覽器控制台執行:
window._armsRumDebugIds;返回對象中包含 UUID 映射,表示當前頁面的 JavaScript 檔案已經註冊 debugId。外掛程式還會嘗試在 globalThis、self、global、document.defaultView 以及可訪問的 parent/top window 中同步註冊,以適配 iframe 和微前端情境。
檢查上傳結果
在 RUM 應用的檔案管理頁面確認:
SourceMap 檔案已出現。
檔案版本與外掛程式中的
version一致。UUID 與構建產物中的
debugId一致。
常見問題
構建日誌提示找不到 SourceMap
檢查構建工具是否產生了獨立的 .map 檔案。不要使用 inline/eval SourceMap,並確認 JavaScript 檔案與 .map 檔案的名稱和路徑關係沒有被後處理指令碼破壞。
上傳成功,但異常詳情沒有源碼
依次檢查:
.map檔案中是否存在非空sourcesContent。SourceMap 的
debugId是否與異常堆棧上報的 UUID 一致。workspace、serviceId、version和region是否與目標 RUM 應用一致。上傳後的檔案是否出現在目標應用的檔案管理頁面。
Webpack 沒有上傳檔案
確認 mode 和 NODE_ENV 均不是 development,並檢查是否產生了外部 SourceMap。
是否支援自訂 OSS Bucket
不支援。上傳地址和表單參數由 OpenAPI 返回,外掛程式不暴露 Bucket 配置。
如何避免 SourceMap 被部署到公網
Webpack 可使用 。同時設定 clearSourceMap: true,外掛程式會在每個 SourceMap 上傳成功後刪除對應的本地 .map 檔案。
提示當前 Node.js 不支援
將構建環境升級到 Node.js 20 LTS,或 Node.js 22 及以上版本。Vite 外掛程式使用的依賴不支援 Node.js 18 和 21。
SourceMap 超過大小限制
單個 SourceMap 檔案不能超過 50 MiB。可以通過代碼拆分、減少內聯源碼體積或調整構建策略縮小檔案,但必須保留足夠的 sourcesContent 才能展示源碼上下文。
Chunk URL 含括弧時無法自動解析 SourceMap
當 webpack 打包產物的 chunk URL 路徑中包含括弧等特殊字元(例如 Next.js App Router 路由分組格式 /app/(groupName)/page/)時,ARMS 的 binary_images 欄位無法正確解析 UUID,導致 SourceMap 自動匹配失敗。同一異常中不含括弧的 chunk URL 解析正常。這是 ARMS 的已知解析限制,暫無法自助解決。建議在 webpack 配置中避免在 chunk URL 路徑中使用括弧,以確保 SourceMap 自動匹配正常工作。
版本說明
建議新接入或升級的客戶使用當前最新版本 1.1.0。0.0.x 版本使用舊版上傳鏈路,已不再推薦使用。
版本 | 狀態 | 說明 |
| 當前推薦 | 要求顯式傳入外掛程式配置; |
| 建議升級 | 上傳鏈路切換為 CMS |
| 不推薦 | 使用舊版上傳鏈路;該版本擴充了 |
| 不推薦 | 使用舊版上傳鏈路;該版本增加了地區選擇和 STS Token 支援。 |
| 不推薦 | 使用舊版上傳鏈路;該版本增加了構建後自動上傳 SourceMap。 |
| 不推薦 | 使用舊版上傳鏈路;該版本支援 Webpack 和 Vite,通過 UUID 關聯 JavaScript 與 SourceMap。 |
從 0.0.x 升級到 1.1.0 時,請注意:
必須向 Webpack 或 Vite 外掛程式顯式傳入設定物件,並完整配置所有必填項。
如果原配置使用
pid,請改為serviceId。請顯式配置
version和region,外掛程式不再提供預設值。0.0.x版本升級後將改用 CMS OpenAPI 上傳鏈路,請按照本文配置workspace、serviceId和 AccessKey 鑒權資訊。