主题
Node.js
Node.js 是基于 V8 的 JavaScript 运行时,提供文件系统、网络、进程和操作系统等能力。服务端开发的重点不在于记住全部 API,而在于理解模块加载、异步 I/O、资源释放和进程生命周期。
Node.js 通过 C++ 绑定和 libuv 提供文件、网络、子进程等系统能力。JavaScript 仍在主线程执行;I/O 通常由操作系统或 libuv 的线程池处理,回调再回到事件循环。
适用边界
适合 I/O 密集的 API、BFF、实时通信、CLI、构建工具和自动化脚本。
不适合直接在主线程执行长时间 CPU 计算、同步大文件读写或阻塞外部命令。这些工作会阻塞事件循环,应拆分任务、使用 worker_threads 或移交给独立服务。
学习主线
- 运行时:事件循环、Promise、定时器和阻塞风险。
- 模块:ESM、CommonJS、模块解析与
package.json。 - I/O:文件、网络、
Buffer、流与背压。 - 进程:环境变量、退出信号、子进程与诊断。
- 工程化:依赖声明、锁文件、脚本、包发布与供应链安全。
基本约定
- 新项目优先使用 ESM、
node:前缀和 Promise API。 - 线上服务避免在请求路径使用同步 I/O 或 CPU 密集计算。
- 所有可失败的异步操作必须处理异常;所有流必须处理
error。 - 依赖版本由锁文件固定;CI 使用冻结安装。
版本与启动
- 生产环境使用 LTS 版本,并在项目中通过
engines声明支持范围。 - 团队通过
.node-version、.tool-versions或版本管理工具统一 Node.js 版本。 - 升级前检查 Node.js 发布说明、依赖兼容性和弃用 API。
bash
node src/index.js
node --watch src/index.js
node --env-file=.env src/index.js
node --inspect src/index.js--watch 适合本地开发;--inspect 用于连接调试器;敏感配置不应提交到 .env。
