Skip to content

Comments

Release 0.5.3#21

Merged
FOV-RGT merged 3 commits intomainfrom
release-0.5
Feb 16, 2026
Merged

Release 0.5.3#21
FOV-RGT merged 3 commits intomainfrom
release-0.5

Conversation

@FOV-RGT
Copy link
Member

@FOV-RGT FOV-RGT commented Feb 16, 2026

概述

重构优化版本,聚焦代码质量和构建效率提升。

变更内容

路径别名标准化

  • 全项目统一使用 @/ 路径别名 + .js 扩展名(ESM 规范)
  • 更新 TypeScript 配置为 nodenext 模块解析
  • 影响文件:src/test/ 下所有导入语句

Docker 镜像优化

  • 移除生产镜像中的 pnpm(镜像减少 ~50MB)
  • 移除 package.json 复制,改用环境变量传递元信息
  • 修正启动命令:CMD ["node", "dist/src/main"]
  • 新增可选参数:APP_VERSIONAPP_NAME

依赖管理

将构建工具移至 devDependencies

  • @nestjs/cli
  • prisma
  • tsc-alias

版本信息管理

// 优先级:环境变量 > package.json > 'unknown'
export const APP_VERSION = process.env.APP_VERSION || PACKAGE_INFO.version || 'unknown';
export const APP_NAME = process.env.APP_NAME || PACKAGE_INFO.name || 'unknown';

其他

  • 移除健康检查接口的 timestamp 字段
  • 清理注释代码(app.module.tsmain.ts
  • 修复 ESLint 警告(添加必要的 eslint-disable 标记)

Summary by CodeRabbit

发布说明

  • Bug Fixes

    • 改进了应用健康检查响应的准确性。
  • Chores

    • 更新应用版本至 0.5.3。
    • 增强代码质量检查规则,启用更严格的代码规范约束。
    • 优化依赖项管理结构。
    • 改进容器化部署配置,支持更灵活的版本和应用名称管理。
    • 调整模块系统配置以支持更好的兼容性。

- Replace relative imports with @ path alias for consistency
- Read package info directly from package.json instead of env vars
- Remove express body-parser middleware (use NestJS built-in)
- Clean up commented code in app.module.ts
- Enable no-console ESLint rule with proper exceptions
- Add APP_NAME constant for logger configuration
- Remove unnecessary production dependencies (pnpm, package.json copy)
- Move build-only dependencies (@nestjs/cli, prisma, tsc-alias) to devDependencies
- Use environment variables (APP_VERSION, APP_NAME) instead of package.json
- Remove timestamp field from health check response
- Fix import paths with .js extensions in tests
- Update CMD path in Dockerfile to use correct entry point
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 16, 2026

概览

该PR引入了应用程序配置的标准化,包括将构建时参数(APP_VERSION、APP_NAME)集成到Dockerfile中,重构导入路径以使用路径别名,提取应用元数据至常量模块,调整依赖关系组织,并更新ESLint规则。

变更

内聚组 / 文件 摘要
配置与工具链
.vscode/settings.json, tsconfig.json, eslint.config.js
更新VS Code设置以排除dist中的npm文件;调整TypeScript模块系统至nodenext;启用更严格的ESLint规则(no-console、eqeqeq)并移除TypeScript特定的no-unused-vars抑制。
Docker与部署
Dockerfile
移除运行时阶段的全局pnpm安装和package.json复制;添加构建时参数和环境变量(APP_VERSION、APP_NAME、PORT);更新启动命令为dist/src/main;更新暴露的端口配置。
依赖管理
package.json
版本号从0.5.2升至0.5.3;将@nestjs/cli、prisma和tsc-alias从dependencies移至devDependencies。
常量与工具函数
src/utils/constants.ts, src/utils/helpers/console-formatter.ts
提取PACKAGE_INFO常量;导出新的APP_NAME常量;重构APP_VERSION优先级为环境变量优先;更新ConsoleFormatter使用APP_NAME而非npm_package_name环境变量。
核心模块导入重构
src/app.controller.ts, src/app.module.ts, src/app.service.ts, src/main.ts, src/common/filters/all-exceptions.filter.ts, src/common/interceptors/request-context.interceptor.ts, src/common/logger.service.ts, src/common/middleware/request-preprocessing.middleware.ts
将相对导入路径替换为路径别名(@/...);在LoggerModule中用APP_NAME替代process.env.npm_package_name;移除内联序列化定制块;为console调用添加ESLint抑制注释;将req.version赋值从"APP_VERSION ?? 'unknown'"更改为直接赋值APP_VERSION;移除Express中间件(express.json、express.urlencoded)。
测试文件更新
test/unit/app.controller.spec.ts, test/unit/app.service.spec.ts, test/unit/prisma.service.spec.ts
添加导入路径中的.js扩展名以支持ESM模块解析;移除getHealth测试中的时间戳断言。

预估代码审查工作量

🎯 2 (简单) | ⏱️ ~12 分钟

可能相关的PR

建议标签

enhancement

诗句

🐰 路径别名整理齐,
常量提取显清晰,
Docker配置新模样,
APP名号有归属,
构建测试更顺畅!

🚥 Pre-merge checks | ✅ 2 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Merge Conflict Detection ⚠️ Warning ❌ Merge conflicts detected (18 files):

⚔️ .vscode/settings.json (content)
⚔️ Dockerfile (content)
⚔️ eslint.config.js (content)
⚔️ package.json (content)
⚔️ src/app.controller.ts (content)
⚔️ src/app.module.ts (content)
⚔️ src/app.service.ts (content)
⚔️ src/common/filters/all-exceptions.filter.ts (content)
⚔️ src/common/interceptors/request-context.interceptor.ts (content)
⚔️ src/common/logger.service.ts (content)
⚔️ src/common/middleware/request-preprocessing.middleware.ts (content)
⚔️ src/main.ts (content)
⚔️ src/utils/constants.ts (content)
⚔️ src/utils/helpers/console-formatter.ts (content)
⚔️ test/unit/app.controller.spec.ts (content)
⚔️ test/unit/app.service.spec.ts (content)
⚔️ test/unit/prisma.service.spec.ts (content)
⚔️ tsconfig.json (content)

These conflicts must be resolved before merging into main.
Resolve conflicts locally and push changes to this branch.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 标题"Release 0.5.3"清晰且准确地反映了本次发布的核心目标——版本号从0.5.2升级至0.5.3,这与package.json中的版本更新完全一致。

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch release-0.5
⚔️ Resolve merge conflicts (beta)
  • Auto-commit resolved conflicts to branch release-0.5
  • Create stacked PR with resolved conflicts
  • Post resolved changes as copyable diffs in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions
Copy link

Package 版本检查通过

  • 期望版本: 0.5.3
  • 实际版本: 0.5.3

版本配置正确,可以合并。


Package Version Check Passed

  • Expected Version: 0.5.3
  • Actual Version: 0.5.3

Version is correctly configured for this release.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
Dockerfile (1)

56-60: ⚠️ Potential issue | 🔴 Critical

严重:运行阶段缺少 package.json,ESM 模块将无法加载。

项目在 package.json 中声明了 "type": "module",TypeScript 以 "module": "nodenext" 编译后,dist/ 下的 .js 文件包含 ESM 语法(import/export)。运行阶段不复制 package.json,Node.js 会将 .js 文件默认按 CommonJS 解析,导致启动时抛出:

SyntaxError: Cannot use import statement outside a module

需要将 package.json 复制到运行阶段(可只保留最小字段),或生成一个最小 package.json

🐛 修复建议:复制 package.json 到运行阶段
 # 从构建阶段复制构建输出
 COPY --from=builder /app/dist ./dist

+# 复制 package.json(Node.js 需要 "type": "module" 以正确解析 ESM)
+COPY --from=builder /app/package.json ./package.json
+
 # 构建参数
 ARG APP_VERSION

如果不想暴露完整 package.json,可以生成一个最小版本:

RUN echo '{"type":"module"}' > package.json
test/unit/app.controller.spec.ts (1)

52-55: ⚠️ Potential issue | 🔴 Critical

E2E 测试中的 timestamp 断言会导致测试失败

单元测试正确地移除了 timestamp 属性的断言,但 test/e2e/app.e2e-spec.ts 第 26 行仍有活跃的断言:expect(new Date(res.body.timestamp).toString()).not.toContain('Invalid');

然而,src/app.service.tsgetHealth() 方法(第 21-35 行)的实现中完全不包含 timestamp 字段,仅返回 statusuptimeversiongitCommitcomponents。这会导致 E2E 测试执行时失败,因为 res.body.timestampundefined

需要更新 E2E 测试以移除该断言,或在 getHealth() 返回值中添加 timestamp 字段。

🤖 Fix all issues with AI agents
In `@Dockerfile`:
- Line 82: The startup command is missing the .js extension which breaks ESM
resolution; update the Dockerfile CMD entry (the existing CMD ["node",
"dist/src/main"]) to reference dist/src/main.js and also update the package.json
"start:prod" script (the script at line referencing start:prod) to run node
dist/src/main.js so Node in ESM/nodenext mode can locate the file.
🧹 Nitpick comments (5)
eslint.config.js (1)

36-36: @typescript-eslint/no-explicit-any 设置为 'off' 与编码规范不一致。

编码规范要求 src/**/*.ts 文件中避免使用 any 类型。建议至少设为 'warn' 以逐步推动规范落地,与 src/app.controller.ts 中已存在的 error: any 等用法形成提示。

此项非本次 PR 引入,可后续处理。

♻️ 建议调整
-            '@typescript-eslint/no-explicit-any': 'off', // 允许显式 any
+            '@typescript-eslint/no-explicit-any': 'warn', // 警告显式 any,推动逐步消除

As per coding guidelines: "Avoid using 'any' type in TypeScript; use specific types or generics instead".

Dockerfile (2)

51-51: 建议添加 --no-install-recommends 减小镜像体积。

Trivy 静态分析标记:apt-get install 缺少 --no-install-recommends,这会安装不必要的推荐包,增大镜像体积。

♻️ 建议修改
-RUN apt-get update -y && apt-get install -y openssl curl && rm -rf /var/lib/apt/lists/*
+RUN apt-get update -y && apt-get install -y --no-install-recommends openssl curl && rm -rf /var/lib/apt/lists/*

63-64: APP_VERSIONAPP_NAME 的 ARG 没有默认值,构建时若未传入则为空字符串。

当 Docker 构建时不传 --build-arg APP_VERSION=...APP_VERSION 环境变量会被设为空字符串(非 undefined)。在 src/utils/constants.ts 中:

export const APP_VERSION = process.env.APP_VERSION || PACKAGE_INFO.version || 'unknown';

空字符串 "" 是 falsy 的,所以 || 会正确 fallback 到 PACKAGE_INFO.version。但在运行阶段 package.json 已被移除(如上述问题),PACKAGE_INFO 读取也会失败,最终可能降级为 'unknown'

如果希望在不传参时有合理默认值,可以给 ARG 添加默认值:

♻️ 可选改进
-ARG APP_VERSION
-ARG APP_NAME
+ARG APP_VERSION=unknown
+ARG APP_NAME=nestjs-demo-basic
test/unit/app.service.spec.ts (1)

48-51: 测试描述与断言内容不匹配。

测试描述为 'getHealth should return status ok and timestamp',但断言中已移除对 timestamp 的验证。建议更新测试描述以保持一致。

♻️ 建议修复
-    it('getHealth should return status ok and timestamp', async () => {
+    it('getHealth should return status ok', async () => {
src/app.module.ts (1)

196-198: 残留注释代码未清理。

PR 描述提到"清理注释代码",但 Line 197 仍保留了被注释掉的 messageFormat 配置。如果该行已确认不再需要,建议移除以保持一致性。

♻️ 建议移除注释代码
                         options: {
                             sync: true,
                             colorize: true,
                             translateTime: 'SYS:yyyy-mm-dd HH:MM:ss.l',
-                            // messageFormat: '{if req.method}[{req.method}]({req.url}){end} {if context}{context} - {end}{msg}',
                         },

@FOV-RGT FOV-RGT merged commit f5d5e4a into main Feb 16, 2026
18 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant