全部產品
Search
文件中心

Application Real-Time Monitoring Service:Web & H5 端 SourceMap 自動解析

更新時間:Jul 10, 2026

在追蹤前端 JS 錯誤時,需要通過追蹤 JS 代碼堆棧來定位報錯位置。RUM 支援採集 JS 錯誤堆棧資訊,通過上傳的 SourceMap 檔案即可解析 JS 堆棧。但由於 RUM 支援管理多個版本的 SourceMap 檔案,僅通過檔案名稱往往無法準確關聯異常堆棧中的 JS 檔案和對應的 SourceMap 檔案。通過使用 RUM 前端構建工具外掛程式,可以向打包產生的 JS 檔案和 SourceMap 檔案注入 UUID,以在兩者間建立雙向關聯,從而在開啟 RUM 異常明細介面時能夠自動解析和展示堆棧資訊,無需手動選擇 SourceMap 檔案。

前提條件

確保您的Web應用已接入使用者體驗監控,具體操作,請參見接入Web & H5應用

支援的前端構建工具類型

目前 RUM Web & H5 SourceMap 自動解析功能支援以下前端構建工具:

  • Webpack

  • Vite

使用RUM前端構建工具外掛程式

Webpack

  1. 安裝 RUM Webpack 前端構建工具外掛程式 npm 包。

    npm install @arms/rum-webpack-plugin --save
  2. 在 Webpack 設定檔中應用 RUM 前端構建工具外掛程式,並通過設定 devtool 屬性使 Webpack 產生 SourceMap 檔案。

    import { RumWebpackPlugin } from '@arms/rum-webpack-plugin'
    const config = {
      plugins: [new RumWebpackPlugin()],
      devtool: 'source-map',
    };
    export default config

Vite

  1. 安裝 RUM Vite 前端構建工具外掛程式 npm 包。

    npm install @arms/rum-vite-plugin --save
  2. 在 Vite 設定檔中應用 RUM 前端構建工具外掛程式,並通過設定 build.sourcemap 屬性使 Vite 產生 SourceMap 檔案。

    import { rumVitePlugin } from '@arms/rum-vite-plugin'
    export default defineConfig({
      plugins: [rumVitePlugin()],
      build: {
        sourcemap: true,
      },  
    });

自動上傳 SourceMap 檔案

為簡化操作流程,您可以配置 RUM 前端構建工具外掛程式在注入 UUID 後自動將 SourceMap 檔案上傳至 RUM 的 OSS 儲存中。

重要

配置自動上傳 SourceMap 操作過程中需要擷取帳號的AccessKey ID 和 AccessKey Secret,AccessKey是訪問阿⾥雲 API 的密鑰,出於安全考慮,強烈建議您使用RAM使用者完成以下操作,並妥善保管AccessKey。

步驟一:開啟批量上傳開關

為擷取 RUM OSS 的寫⼊許可權,您需要使用RAM使用者登入ARMS控制台,並在目標 RUM 應用的應用設定頁面開啟 OSS 批量上傳檔案開關。

開關位於檔案管理頁簽中。

步驟二:擷取RAM使用者的AccessKeyID 和 AccessKeySecret

為將⽂件上傳⾄ RUM OSS 服務,您需要向 RUM 前端構建⼯具外掛程式提供上一步RAM使用者的 AccessKey ID 和 AccessKey Secret。

建立時AccessKey,使用情境需選擇本地開發環境中使用。具體擷取方法,請參見建立RAM使用者的AccessKey

選中該選項後,系統提示使用建議:避免在代碼中寫入明文 AccessKey 資訊,建議使用環境變數配置憑據。勾選 我確認必須建立 AccessKey 後單擊 繼續建立

步驟三:配置外掛程式

在 RUM 前端構建工具外掛程式配置中填入 RUM 應用 ID、AccessKey ID、AccessKey Secret 、版本號碼(用於在 RUM 控制台中對上傳的 SourceMap 檔案進行分組管理,預設為 1.0.0)以及應用所在的 Region(預設為 cn-hangzhou)。

Webpack

為防止調試時重複上傳,使用Webpack打包時僅Production模式會自動上傳SourceMap。

import { RumWebpackPlugin } from '@arms/rum-webpack-plugin'
const config = {
  plugins: [new RumWebpackPlugin({
    pid: '',  // RUM 應用 ID
    accessKeyId: '',
    accessKeySecret: '',
    version: '',
    region: ''
  })],
  devtool: 'source-map',
};
export default config

Vite

import { rumVitePlugin } from '@arms/rum-vite-plugin'
export default defineConfig({
  plugins: [rumVitePlugin({
    pid: '',  // RUM 應用 ID
    accessKeyId: '',
    accessKeySecret: '',
    version: '',
    region: ''
  })],
  build: {
    sourcemap: true,
  },  
});
重要

外掛程式配置中的 pid 參數須填寫 ARMS 老平台的應用 PID,而非CloudMonitor 2.0 平台基於 service_id 產生的新 PID。若填入CloudMonitor 2.0 新 PID,SourceMap 上傳請求雖會返回成功狀態,但檔案管理頁面中檔案清單將顯示為空白,且無法與異常堆棧正確關聯解析(關鍵詞:PID 不一致、檔案清單為空白)。

解決方案:在 ARMS 老平台擷取對應應用的 PID,將外掛程式配置中的 pid 參數值替換為該 PID。

手動上傳 SourceMap 檔案

步驟一:構建專案

通過前端構建工具提供的 build 命令構建專案代碼後,RUM 前端構建工具會在 JS 檔案和對應的 SourceMap 檔案中注入 UUID

SourceMap 檔案中增加 debugId 欄位,表示 SourceMap 檔案 UUID 注入成功。

{
    "version": 3,
    "file": "index.js",
    "mappings": "AAAAA,QAAQC,IAAI",
    "sources": [
        "webpack://examples/./src/index.js"
    ],
    "sourcesContent": [
        "console.log('Hello World!');\n"
    ],
    "names": [
        "console",
        "log"
    ],
    "sourceRoot": "",
    "debugId": "e4f083d6-b8d8-4cae-a0ea-16f2e83a6be1"
}

通過瀏覽器開啟頁面後,能夠在全域對象 Window 上觀察到 _armsRumDebugIds 屬性則表示 JS 檔案 UUID 注入成功。

> window._armsRumDebugIds
< {"Error\n    at file:///Users/yy/Projects/rum-bundler-plugin/packages/examples/dist/webpack5/index.js:1:128": "e4f083d6-b8d8-4cae-a0ea-16f2e83a6be1"}

步驟二:手動上傳 SourceMap 檔案

若不使用自動上傳功能,可在 RUM 控制台進行手動上傳。在應用設定頁面的檔案管理地區,上傳注入了 UUID的 SourceMap 檔案,UUID 列出現對應的 UUID 代表解析成功。

上傳時需填寫版本號碼(如1.0.0),然後單擊批量上傳完成上傳。

步驟三:自動解析

通過异常统计頁面進入目標異常的異常明細頁面,堆棧資訊中的每一行都會顯示其通過 RUM 前端構建工具外掛程式注入的 UUID,顯示 "-" 則代表沒有成功上報 UUID。

若已上傳了帶有對應 UUID 的 SourceMap 檔案,堆棧資訊中的第一行將會自動解析並展示報錯的原始碼位置,其他行可通過單擊所在行展開自動解析結果。

SourceMap解析後定位到源檔案 webpack://demo/index.tsx,報錯位置為第14行 throw new Error('test error'),解析後的原始碼如下。

import React from 'react';
import Page from '@alicloud/console-components-page';
import TestCode from './TestCode';
const TestPage = () => {
  return (
    <Page>
      &lt;Page.Header title=測試&quot; /&gt;
      &lt;Page.Content&gt;
        <IncidentPlanTable />
        <button
          onClick={() => {
            throw new Error('test error');
          }}
        >
          test
        </button>
      &lt;/Page.Content&gt;
    </Page>
  );
};

RUM 前端構建工具外掛程式版本說明

版本號碼

說明

0.0.8

增加構建專案代碼後自動上傳 SourceMap 檔案功能。

0.0.5

支援 Webpack、Vite 前端構建工具,通過注入 UUID 在 JS 檔案和對應 SourceMap 檔案間建立雙向聯絡。

常見問題

SourceMap 已上傳成功但控制台異常明細不顯示原始碼怎麼辦?

原因:上傳的 SourceMap 檔案中未包含源碼內容(sourcesContent 欄位),導致 RUM 解析堆棧時無法還原原始碼。

排查步驟

  1. 檢查前端構建工具的打包配置,確保產生 SourceMap 時開啟了包含源碼內容的選項。Webpack 需將 devtool 設定為 source-map,Vite 需將 build.sourcemap 設定為 true

  2. 使用第三方工具(如 decodeSourceMap)在本地校正產生的 SourceMap 檔案,確認檔案中包含 sourcesContent 欄位且內容非空。

  3. 確認 OSS 中儲存的 SourceMap 檔案格式正確且可訪問,檔案在上傳過程中未發生損壞或截斷。

ARMS RUM 是否支援自訂 OSS Bucket 上傳 SourceMap?

目前不支援自訂 OSS Bucket。應用即時監控服務已為各地區預置專用 OSS Bucket(例如杭州地區為 arms-rum-sourcemap-hz),無需也無法指定其他 Bucket。

如需使用自動上傳功能,請在控制台目標 RUM 應用的應用設定頁面檔案管理頁簽中開啟 OSS 批量上傳檔案開關,按照本文「自動上傳 SourceMap 檔案」章節的步驟配置外掛程式,即可直接將 SourceMap 檔案上傳至預置 Bucket。

通過 ossutil 等工具手動上傳 SourceMap 檔案後控制台不顯示怎麼辦?

通過檔案夾方式或非標準路徑將 SourceMap 檔案上傳至 OSS,可能導致控制台檔案管理介面無法正確展示檔案清單。

建議優先使用 RUM 前端構建工具外掛程式(Webpack/Vite)完成 SourceMap 的自動上傳和解析。若必須手動上傳,請嚴格按照本文「手動上傳 SourceMap 檔案」章節的步驟操作:在控制台應用設定頁面的檔案管理地區,單擊批量上傳,填寫正確的版本號碼後完成上傳,不要通過 ossutil 等第三方工具直接寫入 OSS。

接入地區與 ARMS RUM 服務地區不一致時如何配置 Endpoint?

目前使用者體驗監控 SourceMap 上傳服務僅在以下三個地區可用:

地區

外掛程式 region 參數值

杭州

cn-hangzhou

新加坡

ap-southeast-1

矽谷

us-west-1

若應用部署在其他地區(如上海、北京),上傳 SourceMap 時不能使用本地區端點。須在前端構建工具外掛程式配置的 region 參數中指定上表中的可用地區,以確保能串連到預置的 OSS Bucket 並完成上傳。