npm install 和 npm ci 的区别,一半人会答成「后者快一点」。真正的区别是:npm install 有权改写 package-lock.json,npm ci 没有。本文用三个真实场景讲清这个差别为什么在 CI 里是致命的——lock 文件被镜像源来回翻转、macOS 生成的 lock 在 Linux 上缺二进制依赖、package.json 手改后 lock 静默失步——以及 yarn、pnpm 对应的命令是什么。
curl 带代理能通,Node 脚本里的 fetch 却一直超时?Node.js 内置 fetch(undici)设计上就不读 HTTPS_PROXY 等环境变量。本文用 Google Search Console API 的实际排查过程讲清这个行为,并给出三种修复路径:google-auth-library 的 client.request()、undici ProxyAgent、以及新版 Node 的实验性开关。
GA4 Data API 在代理环境下 60 秒超时报 DEADLINE_EXCEEDED,而 curl 走同一个代理完全正常。根因是 SDK 底层走 gRPC,而 grpc-js 只读小写的 grpc_proxy / https_proxy,大写 HTTPS_PROXY 对它不可见。本文从报错现象到源码逐层排查,给出一次配对的修复方案。