一个让JavaScript跑在服务器上的运行时
2009年,Ryan Dahl 将 Chrome 的 V8 引擎与事件循环结合,推出了 Node.js。它并非一门新语言,而是一个跨平台的运行时环境,让开发者能使用 JavaScript 编写服务端代码。如今,Node.js 由 OpenJS 基金会维护,每半年发布一个主要版本,已经成为现代 Web 后端、工具链开发的核心支柱。
围绕事件驱动设计的核心理念
传统服务端模型往往为每个连接分配一个线程,而 Node.js 采用单线程事件循环加非阻塞 I/O 的设计。网络请求、文件读写等操作会以回调、Promise 或 async/await 的方式异步执行,不会阻塞主线程。单台机器就能支撑数万并发连接,内存开销却低得多。配合 libuv 库,Node.js 在 Windows、macOS、Linux 上都能获得一致的异步行为。
生态更是 Node.js 的杀手锏。npm 注册表收纳了超过 200 万个包,从 Express、Koa 这样的 Web 框架,到 sharp 图像处理、puppeteer 浏览器自动化,几乎任何需求都有现成方案可复用。包管理器直接内置于安装包中,安装 Node.js 的同时就能使用 npm 命令,省去额外配置的麻烦。
哪些场景更适合选择Node.js
如果你负责构建实时聊天、协作编辑、在线游戏这类需要长连接与高频交互的应用,事件驱动架构会带来天然的性能优势。搭建 RESTful API 或 GraphQL 服务也是主流组合,搭配 TypeScript 更能提升大型项目的可维护性。全栈开发者还能用它驱动前端研发流程:从 webpack、Vite 的配置处理,到启动本地开发服务器,都离不开 Node.js 运行时。
微服务领域同样常见。轻量级的进程模型加上原生支持 HTTP/2 与 Stream,使得每个微服务实例启动快、占用资源少。另外,许多桌面端工具(如 Electron 应用)也把 Node.js 嵌在底层,负责文件系统访问和系统级操作。
不过,CPU 密集型计算——例如视频转码或大规模矩阵运算——并不适合直接跑在主线程上。这时可以利用 worker_threads 模块开启多线程,或把计算任务交给 C++ 插件处理。选型思路上,I/O 密集、需要快速迭代的场景会放大 Node.js 的特长。
通过命令行感受开发节奏
安装完成之后,打开终端输入 node 就能进入交互式 REPL 环境,随时测试代码片段。日常开发中,一个 npm init 便能生成项目骨架,npm install 拉取依赖。整个流程没有图形界面,反而让工程师专注于编辑器与终端之间,这种极简的交互被很多开发者形容为“干净利落”。
如果想追踪代码变更,nodemon 这类工具会自动监测文件修改并重启进程。测试框架如 Jest、Mocha 也通过命令行执行,日志和错误栈清晰易读。对习惯 Visual Studio Code 或 WebStorm 的用户,内置的调试器可以直接连接 Node.js 进程,设置断点与变量监视,与客户端开发体验已相当接近。
LTS与Current:如何选择版本
每次 Node.js 下载 页面都会展示两个选项:LTS(长期支持)和 Current。LTS 版本比如目前的 20.x,专为生产环境设计,会持续获得关键 bug 修复和安全更新 30 个月。偶数版本号进入 LTS 已是不成文的规则,因此大多数服务器部署建议紧跟 LTS 线。Current 版本如 21.x 则包含最新特性,适合早期试验或为下个 LTS 做准备。
更新日志中,v20 强化了权限模型与原生测试运行器,v21 将 V8 引擎提升至 11.8,并增加了对 WebSocket 客户端的实验性支持。无论选择哪条线,安装包均附带 npm 和 corepack,后者方便管理 Yarn、pnpm 等包管理器版本。
下载安装只需三步
前往 nodejs.org,首页会自动根据操作系统推荐对应的安装包。Windows 用户可下载 .msi 安装程序,勾选自动添加 PATH 后一路下一步即可。macOS 用户除了 .pkg,还能通过 Homebrew 执行 brew install node;Linux 发行版则建议使用 NodeSource 维护的软体仓库,或直接解压官方提供的二进制 tar 包。从官网获取的包经过数字签名,避免被中途篡改文件。
为方便回溯或测试旧版兼容性,本页下方提供了该软件的版本历史列表和本地下载地址。你可以快速定位到特定大版本,比较各次变更,或在不连网环境中完成安装。