Node.js 与 npm 使用指南
什么是 Node.js?
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时,让你可以在浏览器之外运行 JavaScript。npm(Node Package Manager)是它的官方包管理器,也是全球最大的软件注册中心。
一句话总结:前端写 JS,后端也写 JS,npm 帮你装一切依赖。
安装 Node.js
推荐方式:nvm(版本管理器)
用 nvm 可以随时切换 Node 版本,不会污染系统环境:
# 安装 nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
# 重新加载 shell
source ~/.bashrc
# 安装最新的 LTS 版本
nvm install --lts
# 查看当前版本
node -v
npm -v常用 nvm 命令
nvm ls # 列出已安装版本
nvm ls-remote # 列出所有可用版本
nvm use 20 # 切换到 Node 20
nvm alias default 20 # 设为默认版本其他安装方式
| 方式 | 命令 | 说明 |
|---|---|---|
| 系统包管理器 | sudo apt install nodejs npm | 版本通常较旧 |
| 官网安装 | nodejs.org 下载 .pkg/.msi | 简单直接但不好切换版本 |
| Homebrew | brew install node | macOS 用户常用 |
npm 基础操作
初始化项目
mkdir my-project && cd my-project
npm init # 交互式创建 package.json
npm init -y # 全部用默认值,快速创建这会生成 package.json——项目的身份证,记录依赖、脚本、版本等信息。
安装依赖
npm install express # 安装到 dependencies(生产依赖)
npm install -D typescript # 安装到 devDependencies(开发依赖)
npm install -g nodemon # 全局安装
npm install # 根据 package.json 安装所有依赖卸载与更新
npm uninstall express # 卸载
npm outdated # 检查过时的包
npm update # 更新所有包
npm update express # 更新指定包运行脚本
在 package.json 的 scripts 字段定义命令:
{
"scripts": {
"dev": "node src/index.js",
"build": "tsc",
"test": "jest",
"start": "NODE_ENV=production node dist/index.js"
}
}npm run dev # 运行自定义脚本
npm start # start 和 test 可以省略 run
npm testpackage.json 核心字段
{
"name": "my-app",
"version": "1.0.0",
"description": "我的应用",
"main": "dist/index.js",
"type": "module",
"scripts": { ... },
"dependencies": {
"express": "^4.18.0"
},
"devDependencies": {
"typescript": "^5.3.0"
},
"engines": {
"node": ">=18"
}
}关键字段说明:
| 字段 | 作用 |
|---|---|
main | 入口文件,别人 require('my-app') 时加载的文件 |
type | "module" 启用 ES Module(import/export) |
engines | 声明支持的 Node 版本 |
files | 发布到 npm 时包含哪些文件 |
bin | CLI 工具的入口命令 |
版本号规则(Semver)
格式:主版本.次版本.补丁版本(如 4.18.2)
{
"express": "^4.18.0", // ^ 允许次版本和补丁更新(>=4.18.0 <5.0.0)
"react": "~18.2.0", // ~ 只允许补丁更新(>=18.2.0 <18.3.0)
"lodash": "4.17.21", // 锁定精确版本
"next": ">=14.0.0" // 大于等于指定版本
}记住:^ 是默认行为,大多数时候够用。~ 更保守,精确版本最安全。
package-lock.json
package-lock.json 锁定每个依赖的精确版本,保证团队所有人装到一模一样的包。
# 重要:永远把 lock 文件提交到 git
git add package-lock.json
# 如果依赖乱了,用这个清掉重装
rm -rf node_modules package-lock.json
npm installnpm 配置与镜像
查看和设置配置
npm config list # 查看当前配置
npm config get registry # 查看当前镜像源
npm config set registry https://registry.npmmirror.com # 设为国内镜像
npm config delete registry # 恢复默认常用配置项
npm config set save-exact true # 安装时锁定精确版本
npm config set fund false # 关闭赞助提示
npm config set audit false # 关闭安全审计提示配置文件位置
| 文件 | 路径 | 优先级 |
|---|---|---|
| 项目级 | .npmrc(项目根目录) | 最高 |
| 用户级 | ~/.npmrc | 中 |
| 全局级 | $PREFIX/etc/npmrc | 最低 |
npx:临时执行工具
npx 是 npm 5.2+ 自带的工具执行器,不需要全局安装就能跑命令:
npx create-react-app my-app # 创建 React 项目
npx cowsay "你好世界" # 临时跑一下 cowsay
npx eslint src/ # 跑项目里的 eslint,不用全局装
npx http-server # 启动静态文件服务器原理:先找本地 node_modules/.bin/,找不到就临时下载到缓存再执行。
常用场景速查
创建前端项目
npx create-vite my-app --template react-ts # Vite + React + TS
npx create-next-app my-app # Next.js
npx create-expo-app my-app # React Native (Expo)创建后端项目
npm init -y
npm install express
npm install -D typescript @types/node @types/express tsxmonorepo(多包项目)
// package.json
{
"workspaces": ["packages/*"]
}mkdir -p packages/{api,web,shared}
npm install # 自动链接本地包
npm install lodash -w api # 只给 api 装 lodash发布自己的包
npm login # 登录 npm 账号
npm publish # 发布(记得先改版本号)
npm publish --access public # 发布 scoped 包为公开
npm unpublish my-package@1.0.0 # 撤销发布(24小时内)常见问题
node_modules 太大?
# 查看最大的包
npx node-modules-size
# 用 .npmignore 或 package.json 的 files 字段控制发布内容
# 用 pnpm 替代 npm,天然节省磁盘空间权限问题?
# 不要用 sudo npm install!改用:
mkdir ~/.npm-global
npm config set prefix '~/.npm-global'
echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrc
source ~/.bashrc网络慢/装不上?
# 切换镜像源
npm config set registry https://registry.npmmirror.com
# 或者用代理
npm config set proxy http://127.0.0.1:7890
npm config set https-proxy http://127.0.0.1:7890npm vs yarn vs pnpm 速览
| 特性 | npm | yarn | pnpm |
|---|---|---|---|
| 速度 | 中等 | 快 | 最快 |
| 磁盘占用 | 高 | 中 | 最低 |
| lock 文件 | package-lock.json | yarn.lock | pnpm-lock.yaml |
| 幽灵依赖 | 有 | 有 | 无 |
| monorepo | workspaces | workspaces | workspaces(原生支持最好) |
| 推荐场景 | 通用默认 | 老项目 | 新项目首选 |
如果是新项目,强烈推荐 pnpm——更快、更省空间、没有幽灵依赖问题。
速查卡
npm init -y 初始化项目
npm install <pkg> 安装依赖
npm install -D <pkg> 安装开发依赖
npm install -g <pkg> 全局安装
npm uninstall <pkg> 卸载
npm run <script> 运行脚本
npm outdated 检查过时包
npm update 更新依赖
npm list 查看依赖树
npm list -g --depth=0 查看全局安装的包
npm cache clean --force 清除缓存
npx <command> 临时执行命令
评论已关闭