Skip to content

cnpm 常用命令

cnpm 是淘宝 NPM 镜像的客户端工具,是 npm 的中国版,命令与 npm 完全一致,只是默认使用淘宝镜像源,解决国内安装依赖慢的问题。


安装

bash
# 全局安装(指定淘宝镜像源安装)
npm install -g cnpm --registry=https://registry.npmmirror.com

# 查看版本
cnpm -v

# 查看安装路径(Linux/macOS)
which cnpm

与 npm 的关系

cnpm 的命令和 npm 完全一致,只是默认指向淘宝镜像源:

对比项npmyarnpnpmcnpm
镜像源https://registry.npmjs.orghttps://registry.yarnpkg.comhttps://registry.npmjs.orghttps://registry.npmmirror.com
命令npm installyarn installpnpm installcnpm install
锁文件package-lock.jsonyarn.lockpnpm-lock.yamlpackage-lock.json(7.x 起支持,9.x 完全兼容)
维护方npm Inc.Meta(原 Facebook)Zoltan Kochan淘宝团队
安装速度(国内)中等
磁盘占用小(硬链接)
幽灵依赖存在存在不存在存在

💡 如果只是想加速 npm,推荐直接修改 npm 镜像源,不一定需要安装 cnpm。


常用命令

cnpm 的命令与 npm 完全一致,以下列出最常用的:

四种依赖类型说明

类型安装命令说明大白话解释使用场景
dependenciescnpm install <pkg>生产环境依赖项目运行必须用到的包vue、react、axios、lodash 等
devDependenciescnpm install -D <pkg>开发环境依赖只在开发时用,打包后不需要vite、eslint、typescript、jest 等
peerDependenciescnpm install -P <pkg>对等依赖你的包「期望」使用者自己安装的依赖组件库期望使用者已安装 vue
optionalDependenciescnpm install -O <pkg>可选依赖安装失败不会报错,项目照样能跑跨平台兼容包、性能优化包

安装依赖

bash
# 安装所有依赖(根据 package-lock.json)
cnpm install
cnpm i                        # 简写,效果一样

# 安装指定包(添加到 dependencies)
cnpm install <package>
cnpm i <package>

# 安装指定包(添加到 devDependencies)
# -D 是 --save-dev 的简写,表示只在开发环境使用
cnpm install -D <package>
cnpm i -D <package>

# 安装指定版本
cnpm i <package>@1.2.3

# 安装最新版本
cnpm i <package>@latest

# 全局安装
# -g 是 --global 的简写,全局安装的包可以在任何地方使用命令
cnpm install -g <package>

# 安装并保存到 peerDependencies
# -P 是 --save-peer 的简写
cnpm install -P <package>

# 安装并保存到 optionalDependencies
# -O 是 --save-optional 的简写
cnpm install -O <package>

卸载 & 更新

bash
# 卸载指定包
cnpm uninstall <package>
cnpm rm <package>             # 简写

# 更新指定包(遵守版本范围)
cnpm update <package>

# 更新所有依赖(不加包名,更新 package.json 中所有依赖)
cnpm update

# 全局卸载
cnpm uninstall -g <package>

查看信息

bash
# 查看包信息(版本、依赖、仓库、作者等)
cnpm info <package>
cnpm view <package>

# 列出已安装的包(树形结构)
cnpm list
cnpm ls                       # 简写

# 列出顶层依赖(不显示嵌套的子依赖)
# --depth 控制显示层级,0 表示只显示顶层
cnpm ls --depth=0

# 查看为什么安装了某个包(显示依赖链)
cnpm why <package>

运行脚本

bash
# 运行 package.json 中的脚本
cnpm run <script-name>

# 常见脚本
cnpm run dev                  # 启动开发服务器
cnpm run build                # 构建生产版本
cnpm test                     # 运行测试

# 传递参数给脚本(-- 分隔符)
# - `--` 是参数分隔符,用于区分 cnpm 本身的参数和脚本的参数
# - `--` 之后的所有参数都会传递给脚本
cnpm run build -- --mode production
cnpm test -- --watch

# 可以传递多个参数
cnpm run build -- --mode production --verbose

# 常见工具参数示例:

# Vite 构建工具:
cnpm run dev -- --port 3001       # 指定开发服务器端口
cnpm run dev -- --host            # 允许外部访问(局域网其他设备可访问)
cnpm run build -- --mode staging  # 指定构建模式(staging 是预发布环境)
cnpm run build -- --outDir dist2  # 指定输出目录

# ESLint 代码检查:
cnpm run lint -- --fix            # 自动修复可修复的问题
cnpm run lint -- --ext .js,.ts    # 指定检查的文件扩展名(ESLint 9+ 已废弃此参数)
cnpm run lint -- --no-error-on-unmatched-pattern  # 无匹配文件时不报错

# Vitest 测试框架:
cnpm test -- --watch              # 监听模式,文件变化时重新测试
cnpm test -- --coverage           # 生成测试覆盖率报告
cnpm test -- --reporter verbose   # 使用详细报告器
cnpm test -- --bail 1             # 第一个测试失败后停止

# TypeScript 编译器:
cnpm run build -- --noEmit        # 只检查类型,不输出文件(常用于类型检查)
cnpm run build -- --sourceMap     # 生成 source map(调试时定位源码)
cnpm run build -- --watch         # 监听模式,文件变化时自动编译

📖 创建自定义脚本的详细方法请参考 npm 常用命令

其他命令

bash
# 搜索包(按关键词搜索 npm 上的包)
cnpm search <keyword>

# 清除缓存(--force 表示强制执行,不提示确认)
cnpm cache clean --force

# 查看配置
cnpm config list

# 发布包(发布到 npm,不是淘宝镜像)
cnpm publish

# 同步包到淘宝镜像(cnpm 独有,用于强制同步最新版本)
cnpm sync <package>

# 查看哪些包有新版本
cnpm outdated

# 检查环境配置是否正常(cnpm 独有)
cnpm doctor

代理配置

bash
# 设置 HTTP 代理
cnpm config set proxy http://127.0.0.1:7890

# 设置 HTTPS 代理
cnpm config set https-proxy http://127.0.0.1:7890

# 取消代理
cnpm config delete proxy
cnpm config delete https-proxy

CI/CD 安装

bash
# CI/CD 环境推荐使用 npm ci(精确安装)
# cnpm 没有 ci 命令,建议在 CI/CD 中使用 npm ci + 镜像源配置
npm ci --registry=https://registry.npmmirror.com

为什么 CI/CD 推荐用 npm ci?

特性npm cicnpm install
lock 文件严格按 lock 安装,不修改可能更新 lock 文件
node_modules先删除再安装增量安装
速度更快较慢
适用场景CI/CD、自动化本地开发

通俗解释

  • npm ci:严格安装,完全按照 lock 文件安装,不更新任何文件,适合 CI/CD 环境确保一致性
  • cnpm install:智能安装,会根据 package.json 自动更新 lock 文件,适合本地开发

缓存管理

bash
# 查看缓存目录路径
cnpm config get cache

# 清除所有缓存(--force 表示强制执行,不提示确认)
cnpm cache clean --force

# 验证缓存完整性(检查缓存是否损坏)
cnpm cache verify

缓存的作用

  • 提升安装速度:已下载的包会缓存,下次安装直接从缓存读取
  • 离线安装:有缓存时可以离线安装(部分场景)
  • 减少网络请求:避免重复下载相同的包

什么时候需要清理缓存?

  • 安装失败且提示缓存相关错误
  • 缓存占用空间过大
  • 切换镜像源后需要清理旧缓存

cnpm 的局限性

锁文件兼容性

cnpm 从 7.x 开始支持生成 package-lock.json,9.x 已完全兼容 npm 的锁文件格式。但 6.x 及更早版本不生成锁文件,如果使用旧版本:

  • 不同时间安装可能得到不同版本的依赖
  • 团队成员的依赖版本可能不一致
  • CI/CD 环境无法保证一致性

部分命令可能有差异

某些 npm 的新特性 cnpm 可能支持较慢。

官方推荐迁移

cnpm 官方建议关注 npmmirror 的最新动态,推荐使用原生 npm/yarn/pnpm 配合镜像源使用。


更推荐的方式:直接配置 npm 镜像

与其安装 cnpm,更推荐直接修改 npm 的镜像源,这样仍然使用 npm 命令,同时享受国内加速:

bash
# 方式一:修改 npm 配置(永久生效)
npm config set registry https://registry.npmmirror.com

# 方式二:使用 nrm 管理多个镜像源(推荐,可快速切换)
npm install -g nrm
nrm ls                        # 查看可用镜像源
nrm use taobao                # 切换到淘宝镜像

# 方式三:项目级 .npmrc(只对当前项目生效)
echo 'registry=https://registry.npmmirror.com' > .npmrc

修改后,所有 npm install 都会自动走淘宝镜像。

如需恢复官方源:

bash
# 恢复 npm 官方源
npm config set registry https://registry.npmjs.org

# 或通过 nrm 切换
nrm use npm

使用 nrm 管理镜像源

nrm 是一个 npm 镜像源管理工具,可以快速切换不同的镜像。详见 nrm 常用命令

bash
# 安装 nrm
npm install -g nrm

# 切换到淘宝镜像
nrm use taobao

# 切换回官方源
nrm use npm

常见问题

cnpm 和 npm 混用导致问题

混用 cnpm 和 npm 可能出现以下症状:

  • node_modules 中的依赖版本与 package-lock.json 不一致
  • 运行时报找不到模块(Cannot find module
  • 同一项目不同成员安装的依赖版本不同
  • 构建产物在不同环境下行为不一致

原因:cnpm 和 npm 的依赖解析策略、缓存目录、锁文件写入方式存在差异。

建议:选定一个包管理器后不要混用。如果已经混用:

bash
# 清理后重新安装
rm -rf node_modules
rm package-lock.json       # 如果锁文件已损坏
npm install                # 用 npm 重新生成 lock 文件

# 或切换到 pnpm(推荐,速度快、磁盘省)
rm -rf node_modules
rm package-lock.json
pnpm install               # pnpm 会生成 pnpm-lock.yaml

项目中已配置 .npmrc

如果项目中已有 .npmrc 文件配置了镜像源,不需要额外使用 cnpm:

bash
# .npmrc
registry=https://registry.npmmirror.com

此时直接用 npm install 即可。

cnpm 安装后命令找不到

bash
# 检查全局安装路径
npm config get prefix

# 确保路径在 PATH 中(Linux/macOS)
export PATH=$(npm config get prefix)/bin:$PATH

# 或使用 npx 代替(临时使用)
npx cnpm install

cnpm 安装的包在 npm 中看不到

cnpm 和 npm 使用不同的缓存目录,但依赖都安装在同一个 node_modules 中,一般不影响使用。

bash
# 查看各自的缓存目录
npm config get cache
cnpm config get cache

推荐的包管理器选择

场景推荐原因
国内开发pnpm + npmmirror 镜像速度快、磁盘省、无幽灵依赖
已有 npm 项目npm + npmmirror 镜像兼容性好
Monorepopnpm原生工作空间支持
需要兼容旧项目npm最稳定

💡 使用 pnpm + 淘宝镜像时,node-sass 等包含二进制文件的包需要额外配置二进制镜像:

bash
# .npmrc
sass_binary_site=https://npmmirror.com/mirrors/node-sass

不推荐使用 cnpm 的原因:

  • 旧版本(6.x 及以下)不生成锁文件,依赖不可控(7.x 起已改善)
  • 与 npm/pnpm/yarn 混用容易出问题
  • 直接配置镜像源即可达到同样效果

参考

个人学习笔记,部分内容借助 AI 辅助整理,仅供查阅参考,请以官方文档为准