You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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.json build配置里添加环境变量:
"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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 08:55:22