Atri Website

Back

npm 与 npx:从一次报错说清楚两者的区别#

本文起因是一次真实的踩坑:在使用 vibe-kanban 之后,我下意识地输入了 npx uninstall vibe-kanban 来卸载它,结果得到一条莫名其妙的报错。深究之后才意识到——我把 npm 和 npx 的职责完全搞混了。

1. 起因:一条报错#

最近在试用 vibe-kanban,按官方文档用 npx vibe-kanban 启动了它。用完之后想卸载,于是很自然地输入了:

npx uninstall vibe-kanban
bash

结果是:

npm error could not determine executable to run
plaintext

一脸茫然。翻了文档才意识到问题所在:npx 根本没有 uninstall 这个概念。它不是包管理器,它是包执行器,两者的职责完全不同。


2. npm 是什么#

npm(Node Package Manager)是 Node.js 的官方包管理器,安装 Node.js 时会自动附带。它的核心职责是管理包——安装、更新、卸载,以及维护项目的依赖关系。

2.1 工作模型#

npm 仓库(registry.npmjs.org)
         ↓ npm install
  本地安装 → ./node_modules/        (项目内可用)
  全局安装 → ~/.npm/(加 -g 标志)  (系统全局可用)
plaintext

2.2 常用命令#

命令作用
npm install <pkg>安装到当前项目
npm install -g <pkg>全局安装
npm uninstall <pkg>卸载本地包
npm uninstall -g <pkg>卸载全局包
npm update <pkg>更新包
npm list -g --depth=0查看已全局安装的包
npm cache clean --force清除 npm 缓存

npm 的本质:先装,再用。不装就用不了。


3. npx 是什么#

npx(Node Package eXecute)是 npm 5.2.0 起附带的执行工具。它的核心能力只有一个:

不安装,直接运行。

3.1 工作原理#

执行 npx <pkg>

本地 node_modules/.bin/ 中有? → 直接运行
       ↓ 没有
全局 npm 环境中有? → 直接运行
       ↓ 没有
从 npm 仓库下载到本地缓存

运行(运行结束,不写入 node_modules,不修改 package.json)
plaintext

关键点:

  • 不修改项目依赖package.json 不变)
  • 不在 node_modules 留下文件
  • 但会在 npm 缓存目录保留副本(下次直接从缓存读取,不重复下载)

3.2 npm 与 npx 的核心区别#

维度npmnpx
核心职责管理包(安装/卸载/更新)执行包(运行)
运行前提必须先安装无需安装
是否修改依赖
适合场景项目依赖、长期使用的全局工具一次性工具、脚手架
”卸载”操作npm uninstall无(从未”安装”过)

4. 以 vibe-kanban 为例#

vibe-kanban 是一个 AI 驱动的看板工具,官方推荐通过 npx 启动:

npx vibe-kanban
bash

4.1 执行这条命令时发生了什么#

npx vibe-kanban

本地/全局未找到 → 从 npm 仓库拉取缓存

启动 vibe-kanban v0.1.23

监听端口 :1361(预览代理 :1362)

自动打开浏览器
plaintext

实际启动日志:

Starting vibe-kanban v0.1.23...
INFO server: Main server on :1361, Preview proxy on :1362
INFO server: Opening browser...
INFO server::tunnel: Connecting relay control channel ...
plaintext

整个过程没有修改任何项目文件,node_modules 里也看不到它。

4.2 为什么不用 npm install -g 安装?#

方式优点缺点
npx vibe-kanban始终拉取最新版;不污染全局环境首次启动需要下载
npm install -g vibe-kanban启动快(已缓存)需手动更新;全局环境越装越乱

对于工具类应用(CLI、看板、脚手架),npx 是更推荐的方式——用完即走,版本自动最新。

4.3 我踩的坑:错误示范#

# ❌ 错误:npx 不是包管理器,没有 uninstall 子命令
npx uninstall vibe-kanban
# npm error could not determine executable to run

# ✅ 卸载已安装的包要用 npm
npm uninstall vibe-kanban        # 卸载本地安装
npm uninstall -g vibe-kanban     # 卸载全局安装
bash

由于 vibe-kanban 是通过 npx 运行的,它从未被”安装”过,自然也无法被”卸载”。正确的处理方式是清除缓存(见第 6 节)。


5. npx 的其他常见场景#

npx 最典型的使用场景是脚手架一次性 CLI 工具

命令用途
npx create-react-app my-app创建 React 项目
npx create-next-app@latest创建 Next.js 项目
npx create-vite创建 Vite 项目
npx serve .在当前目录启动静态文件服务
npx http-server快速起一个 HTTP 服务
npx prettier --write .一次性格式化代码,不全局安装
npx vibe-kanban启动 vibe-kanban 看板工具

判断原则:如果某个工具只偶尔用一次,或者不想让它常驻全局环境,就用 npx;如果是每天都要用的工具(如 eslinttypescript),考虑 npm install -g 或装进项目依赖。


6. 如何清除 npx 缓存#

npx 运行过的包会缓存在本地,下次无需重新下载。若想彻底清理:

6.1 清除全部 npm/npx 缓存#

npm cache clean --force
bash

6.2 查看缓存所在目录#

npm config get cache
bash

默认路径:

Windows:     C:\Users\<用户名>\AppData\Local\npm-cache
macOS/Linux: ~/.npm
plaintext

6.3 清理 vibe-kanban 的运行时数据#

vibe-kanban 运行时会在临时目录生成工作区文件,可手动删除:

Windows:     C:\Users\<用户名>\AppData\Local\Temp\vibe-kanban\
macOS/Linux: /tmp/vibe-kanban/
plaintext

注意:清除缓存并不等于”卸载”。下次执行 npx vibe-kanban 时,它会重新从 npm 仓库下载。


7. 经验总结#

  1. npm 是包管理器,负责”装”和”卸”;npx 是执行器,负责”运行”——两者职责不同,命令不能混用
  2. npx <pkg> 运行的包不会写入 node_modules 或全局环境,因此也没有”卸载”这个操作
  3. 工具类 CLI(脚手架、看板、临时服务器)优先用 npx,省去版本管理的麻烦,且始终是最新版
  4. 遇到 npm error could not determine executable to run,大概率是把 npx 当成了包管理器——检查是否应该换成 npm 命令
  5. npm cache clean --force 可清理 npx 缓存,但下次运行时会重新下载
  6. 如果某个工具每天都在用,npm install -g 全局安装更合适;如果只是偶尔跑一次,npx 更干净
npm 与 npx:从一次报错说清楚两者的区别
Author Juyao Huang
Published at March 4, 2026
Comment seems to stuck. Try to refresh?✨