NX工作区React项目配置Sentry源码映射上传及版本管理问题
NX工作区集成Sentry源码映射上传与应用版本管理方案
一、Sentry源码映射上传配置示例
不需要写复杂的自定义脚本,直接用Sentry官方CLI就能完成上传,把上传步骤插在构建完成后、部署前的位置即可。
步骤1:安装Sentry CLI
先在项目里安装依赖:
npm install @sentry/cli --save-dev
步骤2:修改project.json的deploy配置
在commands数组里,把Sentry上传命令放在构建命令之后、rsync部署命令之前:
"deploy": { "executor": "nx:run-commands", "options": { "parallel": false, "commands": [ { "command": "nx run my-app:build:{args.target}", "forwardAllArgs": true }, // 新增Sentry源码映射上传流程 { "command": "sentry-cli releases new -p my-app-project-name \"{args.target}-$(date +%Y%m%d%H%M%S)\"", "forwardAllArgs": true }, { "command": "sentry-cli releases files \"{args.target}-$(date +%Y%m%d%H%M%S)\" upload-sourcemaps ./dist/apps/my-app --url-prefix \"~/\" --validate", "forwardAllArgs": true }, { "command": "sentry-cli releases finalize \"{args.target}-$(date +%Y%m%d%H%M%S)\"", "forwardAllArgs": true }, { "command": "echo Run {args.target} deployment on {args.server}", "forwardAllArgs": true }, { "command": "rsync -avz --progress --delete dist/apps/my-app/ {args.user}@{args.server}:{args.path}", "forwardAllArgs": true }, { "command": "echo my-app deployed to {args.target}", "forwardAllArgs": true } ] }, "configurations": { "production": { "args": "--target=production --user=user --server=myserver.com --path=path/to/app" } } }
注意点:
- 替换
my-app-project-name为你在Sentry后台创建的项目名称- 命令里的版本号用
{args.target}-$(date +%Y%m%d%H%M%S)是为了每次部署生成唯一标识,你也可以换成自己的版本规则- 确保环境变量里配置了
SENTRY_AUTH_TOKEN、SENTRY_ORG、SENTRY_PROJECT,或者在项目根目录创建.sentryclirc文件配置这些参数
二、是否需要自定义脚本?
不需要额外写复杂的自定义脚本,直接用Sentry CLI的命令就能满足需求。如果你的版本号规则特殊(比如需要从外部文件读取),可以写个简单的shell/js脚本生成版本号再调用Sentry CLI,但大多数场景下直接用命令行参数或环境变量就够了。
三、NX工作区应用版本号管理方案
NX确实没有内置每个应用单独的版本号管理机制,推荐以下几种实用方案:
1. 每个应用单独维护package.json
在每个应用的根目录(比如apps/my-app/)创建专属的package.json,在里面定义version字段,然后用脚本读取:
# 读取应用版本号的命令 APP_VERSION=$(node -p "require('./apps/my-app/package.json').version")
之后在Sentry上传命令里替换成这个变量即可。
2. 根目录统一管理+环境变量传递
在根目录的package.json里定义版本号,或者创建version.json文件,构建/部署时通过NX的env参数传递给应用:
- 在应用的
project.jsonbuild配置里添加环境变量:
"build": { "executor": "@nrwl/web:webpack", "options": { "env": { "APP_VERSION": "$(node -p \"require('./package.json').version\")" } // 其他配置... } }
部署时同样复用这个版本号上传Sentry。
3. 在project.json里自定义版本字段
直接在应用的project.json里添加自定义的version字段:
{ "name": "my-app", "$schema": "../../node_modules/nx/schemas/project-schema.json", "sourceRoot": "apps/my-app/src", "projectType": "application", "version": "1.0.2", // 自定义版本字段 // 其他配置... }
然后用脚本读取该字段:
APP_VERSION=$(node -p "require('./apps/my-app/project.json').version")
内容的提问来源于stack exchange,提问作者Mike_NotGuilty
相关产品推荐
相关产品推荐

