[nodejs] npm vs npx

0 序

  • 最近在使用、研究 AI Agents 时,发现安装 skill 的方式千奇百怪。其中有一种就是 npx命令。故此,了解一下 npx,及与 npm 的渊源。
npx skills add https://clawhub.ai/ivangdavila/skills/summarizer
openclaw skills install @ivangdavila/summarizer
clawhub install ivangdavila/summarizer`

1 npm vs npx

npx 简述

  • npxnpm 5.2+ 自带的工具,不是【独立安装包】。

核心:临时执行包,不一定安装到本地

  • 作用:
  1. 优先调用本地 node_modules/.bin/ 下的命令;若本地找不到,就临时下载该包运行,运行完直接删除,不污染【项目依赖】
  2. 可以直接执行远程包、GitHub包,不用手动 npm install
  3. 语法:npx <package> [args]

注意:npx不会把包写入package.json依赖,只是【一次性调用】。

npm、npx 异同对比

维度 npm npx
定位 包管理器:安装、管理依赖 包执行器:运行包的二进制命令
主要命令 npm install / uninstall / list npx xxx 直接运行命令
包存放 安装到 node_modules,写入 package.json 优先本地node_modules;没有就临时下载缓存执行,执行完丢弃,默认不写入依赖
目的 把包保存到项目/全局,供多次使用 一次性运行工具脚本,不想永久安装
修改文件 会改 package.jsonpackage‑lock.json 默认不修改项目任何配置文件
全局行为 npm install -g 安装到系统全局 npx -p pkg 只是临时,不会装成全局命令

通俗例子

# npm:安装到本地,持久保存
npm install create‑react‑app
npx create‑react‑app myapp   # 此时npx调用本地已经装好的

# npx:不安装,直接跑,用完就扔
npx create‑react‑app myapp

场景关联: 安装 skill

npx skills add https://xxx/skills/summarizer

这里:

  1. npx 临时拉取 skills 这个npm包;
  2. 执行它的 add 子命令;
  3. skills 工具本身不会留在你的项目依赖
  4. 但该工具内部逻辑会把skill文件拷贝到磁盘(这是工具业务行为,不是npx干的)。

关键点区分:

  • npx 只管启动工具
  • 工具内部自己会下载/写入技能文件,这是 skills 包做的,不是npx。

容易踩坑

  1. npx每次可能拉最新版本;想锁版本:npx pkg@1.2.3
  2. npx有缓存,不是每次都重新下载;
  3. npx不会把包加入package.json,只负责运行。

总结

  • npm:管安装管理依赖
  • npx:管执行命令,可临时跑包不用安装

2 pnpm exec / npx / npm exec 的细微差别

  • 关键区分:
  • npxnpm exec既能跑本地 bin,也能【自动临时下载】远程包执行
  • pnpm exec只跑项目本地已安装的 bin,不会自动下载远程包;临时远程包要用 pnpm dlx
命令 出处 是否自动下载远程包 别名 关键行为 适用场景
npx npm 5.2+ 独立二进制 ✅ 本地找不到就临时下载缓存执行 参数必须放位置参数前面;--分隔传参给子命令npm 日常脚手架、临时工具,历史遗留广泛使用
npm exec(别名 npm x) npm7+ 内置子命令 ✅,CI 非交互会自动 yes;支持--workspace工作空间 npm x 参数解析更严谨,支持--package多包注入,原生 workspace 支持 CI、monorepo,官方现代推荐方式
pnpm exec pnpm 内置 ❌ 不会下载远程包;本地不存在直接报错 可省略 exec:pnpm cmd 仅把node_modules/.bin注入 PATH,只执行项目已安装二进制pnpm 执行项目内已装依赖(jest/eslint 等)
pnpm dlx pnpm 内置 ✅ 临时下载远程包,pnpm 的 npx 等价物 旧版pnpx已废弃 复用 pnpm 全局内容寻址缓存,速度更快 pnpm 环境下运行脚手架、一次性工具

Y 推荐文献

X 参考文献

posted @ 2026-08-24 12:09  千千寰宇  阅读(15)  评论(0)    收藏  举报