
Node.js 如何打印循环引用的对象(JSON 格式)?
JSON.stringify 遇到循环引用直接报错。解决方案:用 util.inspect 打印(自动处理循环引用),或给 JSON.stringify 传 replacer 函数剔除循环引用。本文给出三种写法。
聚焦概念、架构、排障、价格与选型,一篇解决一个明确问题。

JSON.stringify 遇到循环引用直接报错。解决方案:用 util.inspect 打印(自动处理循环引用),或给 JSON.stringify 传 replacer 函数剔除循环引用。本文给出三种写法。

Node.js 读环境变量用 process.env.变量名,未设置时为 undefined。支持启动时传入、.env 文件(Node 20+ 原生 --env-file 或 dotenv 库)。本文给出完整用法与生产实践。

代码里读版本号最直接的方式是 require('./package.json').version;ES Module 使用支持的 import attributes 语法,或读文件解析。注意打包与部署时 package.json 的路径问题。本文给出 CJS/ESM 两种写法。

减小 node_modules 体积的方法:npm prune 清理多余包、--omit=dev 只装生产依赖、换 pnpm(硬链接共享存储可省 70%+)、审计依赖瘦身、部署时打包产物而非整个 node_modules。

Node.js 删文件用 fs.unlink(回调)、fs.promises.unlink(Promise)、fs.unlinkSync(同步);删目录用 fs.rm 加 recursive。文件不存在会抛 ENOENT,本文给出各写法与错误处理。

Cannot find module 的排查顺序:检查路径与文件名大小写 → 相对路径是否带 ./ → 包是否真的装了(npm install)→ node_modules 损坏则删了重装 → ESM 需写扩展名。本文给出完整排查清单。

并行跑多个 npm 脚本用 concurrently 或 npm-run-all:一条 npm run dev 同时启动服务、编译、监听。本文给出配置方法、跨平台注意事项与串行对比。

Node.js 没有内置 sleep 函数,用 Promise 包装 setTimeout 即可:await new Promise(r => setTimeout(r, 3000))。Node 15+ 可用 timers/promises 的 setTimeout。注意千万别用同步忙等阻塞事件循环。

Node.js 配置管理四种方式:环境变量(敏感信息首选)、配置文件(JSON/YAML,按环境分文件)、配置管理库(config/convict)、云密钥服务(生产密钥)。本文对比选型与安全红线。

Node 18+ 内置测试运行器,跑单个测试文件直接 node --test test/math.test.js;也可以用 --test-name-pattern 只跑文件里某个用例。jest/mocha 的单文件用法一并附上。

卸载本地包:npm uninstall 包名(自动从 package.json 移除);全局包加 -g;多个包空格分隔一次卸载。卸载后记得检查 lock 文件并跑 npm prune。

按已有安装方式升级 Node.js,区分 LTS 与 Current,检查 npm engines 兼容性,并验证项目依赖、构建和回滚路径。