在追踪前端 JS 错误时,需要通过追踪 JS 代码堆栈来定位报错位置。RUM 支持采集 JS 错误堆栈信息,通过上传的 SourceMap 文件即可解析 JS 堆栈。但由于 RUM 支持管理多个版本的 SourceMap 文件,仅通过文件名往往无法准确关联异常堆栈中的 JS 文件和对应的 SourceMap 文件。通过使用 RUM 前端构建工具插件,可以向打包生成的 JS 文件和 SourceMap 文件注入 UUID,以在两者间建立双向关联,从而在打开 RUM 异常明细界面时能够自动解析和展示堆栈信息,无需手动选择 SourceMap 文件。
前提条件
使用插件前,请完成以下准备工作:
已在云监控 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'。
配置项
字段 | 自动上传必填 | 默认值 | 说明 |
| 是 | 无 | 云监控 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 才能展示源码上下文。
版本说明
建议新接入或升级的客户使用当前最新版本 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 鉴权信息。