Node.js 是免费、开源、跨平台的 JavaScript 运行环境,让 JavaScript 在浏览器之外执行。它可以创建 HTTP 服务、处理文件与网络数据,也常用于命令行工具、构建流程和自动化脚本。Node.js 提供运行能力;页面组件、业务路由和数据库模型仍要按项目选择框架或依赖。

拿到一个 JavaScript 项目,第一步往往不是“装齐所有包”,而是弄清它要求哪个 Node.js 版本、采用哪种模块方式、从哪个脚本启动。版本、模块与依赖影响不同环节,混在一起处理,容易把本来明确的报错越改越复杂。
从项目要求选择版本,而不是只看下载页的大数字
Node.js 官方建议生产应用使用 Active LTS 或 Maintenance LTS 分支。2026 年 10 月 6 日核对版本表时,v24 和 v22 属于 LTS,v26 仍为 Current;下载页的补丁版本会继续更新,不能只记录“最新版”。已有项目还要先看框架、原生扩展和部署平台支持的版本范围。
- 阅读项目说明、
package.json和已有环境配置,确认约定的 Node.js 与包管理器版本。 - 在本机、CI 与部署环境使用相符的版本,分别记录实际值。
- 升级大版本时,先检查弃用说明和原生扩展支持,再验证项目测试、构建与启动。
LTS 是维护状态,不代表所有第三方包都已经适配。EOL 分支不再获得常规维护,即使旧项目还能启动,也需要制定升级计划;版本管理器能切换解释器,却不会自动修复应用代码和依赖兼容问题。
模块、依赖和脚本,是三个不同层次
核心模块与第三方包
node:fs、node:path、node:http、node:stream 和 node:test 等属于核心模块,不需要先从 npm 安装。只有项目需要的外部能力才加入依赖。npm 通常随官方安装包提供,用来管理包和执行项目脚本;来自 registry 的第三方包仍由各自维护者负责。
文件按 ESM 还是 CommonJS 解释
.mjs 明确使用 ECMAScript Modules,.cjs 明确使用 CommonJS;.js 的解释还受所在包的 package.json 中 type 等规则影响。新项目应明确约定,旧项目则先识别现有方式,再决定怎样接入依赖。不要看到 import 或 require() 报错,就在全项目里盲目替换。
例如下面是一份简化的项目配置示例,假定入口文件为 app.mjs。type 声明模块方式,scripts.start 声明启动命令;它没有替项目添加 Web 框架,也没有创建入口文件:
{
"type": "module",
"scripts": {
"start": "node app.mjs"
}
}
ESM 的相对导入还要写清文件扩展名,例如 import "./config.js"。读取依赖时则核对它的 exports 与文档;文件已经存在,不代表包允许通过任意内部路径导入。
锁文件记录解析结果,环境也要同时记录
package.json 描述依赖约束与脚本,锁文件记录实际解析的依赖。只把一份依赖清单交给同事,可能仍不足以复现:还要知道 Node.js、npm、操作系统与架构,以及安装时使用的配置。带原生扩展的包尤其可能需要对应 ABI、编译工具或预构建二进制。
已有且与 package.json 一致的 npm 锁文件时,可在自动化环境考虑 npm ci。它会按锁文件安装,依赖不一致时报错,并在安装前移除现有 node_modules;不会帮你把清单和锁文件重新对齐,也不用于临时添加某个包。使用前确认本地没有需要保留的依赖目录改动。
安装报错先分层判断:是运行版本不受支持、模块入口不符,还是原生包缺少对应构建?删掉锁文件重新安装会改变解析结果,不能保证消除原因。引入包之前,也要检查维护状态、许可和安装脚本,避免把安装成功当成可信的证明。
等待 I/O 时让出执行机会,密集计算另作安排
Node.js 的事件循环组织 JavaScript 回调,网络和文件等异步操作由运行时与相关机制协作处理。等待数据库或网络响应时,其他请求有机会继续执行;但回调里持续计算,仍会让其他 JavaScript 回调等待。

例如一个接口只是等待远端查询,和一个接口要在回调里解析巨大 JSON、长时间循环计算,运行特征不同。把函数改成 async 并不会自动把其中的密集计算移到另一个线程。同步文件操作、大量 JSON 处理和复杂正则,也需要结合输入大小评估对事件循环的影响。
CPU 密集型 JavaScript 可以评估 Worker Threads、子进程或任务服务;大文件处理可考虑流,避免一次性把全部数据载入内存。内置 Fetch 和测试运行器也能覆盖常见任务,但是否够用仍取决于项目需要。性能结论应来自实际负载,不能只由“非阻塞”推导。
Windows、macOS 与 Linux 怎样安装和验证
官方下载页提供 Windows x64/ARM64 安装包、macOS Intel/Apple Silicon 安装包,以及 Linux 等平台的预编译文件和源码。下载前要同时确认操作系统、CPU 架构、目标版本线和安装方式;需要在多个项目间切换版本时,可从官方下载页列出的官方或社区版本管理器中选择,但两类安装方式的维护主体和支持边界不同。
安装完成后可在新终端中运行 node --version 和 npm --version 检查命令路径与版本,再用 node script.mjs 执行一个本地脚本。若命令不存在,优先检查终端是否需要重启、PATH 是否指向预期安装目录,以及系统中是否同时存在多个版本管理器;不要为了“修好环境”随意复制未知的 node.exe 或全局修改系统目录。
MIT 许可与生产使用边界
Node.js 主项目采用 MIT 许可,允许在保留版权和许可声明的条件下使用、修改和分发。发行包还包含 V8、libuv、OpenSSL、ICU 等外部维护组件,它们可能使用各自的许可证,因此需要再分发 Node.js、制作安装包或开展合规审查时,应直接查看当前版本随附的 LICENSE 文件,而不是只记录“MIT”两个字。
生产环境还要持续关注安全公告和受支持版本线。Node.js 只提供 JavaScript 执行环境,应用本身的依赖漏洞、密钥管理、输入校验、权限、日志和部署配置仍由项目维护者负责;使用 LTS 也不等于可以跳过依赖更新和安全测试。
下载与项目运行文档
- Node.js 官方下载:
https://nodejs.org/en/download - 版本维护状态:
https://nodejs.org/en/about/previous-releases - 模块与 package.json:
https://nodejs.org/api/packages.html - 事件循环与阻塞任务:
https://nodejs.org/en/learn/asynchronous-work/dont-block-the-event-loop - npm ci 的前提与行为:
https://docs.npmjs.com/cli/v11/commands/npm-ci/ - Node.js API 文档:
https://nodejs.org/docs/latest/api/














暂无评论内容