Linux 安装配置 Node.js 和 npm
# Node.js:一个让 JavaScript 在服务器端运行的运行时环境
- 不是编程语言(使用 JavaScript)
- 不是框架(但生态中有框架如 Express、NestJS)
- 是基于 Chrome V8 引擎 的 JavaScript 运行平台
# npm:(Node Package Manager) Node.js 的默认包管理器,也是全球最大的开源软件注册表
- 命令行工具:安装在电脑上的 npm 命令
- 代码仓库:托管超过 300 万个 可复用代码包的仓库
- 依赖管理系统:通过 package.json 管理项目依赖
传统限制:JavaScript 只能在浏览器中运行
Node.js 突破:让 JavaScript 可以:
✅ 访问文件系统
✅ 操作操作系统
✅ 处理网络请求
✅ 创建服务器应用
✅ 开发命令行工具
✅ 构建桌面应用(通过 Electron)
Node.js 的应用领域:
✅ 后端:API 服务器、微服务
✅ 前端:构建工具(Webpack、Vite)、开发服务器
✅ 桌面:Electron 应用(VS Code、Slack、Figma)
✅ 移动:React Native 的构建工具链
✅ CLI:命令行工具
✅ IoT:物联网设备控制
传统多线程模型:
┌─线程1─┐ ┌─线程2─┐ ┌─线程3─┐
│ 等待I/O │ │ 等待I/O │ │ 等待I/O │ ← 大量内存消耗
└──────┘ └──────┘ └─────┘
Node.js 事件驱动模型:
┌───事件循环───┐
│ │
I/O 完成 → 回调函数
│ │
└────────────┘ ← 单线程处理高并发
项目结构:
my-project/
├── package.json ← 项目配置清单(核心!)
├── package-lock.json ← 依赖树精确快照
├── node_modules/ ← 依赖包存放目录(通常很大)
└── src/
# Node.js 和 npm 下载链接:Node.js — Download Node.js®
官方推荐的安装方式有:nvm、fnm、docker(建议安装 LTS 版本)

nvm 和 fnm 区别如下:


速度测试示例:( fnm 通常会快一个数量级 )
# 测量 nvm 启动一个全新 Shell 并获取版本的时间
time (bash -c 'source ~/.nvm/nvm.sh && nvm --version')
# 测量 fnm 启动一个全新 Shell 并获取版本的时间
time (bash -c 'eval "$(fnm env)" && fnm --version')
命令兼容性:
# 以下命令在两者中通常表现一致:
nvm/fnm install 24 # 安装 Node.js 24
nvm/fnm use 24 # 切换到 Node.js 24
nvm/fnm ls # 列出已安装版本
nvm/fnm ls-remote # 列出远程可用版本
nvm/fnm current # 显示当前使用版本
nvm 和 fnm 的选择:

nvm 和 fnm 可以在同一台机器上共存,并且它们可以互相切换使用。下面详细说明如何共存、切换、迁移
✅ 可以同时安装两个工具
✅ 可以互相切换使用
✅ Node.js 版本可以共享(可选配置)
✅ 不会相互冲突(如果正确配置)
# nvm 目录结构
~/.nvm/
├── versions/
│ └── node/ # Node.js 版本安装位置
│ ├── v20.11.0/
│ ├── v18.19.0/
│ └── ...
├── nvm.sh # 初始化脚本
└── ...
# fnm 目录结构
~/.fnm/
├── node-versions/ # Node.js 版本安装位置(默认)
│ ├── v20.11.0/
│ ├── v18.19.0/
│ └── ...
└── aliases/
配置共享目录:
# 配置 fnm 使用 nvm 的安装目录(共享版本),反过来不推荐,因为 nvm 可能不兼容 fnm 的目录结构
export FNM_DIR="$HOME/.nvm" # 让 fnm 使用 nvm 的目录
nvm/fnm 切换:
# 1. 编辑配置文件
vim ~/.zshrc 或 vim ~/.bashrc (根据 shell 类型使用)
# 2. 注释掉不需要的工具
# 要使用 nvm,注释 fnm 行,取消注释 nvm 行
# 要使用 fnm,注释 nvm 行,取消注释 fnm 行
# 3. 重新加载配置
source ~/.zshrc 或 source ~/.bashrc
# 4. 验证当前使用的工具
which node # 查看 node 路径
echo $PATH | grep -o ".nvm\|.fnm" | head -1 # 查看哪个工具在 PATH 中
nvm/fnm 迁移:
# 导出 nvm 当前版本的全局包
npm list -g --depth=0 > nvm_global_packages.txt
# 使用 fnm 切换到相同版本
fnm use <version>
# 根据导出的列表重新安装
cat nvm_global_packages.txt | grep -E "^[├└]" | awk '{print $2}' | cut -d@ -f1 | while read pkg
do
if [ -n "$pkg" ] && [ "$pkg" != "(empty)" ]; then
npm install -g "$pkg"
fi
done
npm 常用命令:
# 1. 项目初始化
npm init # 交互式创建
npm init -y # 快速创建(全部默认)
# 2. 安装依赖(最重要的命令)
npm install 或简写为 npm i(根据 package.json 安装所有依赖)
npm install express # 安装并添加到 dependencies
npm i -D typescript # 安装并添加到 devDependencies
npm i -g nodemon # 全局安装(CLI 工具)
# 3. 卸载依赖
npm uninstall package-name 或简写为 npm un package-name # 卸载本地包
npm uninstall package-name --save-dev # 卸载开发依赖
npm uninstall -g package-name # 卸载全局包
# 4. 运行脚本
npm start # 启动开发服务器
npm run dev # 构建开发版本
npm test # 运行测试
# 5. 依赖管理
npm update # 更新所有包
npm outdated # 检查过时包
npm audit # 安全审计
npm audit fix # 自动修复漏洞
# 6. 查看依赖和配置
npm list 或 npm ls # 查看本地安装的包
npm list -g # 查看全局安装的包
npm list -g --depth=0 # 只显示顶层包
npm list package-name # 查看包的依赖树
npm view package-name 或 npm info package-name # 查看包的详细信息
npm view package-name versions # 查看包的所有版本
npm config list # 查看所有配置
# 7. 发布你的包
npm publish
# 8. 其它常用设置
# 设置代理
npm config set proxy http://proxy.company.com:8080
npm config set https-proxy http://proxy.company.com:8080
# 查看当前源
npm config get registry
# 设置为淘宝镜像源(推荐国内使用)
npm config set registry https://registry.npmmirror.com/
# 恢复为官方源
npm config set registry https://registry.npmjs.org/
# 使用 nrm 管理多个源(推荐)
npm install -g nrm
nrm ls # 列出所有源
nrm use taobao # 使用淘宝源
nrm test # 测试源的响应速度
# 设置全局安装路径(避免使用 sudo)
npm config set prefix ~/.npm-global
# 设置日志级别
npm config set loglevel info # info, warn, error, silent
# 设置超时时间,数字单位为毫秒
npm config set timeout 5000
# 保存时自动运行 audit
npm config set audit true

浙公网安备 33010602011771号