新闻详情

新闻详情

首页 / 资讯中心 / 详情

OpenReplay sourcemap-uploader 使用指南:向自建 OpenReplay 实例上传 JS Source Map

发布时间:2026/10/20 20:26:20来源:尧图网络
OpenReplay sourcemap-uploader 使用指南:向自建 OpenReplay 实例上传 JS Source Map
可观测性开发工具前端后端【免费下载链接】openreplaySession replay, cobrowsing and product analytics you can self-host. Best for reproducing issues and iterating on your product.项目地址https://gitcode.com/gh_mirrors/op/openreplay点击查看免费下载sourcemap-uploader是 OpenReplay 官方提供的一个轻量级 NPM 模块用于把前端打包产物minified JS对应的 Source Map 文件上传到你的 OpenReplay 实例从而让会话回放与错误分析中的 JS 堆栈信息从压缩后的代码还原为可读的原始源码。本指南将基于 sourcemap-uploader 目录中的 README 与完整源码讲解安装、CLI 与 NPM API 两种用法、各参数含义以及从上传到后端存储、再到堆栈还原的完整链路帮助你在 CI/CD 或本地构建流程中直接落地使用。一、为什么需要上传 Source Map前端构建工具Webpack、Vite、Rollup 等默认会把源码压缩、混淆成体积更小的 JS 文件。当线上出现 JavaScript 异常时浏览器上报的错误堆栈指向的是压缩后的单行代码如app-42.js:1:2345几乎无法定位问题。OpenReplay 的错误分析Error Analysis功能依赖 Source Map 做反混淆通过 Source Map 将报错位置映射回原始源码文件、行号、列号与函数名还原出可读的调用栈。而这个还原的前提就是 Source Map 文件已经上传到 OpenReplay 的存储中。openreplay/sourcemap-uploader正是完成这一步的官方工具。在 OpenReplay 后端sourcemap 的读取与解析由 sourcemaps.py 与 sourcemaps_parser.py 承担前者负责签名上传/分享 URL 并组织 trace 帧后者将解析任务转发给独立的 sourcemap reader 服务由配置项sourcemaps_reader指定最终把压缩文件中的位置翻译成原始文件中的位置 上下文代码。二、安装该模块作为开发依赖安装到你的前端项目中即可它不会进入生产运行时代码npm i -D openreplay/sourcemap-uploader安装完成后模块会注册sourcemap-uploader命令行入口bin字段指向cli.js同时也暴露两个可直接在 Node.js 代码中调用的函数main字段指向index.js见 package.json。也就是说你可以选择在 npm scripts 中跑 CLI也可以在自定义的发布脚本中调用编程接口。三、CLI 用法CLI 有两种工作模式上传单个文件的 Source Mapfile子命令或递归上传一个目录下的所有 Source Mapdir子命令。1. 上传单个文件的 Source Mapsourcemap-uploader -s https://opnereplay.mycompany.com/api -k API_KEY -p PROJECT_KEY file -m ./dist/index.js.map -u https://myapp.com/index.js-m--sourcemap-file-path本地 Source Map 文件的路径-u--js-file-url这个 Source Map 对应的压缩 JS 文件在线上可访问的 URL即浏览器实际加载该 JS 时的地址。2. 上传目录下的所有 Source Mapsourcemap-uploader -s https://opnereplay.mycompany.com/api -k API_KEY -p PROJECT_KEY dir -m ./build -u https://myapp.com/static此时-u指定的是线上根 URL它必须与你从该目录上传 JS 文件时所对应的部署路径一致。例如./build目录下同时存在app-42.js和app-42.js.map而你希望它们被访问的地址是https://myapp.com/static/app-42.js那么-u就应填https://myapp.com/static。从 readDir.js 的实现可以确认 URL 的拼接规则使用glob递归匹配目录下所有**/*.map文件若-u末尾没有/会自动补上注释特别说明这里不能用简单字符串替换以免破坏 URL 的 schema每个.map文件对应的 JS URL 根 URL 该文件相对目录的相对路径并去掉.map后缀。因此./build/static/app-42.js.map会被映射为https://myapp.com/static/app-42.js。你只需要保证映射后的地址与线上实际加载 JS 的 URL 完全一致OpenReplay 才能把报错堆栈中的地址与已上传的 Source Map 对应起来。3. 全局参数说明参数长选项是否必填说明-k--api-key必填OpenReplay 的 API Key用于请求鉴权-p--project-key必填项目 KeyProject Key-i为已废弃的别名-s--server选填自建 OpenReplay 实例地址必须以/api结尾使用 OpenReplay SaaS 版时不要传此参数默认指向https://api.openreplay.com-l--logs选填输出请求日志verbose 模式-v--version选填打印模块版本号需要特别说明的是参数名与 README 描述存在一处细节差异以当前仓库源码为准在 cli.js 中-v实际绑定的是--version打印版本号而开启详细日志的开关是-l/--logs。源码中保留了一句注释Should be verbose, but conflicting on npm compilation into bin即作者本意将其作为 verbose 开关但为了避免与 npm 的 bin 编译冲突改用了-l。README 中提到的 verbose 能力对应到当前实现就是-l。CLI 成功执行后会输出类似Successfully uploaded N sourcemap file(s) for: ...的结果逐条列出成功上传的 JS 文件 URL如果目录下没有任何.map文件则提示No sourcemaps found in dir见 cli.js。四、NPM API 用法在自定义构建脚本中可以直接引用包内导出的两个异步函数见 index.jsuploadFile(api_key, project_key, sourcemap_file_path, js_file_url, [server]) uploadDir(api_key, project_key, sourcemap_dir_path, js_dir_url, [server])两个函数都返回 Promiseresolve 的值为成功上传了 Source Map 的文件列表即每个文件对应的 JS 文件 URL 数组。server为可选参数缺省时同样默认使用 OpenReplay SaaS 地址https://api.openreplay.com。示例上传单个文件const { uploadFile } require(openreplay/sourcemap-uploader); uploadFile( YOUR_API_KEY, YOUR_PROJECT_KEY, ./dist/index.js.map, https://myapp.com/index.js, https://openreplay.mycompany.com/api, // 自建实例SaaS 用户省略 ).then((files) { console.log(Uploaded sourcemaps for:, files); }).catch((e) { console.error(Failed:, e); });内部实现上uploadFile通过 readFile.js 以 UTF-8 读取本地.map文件内容并打包成{ sourcemap_file_path, js_file_url, body }结构uploadDir则先走上一节描述的递归匹配逻辑二者最终都汇入uploadSourcemaps完成上传。五、上传链路与后端原理了解底层协议有助于排查问题比如鉴权失败、地址不匹配等。整个上传过程是两步预签名presign流程由 uploadSourcemaps.js 实现第一步向 OpenReplay API 申请预签名上传 URL。CLI 发起一个PUT请求到{server}/{project_key}/sourcemaps/请求头携带Authorization: API_KEY请求体为{URL: [js_file_url, ...]}——这一步不会传输 Source Map 本身只是提交我要上传哪些 JS 文件对应的 Source Map。该请求对应的服务端实现位于 routers/core.pyPUT /{projectKey}/sourcemaps/端点接收请求体请求体由 schemas.py 中的SourcemapUploadPayloadSchema校验字段urls的别名正是URL。随后服务端调用 sourcemaps.py 中的presign_upload_urls为每个 URL 生成对象存储如 S3/MinIO的预签名上传地址expires_in1800即 30 分钟有效并返回给客户端。第二步把 Source Map 内容上传到预签名地址。客户端拿到返回的上传地址列表后对每个地址再发一次PUT请求携带Content-Length与Content-Type: application/json请求体即 Source Map 文件内容从而把文件写入配置的sourcemaps_bucket存储桶。上传完成后当 OpenReplay 收到 JS 异常堆栈时会走 sourcemaps.py 的get_traces_group流程为堆栈中的每个帧查找对应 Source Map先在存储桶中查找找不到再尝试远程.mapURL再由 sourcemaps_parser.py 把帧的位置信息line、column连同key、bucket等参数 POST 给 sourcemap reader 服务拿回还原后的原始堆栈与上下文代码。常见的服务端响应与处理403鉴权被拒绝工具会提示Authorisation rejected. Please, check your API_KEY and/or PROJECT_KEY.——请核对 API Key 与 Project Key 是否正确、是否对该项目有权限其他非200状态码服务端错误提示联系 OpenReplay 支持预签名 URL 上传失败同样以服务端错误提示并可在开启 verbose-l后看到具体的响应状态码与响应体便于定位。六、本地开发与调试如果你在本地调试该模块本身仓库提供了开发脚本 run-dev.shnpm install bash run-dev.sh该脚本读取本地.env文件中的API_KEY、PROJECT_KEY、USERVER、TARGET_URL变量然后以 verbose 模式执行一次目录上传默认目录为./maps。它等价于手动执行node cli.js -l -k $API_KEY -p $PROJECT_KEY -s $USERVER dir -m ./maps -u $TARGET_URL将调试用的.map文件放入./maps目录后运行即可观察完整的请求/响应日志验证自己的上传链路是否打通。七、使用建议与注意事项自建实例务必加/api后缀-s参数期望的是 OpenReplay API 服务地址例如https://openreplay.mycompany.com/api这与后端路由/{projectKey}/sourcemaps/的挂载位置相对应SaaS 用户不要传-s源码中默认值会落到https://api.openreplay.com。JS URL 必须与线上真实地址一致无论是file还是dir模式-u构造出的地址必须与浏览器实际加载压缩 JS 的 URL 完全匹配包括路径与目录层级否则堆栈还原时无法命中对应的 Source Map。建议在构建后立即上传把上传命令挂到 CI/CD 的构建产物发布阶段保证部署新版本的同时 Source Map 已就位预签名地址有效期 30 分钟上传动作应紧跟构建完成之后执行避免过期。Source Map 不上传到公网Source Map 内容只会写入你配置的对象存储sourcemaps_bucket不需要也不建议把.map文件暴露到生产静态站点这既保护了源码隐私也让错误还原链路更可控。目录模式目前不支持排除源码中留有// TODO: exclude in dir注释cli.js即当前版本dir会递归上传目录内所有*.map文件如目录中存在不需要上传的 Source Map请规划好构建输出目录结构。关于存储与解析相关配置如sourcemaps_bucket、sourcemaps_reader、SMR_KEY、sourcemapTimeout等可以在 api/env.default 与 api/env.dev 中查看默认值并按自建部署的存储环境进行调整。赞分享可观测性开发工具前端后端【免费下载链接】openreplaySession replay, cobrowsing and product analytics you can self-host. Best for reproducing issues and iterating on your product.项目地址https://gitcode.com/gh_mirrors/op/openreplay点击查看免费下载相关推荐OpenReplay SourceMap 上传教程让压缩后的 JS 错误堆栈瞬间可读的简单方法OpenReplay SourceMap 上传教程让压缩后的 JS 错误堆栈瞬间可读的简单方法 生产环境的 JS 经过压缩混淆后OpenReplay 捕获到可观测性开发工具前端后端OpenReplay 自托管 PostgreSQL 18 Docker 镜像构建与 Kubernetes 部署指南OpenReplay 自托管 PostgreSQL 18 Docker 镜像构建与 Kubernetes 部署指南 OpenReplay 仓库在 scripts可观测性开发工具前端后端OpenReplay 网络代理库openreplay/network-proxy完全指南拦截 fetch、XHR 与 Beacon 实现网络请求追踪OpenReplay 网络代理库openreplay/network proxy完全指南拦截 fetch、XHR 与 Beacon 实现网络请求追踪 O可观测性开发工具前端后端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/10/19 18:07:56

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/10/19 18:08:04

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/10/19 18:07:53

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/10/20 7:03:52

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/10/19 18:07:45

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/10/20 6:21:45

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉