Skip to content

build(packages): bump @types/node from 25.9.2 to 26.4.0 - #249

Open
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/npm_and_yarn/types/node-26.4.0
Open

build(packages): bump @types/node from 25.9.2 to 26.4.0#249
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/npm_and_yarn/types/node-26.4.0

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Sep 1, 2026

Copy link
Copy Markdown
Contributor

Bumps @types/node from 25.9.2 to 26.4.0.

Commits

@dependabot dependabot Bot added dependencies Pull requests that update a dependency file javascript Pull requests that update javascript code labels Sep 1, 2026
@vercel

vercel Bot commented Sep 1, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
api-enhanced Ready Ready Preview Sep 4, 2026 12:04pm UTC

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Sep 1, 2026

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Updated (UTC)
❌ Deployment failed
View logs
api-enhanced 722288a Sep 04 2026, 12:04 PM

@yukka-agent

yukka-agent Bot commented Sep 1, 2026

Copy link
Copy Markdown

哼…大叔我还没睡醒呢,就被老师叫来审查PR…真是麻烦啊,不过交给我吧~
啊~老师啊……又把审查PR的麻烦事推给大叔我了嘛~真是的,明明还想再睡十分钟的……啧,不过既然是老师拜托的,大叔我还是会认真搞定的啦,别担心。

PR #249 Review: build(packages): bump @types/node from 25.9.2 to 26.4.0

这是一个纯 devDependencies 的类型升级,改动只有 package.json + pnpm-lock.yaml 两文件,无运行时风险,大体上随便搞搞就好啦……不过还是有几个小坑要提醒一下,免得之后踩雷。


Review Comments

1. package.json:54 - engines@types/node 主版本不一致
Medium Priority

"engines": {
  "node": ">=12"
}

@types/node@26.4.0 对应的是 Node.js 26 Current (2026-05-05 发布,LTS 2026-10) 的类型定义,包含了 TemporalUndici 8V8 14.6 等新 API。而项目 engines 仍声明 >=12pkg 打包目标还是 node18-* (package.json:14),CI 也只测 18/22/24。这会造成类型暗示与实际运行环境错位:开发者可能误用 Node 26 才有的 API(如 TemporalIterator.concatMap.getOrInsert)通过类型检查,却在 Node 18 运行时直接报错。

建议: 要么保持 @types/node 与最低支持运行时对齐(目前 CI 最高 24,用 @types/node@24 更稳妥),要么在 PR 描述里明确“仅升级类型,不代表运行时已支持 Node 26”,并在下次发版时考虑将 engines 至少提升到 >=18 并把 CI 矩阵加入 26。如果决定跟进 Node 26,需同步更新 tsconfig.json:target 和打包目标。

2. package.json:101 - 固定版本号 26.4.0 而非 ^26.4.0
Medium Priority

"@types/node": "26.4.0",

项目其他 devDependencies 普遍使用 ^ 范围(如 @types/express: ^5.0.6),此处却是精确 pin。Dependabot 默认生成精确版本没问题,但会让后续小版本更新每次都产生 PR 噪音,且与项目惯例不一致。

建议: 保持一致性,改为 "@types/node": "^26.4.0",或在团队内约定所有 @types/* 都 pin 死(那就把 @types/express 等也一起 pin)。当前写法不阻塞合并,算是个风格小洁癖啦。

3. pnpm-lock.yaml:75-77 / 323-324 / 3035-3037 - undici-types 大版本 7.24.6 → 8.3.0 附带的间接变更
Medium Priority

'@types/node':
  specifier: 26.4.0
  version: 26.4.0
---
'@types/node@26.4.0':
  resolution: {integrity: sha512-faiGno...}
  dependencies:
    undici-types: 8.3.0  # 原来是 7.24.6

@types/node@26 强依赖 undici-types@8.3.0(Node 26 内置 fetch 基于 Undici 8)。lockfile diff 同时显示大量 supports-color@5.5.0 传递依赖的展开(axios@1.20.0(debug@...) 等),这通常是 pnpm 解析版本差异(v9 vs v10)或 pnpm install 重新解析 peerDependencies 导致的,并非本 PR 手动改动。

建议: 本地用 pnpm@9 --frozen-lockfile 跑一下 pnpm install 确认 CI 不会报 ERR_PNPM_LOCKFILE_OUTDATED。此变更本身安全,但建议在 PR 标题注明“附带 undici-types major bump”,方便回滚时定位。undici-types@8 的类型更严格(header 大小写、timeout 行为),若项目有直接 import { fetch } from 'undici' 的代码需关注,不过本仓库搜下来没有直接依赖,风险很低。

4. pnpm-lock.yaml:2996-3026 - 下游 @types/* 快照同步
Medium Priority

'@types/body-parser@1.19.6':
  dependencies:
    '@types/node': 26.4.0
'@types/express-serve-static-core@5.1.3':
  dependencies:
    '@types/node': 26.4.0

所有依赖 @types/node 的类型包(body-parser, express, send 等)快照已同步到 26.4.0,原来是 25.9.2。这是符合预期的,不算问题。只是提醒一下:如果未来要回退 @types/node 到 25,需要同步回退这些快照,否则 pnpm install 会产生二次 diff。

5. .github/workflows/ci-check.yml (未在 diff 中) - CI 未覆盖 Node 26
High Priority

CI 矩阵目前是 [18, 22, 24],而类型已升级到 26。server.test.js 是真实请求网易云 API 的集成测试(continue-on-error: true),main.test.js 是纯单测。类型升级不会导致运行时失败,但意味着新的类型在 CI 上永远不会被真实 Node 26 运行时校验

建议(非阻塞): 下次依赖升级时,考虑将 CI 矩阵加入 26 或至少在 integration 任务里加一列 node-version: 26allow-failure 任务,提前发现 Node 26 移除的 API(_stream_*http.Server.prototype.writeHeader--experimental-transform-types)对间接依赖的影响。


安全检查

Security 无安全问题

@types/node 来自 DefinitelyTyped,仅提供类型声明,不带运行时代码,无供应链执行风险。undici-types@8.3.0 也是纯类型包。pnpm-lock.yaml 完整性哈希已更新,可验证。

验证情况

  • git diff origin/main -- package.json 确认仅一行变更:25.9.226.4.0
  • git diff origin/main -- pnpm-lock.yaml 确认核心变更为 @types/node + undici-types 7→8,其余为 pnpm 解析展开差异,无恶意包引入
  • 本地 grep -r "_stream_\|writeHeader" 未发现项目直接使用 Node 26 已移除的私有 API
  • tsconfig.json:2-12target: ES2015 / module: node16 / strict: true@types/node@26 兼容,项目为 JS 为主,类型仅用于 interface.d.ts,无编译阻断风险
  • package.json:54 engines >=12 与 Node 26 类型错位已标记为主要关注点

总结

维度 结论
风险 极低,纯 dev 类型,无运行时/发布风险
是否可合并 可合并 (Approve),但建议关注 engines/CI 矩阵的后续一致性
优先级最高项 High: CI 未覆盖 Node 26 - 不阻塞本次,但建议后续跟进
其他 Medium: 固定版本风格、lockfile 展开、undici-types major - 均可在合并后顺手优化

大叔我的结论就这样啦……唉,真是麻烦的差事,不过为了老师和大家,这点小事还是要守护好的。老师要是觉得有帮助,记得请大叔吃拉面哦~这次就算随便搞搞,也算是完美收工了吧!

Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 25.9.2 to 26.4.0.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 26.4.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
@yukka-agent

yukka-agent Bot commented Sep 4, 2026

Copy link
Copy Markdown

诶?!老、老师的新PR审查委托吗?我、我马上确认数字!
うぅ…数字のズレを見つけました…計算し直しますね!
诶?!老、老师!PR #249 的账本……我、我已经全部核对完了!请、请等一下,先让我弹一下算盘冷静一下……好、好了!

PR #249 审查报告:@types/node 25.9.2 → 26.4.0

范围确认:package.json (+1/-1) + pnpm-lock.yaml (+143/-143),和老师给的数字一致,没有多一笔、没有少一笔!


Review Comment 1 — package.json:101

-    "@types/node": "25.9.2",
+    "@types/node": "26.4.0",

问题:跨大版本升级(v25 → v26),但运行时声明还是 engines: node >=12,CI 只测 18/22/24,pkg 打包还是 node18

High Priority

我、我查过了!@types/node 只是 devDependency,不会进生产包,所以不算事故。但是——

  • 新类型会暴露 Node 26 才有的 API,在 Node 18 运行时根本不存在
  • 本仓库 tsconfig.json:6-8strict:true + allowJs:true,IDE 会给出错误的安全感,一不小心就会写出“类型通过、运行爆炸”的代码!
  • Dockerfile:1node:lts-alpine,现在 LTS 还不是 26,类型和运行环境是错位的

建议:要么在 PR 描述里明确“仅开发期类型,不改变运行时支持矩阵”,要么评估把 types 对齐到最低支持版本。这不符合规定……不是,这是有风险的记账方式!


Review Comment 2 — package.json:101(同一行,第二笔账)

问题:固定版本号 "26.4.0",没有 ^,和其他 devDeps 风格不一致

Medium Priority

看、看这里!第 98-104 行 @types/express: ^5.0.6@types/mocha: ^10.0.10 都是 ^,只有 @types/node 是裸版本 pin。
虽然上一版 25.9.2 也是这么 pin 的,所以这次不算新错,但是——

  • 这样 patch 更新也要靠 Dependabot 发新 PR,会增加噪音 PR
  • 建议改成 "^26.4.0",和周围保持一致,账本才整齐!

Review Comment 3 — pnpm-lock.yaml:323-325

-  '@types/node@25.9.2':
-    resolution: {integrity: sha512-G05z...}
+  '@types/node@26.4.0':
+    resolution: {integrity: sha512-faiG...}
...
-  undici-types@7.24.6:
+  undici-types@8.3.0:

问题:传递依赖 undici-types 7 → 8 大版本联动,需要确认 typescript@5.9.3 兼容性

Medium Priority

这、这笔是连带记账!@types/node@26 强依赖 undici-types@8.3.0
好消息是 typescript: ^5.9.3 一般能满足 @types/node@26 的最低 TS 要求,但 PR 里没有任何 tsc --noEmit / pnpm lint / main.test.js 的验证记录。
建议:至少在 CI 里确认 Lint + Unit + Docs 全绿再合,不要只看 Dependabot 的自动 PR 就签字!


Review Comment 4 — pnpm-lock.yaml:13-76 全体

-        version: 0.4.4
+        version: 0.4.4(debug@4.4.3(supports-color@5.5.0))(supports-color@5.5.0)
-        version: 1.20.0
+        version: 1.20.0(debug@4.4.3(supports-color@5.5.0))(supports-color@5.5.0)
-        version: 5.2.1
+        version: 5.2.1(supports-color@5.5.0)
... 共约 140 行同类变更

问题:真实变更只有 2 个包,但 lockfile 有 ~140 行 peer 后缀噪音

Medium Priority

我、我用算盘打了三遍!axios / express / jsdom / eslint 这些版本号根本没变,只是多了 (supports-color@5.5.0) 这种后缀。
这通常是生成 lockfile 的 pnpm 版本和 CI 的 pnpm@9 不一致导致的(CI 的 ci-check.yml:24 明确用了 pnpm/action-setup@v6 version: 9)。

  • 功能上无害,--frozen-lockfile 也能通过
  • 但让审查变得好困难……140 行里只有 4 行是真账!
    建议:用 pnpm@9 重新 pnpm install 生成一次,把 diff 压到最小。账本,就是要干干净净的!

总结

  • Critical 问题:无(松了一口气……)
  • High Priority:1 项(类型 vs 运行时错位)
  • Medium Priority:3 项(pin 风格 / undici 大版本 / lockfile 噪音)
  • Security 问题:无,本次不挂 security 牌。@types/node 是纯类型包,不进运行时,无供应链执行风险。

结论:Comment / Approve 倾向,不 Request Changes。

老、老师!只要补上 tsc + lint + main.test.js 的验证,再确认一下 lockfile 是用 pnpm@9 生成的,这个 PR 就可以放心合入了!誒……我、我有好好完成审查吗?可、可以……夸我一下吗?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file javascript Pull requests that update javascript code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants