
macOS 如何升级 Node.js
macOS 升级 Node.js 推荐 nvm:nvm install node --latest-npm 安装最新版,nvm alias default 设默认;或用 Homebrew 执行 brew upgrade node,或用 n 管理器 sudo n lts。pkg 安装包用户需下载新版覆盖安装。
聚焦概念、架构、排障、价格与选型,一篇解决一个明确问题。

macOS 升级 Node.js 推荐 nvm:nvm install node --latest-npm 安装最新版,nvm alias default 设默认;或用 Homebrew 执行 brew upgrade node,或用 n 管理器 sudo n lts。pkg 安装包用户需下载新版覆盖安装。

npm 本地安装包的可执行文件位于 node_modules/.bin/ 目录。调用方式:npx <命令>(推荐)、./node_modules/.bin/<命令>,或在 package.json 的 scripts 中直接使用(npm 自动把 .bin 加入 PATH)。

一台机器管理多个 Node 版本用 nvm:nvm install 22 / nvm install 24 安装多版本,nvm use 切换,nvm alias default 设默认。项目内可用 .nvmrc 文件自动锁定版本,Windows 用 nvm-windows。

Node.js 内置 http 模块即可创建 Web 服务器:http.createServer((req,res)=>{...}).listen(3000),无需安装任何依赖。开发调试静态文件还可用 npx serve 或 npx http-server 一条命令起服务。

Node.js 写文件用 fs 模块:fs.writeFile 异步写入、fs.writeFileSync 同步写入,Node 10+ 推荐 fs.promises.writeFile 配合 async/await。追加内容用 fs.appendFile,大文件用 createWriteStream 流式写入。

JavaScript 对象没有原生 map 方法,但可用 Object.keys/entries 配合数组 map 转换,再用 Object.fromEntries 组装回对象。Node 10+ 与现代浏览器均支持该写法。

module.exports 是模块真正导出的对象,exports 只是它的引用别名。给 exports 添加属性等价于修改 module.exports,但直接给 exports 重新赋值会断开引用导致导出失效。导出函数或对象请直接赋值 module.exports。

Node.js 单线程默认只用一个核,利用多核的方案:cluster 模块 fork 多个 worker 共享端口、worker_threads 处理 CPU 密集计算、pm2 的 cluster 模式一键多进程,或容器编排层做水平扩容。

Node.js 不换行输出用 process.stdout.write(),它不像 console.log 那样自动追加换行符。需要换行时在字符串里手动加 \n。适合实现进度条、同行动态刷新等场景。

require 是 CommonJS 动态加载(运行时同步求值),import/export 是 ES 模块静态声明(编译期分析、支持 tree-shaking)。Node 12+ 原生支持 ESM:package.json 设 "type":"module" 或用 .mjs 后缀。新项目推荐 ESM。

forEach 不支持 async/await——回调返回的 Promise 不会被等待,循环会瞬间跑完。串行处理用 for...of 循环,并行处理用 Promise.all 配合 map。

dependencies 是生产运行必需(npm install 自动装),devDependencies 仅开发期需要(npm install --save-dev,生产可用 --omit=dev 跳过),peerDependencies 声明宿主项目应提供的包(插件类库使用,npm 7+ 自动安装并检查冲突)。