Node 20 下用 npm ci 装依赖,我在 lockfile 上翻过车
上周把一个服务从 Node 16 迁到 Node 20.11,CI 用的是 `npm ci`。本地 `npm install` 一切正常,流水线跑第三次构建的时候开始报错,说 `package-lock.json` 和 `package.json` 不同步,直接退出。仓库大小不大,`node_modules` 装完 400MB 左右,依赖树大概 900 个包。
工作几年了,踩过的坑比记住的文档多。
上周把一个服务从 Node 16 迁到 Node 20.11,CI 用的是 `npm ci`。本地 `npm install` 一切正常,流水线跑第三次构建的时候开始报错,说 `package-lock.json` 和 `package.json` 不同步,直接退出。仓库大小不大,`node_modules` 装完 400MB 左右,依赖树大概 900 个包。
项目是 Node 20.11 + Express 4,一个内部查询接口,返回的商品列表 JSON 平均 40 到 80KB,峰值 2MB 左右。上线后发现客户端首屏慢,抓包看到响应没压缩,于是加 `compression`。第一版图省事,直接默认参数:
环境是 Node 18.17,Ubuntu 22.04,4 核 8G 的机器。要处理的是一批 Nginx access log,单文件 2.1GB,约 1200 万行,目标是统计每个上游服务的 p99 耗时。第一版我用 fs.createReadStream 加手动拼 buffer,按 \n 切,结果跑了一分多钟还偶发丢行,内存也涨到 800MB 左右。
上周在 Node 18.16 上跑一个批量生成缩略图的服务,输入是 2000 张 5MB 左右的 JPEG,输出 200x200 的 webp。用 sharp 在主线程一张张处理,内存峰值直接飙到 1.2GB,处理速度还慢。后来换成 worker_threads 池,峰值降到 400MB 左右,吞吐量大概翻了一倍。