npm npx yarn

目录

对比

1、npm

[① 启动 npm 这个命令本身 ✅依赖 PATH](#① 启动 npm 这个命令本身 ✅依赖 PATH)

[② npm 运行本地项目脚本 npm run xxx](#② npm 运行本地项目脚本 npm run xxx)

[③ npm 全局安装的包(npm install -g xxx)](#③ npm 全局安装的包(npm install -g xxx))

2、npx

[3、yarn(yarn v1)](#3、yarn(yarn v1))

[① 直接敲 yarn 启动 yarn 本身 ✅依赖 PATH](#① 直接敲 yarn 启动 yarn 本身 ✅依赖 PATH)

[② yarn 运行项目内命令 yarn xxx](#② yarn 运行项目内命令 yarn xxx)

[③ yarn 全局包 yarn global add xxx](#③ yarn 全局包 yarn global add xxx)

[D:\program files\nodejs\node_modules\npm VS C:\Users\ding.dongyang\AppData\Roaming\npm](#D:\program files\nodejs\node_modules\npm VS C:\Users\ding.dongyang\AppData\Roaming\npm)

yarn报错解决

总结


对比

npm:包管理器,管装包,管脚本;全局命令靠系统PATH。

npx:执行器,本体要PATH,但是找第三方包不走系统PATH;临时跑工具神器。

yarn:包管理器;对标npx,直接敲yarn命令本身需要PATH

|------|------------------------|---------------------------------------|------------------------|
| 工具 | 执行工具本身(敲 npm/npx/yarn) | 运行项目本地包命令 | 直接调用全局安装的第三方包 |
| npm | 依赖 PATH | npm run:进程内临时 PATH,不依赖系统 PATH | 依赖系统 PATH |
| npx | 依赖 PATH(npx 本体) | 内部找 node_modules/.bin,不依赖系统 PATH | 内部找全局目录,不依赖系统 PATH |
| yarn | 依赖 PATH | 内部读取 node_modules/.bin,不依赖系统 PATH | 依赖系统 PATH |

PATH:操作系统环境变量,系统在这些文件夹里找可执行程序。 重点区分两件事:工具本身能不能启动工具内部找包命令,二者 PATH 规则不一样。

1、npm

① 启动 npm 这个命令本身 ✅依赖 PATH

终端敲 npm,是操作系统去 PATH 找 npm.cmd

Node 安装时已经自动把 node/npm 路径写入 PATH,所以一般直接能用。

② npm 运行本地项目脚本 npm run xxx

不依赖系统永久 PATH 。 npm 执行脚本的时候,会临时把项目 node_modules/.bin 加到当前进程的 PATH,脚本执行完就消失。 所以 scripts 里可以直接写 eslint、vite,不用 npx,不用全局安装。

③ npm 全局安装的包(npm install -g xxx

你直接在终端敲 xxx(比如 yarn),依赖系统 PATH。 系统要在 PATH 里找到 npm 全局 bin 目录,才能识别命令;找不到就报 "无法识别"。

2、npx

npx 是 npm 的子命令,npx 本身能跑,依赖 PATH(因为 npx 实际是 npx.cmd) ⚠️但是:npx 去查找要执行的 npm 包命令,不依赖系统 PATH

举例子:

  • npx yarn --version
  1. 首先系统要能找到 npx 命令(依赖 PATH);
  2. 找到 npx 程序之后,npx 自己内部逻辑:优先项目node_modules/.bin → npm 全局目录 → 远程下载。这一步不走操作系统 PATH 搜索

👉总结:

  • 启动 npx 工具本身:✅依赖 PATH
  • npx 查找要运行的第三方包命令:❌不依赖系统 PATH

3、yarn(yarn v1)

① 直接敲 yarn 启动 yarn 本身 ✅依赖 PATH

  • 如果是 npm install -g yarn 安装:需要 npm 全局 bin 目录进 PATH,否则报错无法识别。
  • 如果用corepack enable:corepack 会注册 yarn 的代理脚本到 PATH,所以可以直接执行 yarn。

② yarn 运行项目内命令 yarn xxx

yarn 内部会读取项目node_modules/.bin不需要系统 PATH 有这个包,和 npm run 逻辑类似。

③ yarn 全局包 yarn global add xxx

直接终端敲这个全局命令,依然需要全局目录加入系统 PATH。

1.npx yarn --version

系统依靠PATH找到npx本体;npx内部自己找yarn,不走系统PATH;全局没有就网上临时下载,所以可以执行成功

2.yarn --version

交给操作系统,去系统PATH里找yarn.cmd,找不到直接报错

3.npm run/yarn xxx

工具启动后,会把node_moudles/.bin加到当前进程临时PATH,只本次命令生效,不会改动电脑系统环境变量

D:\program files\nodejs\node_modules\npm VS C:\Users\ding.dongyang\AppData\Roaming\npm

|---------------------------|-----------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------|
| 目录 | D:\program files\nodejs\node_modules\npm | C:\Users\ding.dongyang\AppData\Roaming\npm |
| 是什么 | Node安装包自带的npm本体源码 | npm全局安装(-g)的输出目录(prefix) |
| 来源 | 安装node.js的时候复制过来的,属于node安装程序自带文件 | 执行npm install -g xxx自动生成,按Windows用户隔离,每个用户独立一份 |
| 存放内容 | npm命令行工具本身的源代码;npm.cmd,npx.cmd在这里 | 1.全局包的可执行脚本:yarn.cmd,vue.cmd等 2.子文件夹node_modules;存放-g安装的第三方源码 |
| 全局安装npm install -g yarn放哪 | 不会放这里 | 放到这里。 脚本:C:\Users\ding.dongyang\AppData\Roaming\npm\yarn.cmd 源码:C:\Users\ding.dongyang\AppData\Roaming\npm\node_modules\yarn |
| 会不会随npm-g升级被修改 | 会;执行npm install -g npm会更新这里的npm本体文件 | 存放第三方全局包,不修改nodejs本体 |
| PATH作用 | 系统PATH配置D:\program files\nodejs,用来找到npm.cmd | 这个目录必须加到PATH,才能敲yarn,vue等全局命令 |

一句话区分:

  • D:\program files\nodejs\node_modules\npmnpm 自己的本体,跟着 node 安装来的。
  • C:\Users\ding.dongyang\AppData\Roaming\npm所有‑g全局包的存放地,yarn、vue-cli 等全局工具都装在这里。

确认全局当前全局prefix(真实全局安装目录)

npm config get prefix

Windows默认输出就是

C:\Users\ding.dongyang\AppData\Roaming\npm

npm install -g xxx,全部安装到这个 prefix 目录下,不会装到 D 盘 nodejs 目录npm

yarn报错解决

npm install‑g yarn成功,但敲yarn --version找不到

  1. yarn 被安装到:C:\Users\ding.dongyang\AppData\Roaming\npm,里面生成了yarn.cmd

  2. 系统 PATH 里只有 D:\program files\nodejs没有上面这个 C 盘路径

  3. PowerShell 在 PATH 列表里找不到yarn.cmd,直接报错 "无法识别"

  4. 但是npx yarn --version可以跑:npx 自己内部逻辑会读取 prefix 目录去找 yarn,不走系统 PATH。

1.使用npx yarn

2.把 npm 全局目录加到 PATH 环境变量

  • Windows 搜索:编辑环境变量 →【环境变量】
  • 用户变量 找到 Path(不要去系统变量,用户变量即可)→编辑
  • 新建一条,粘贴上面npm config get prefix输出的路径,示例:

C:\Users\xxx\AppData\Roaming\npm

  • 简写也可以:%APPDATA%\npm

总结

yran命令依赖PATH,需要将路径加入到PATH里,否则会找不到

npx不依赖PATH,找不到会下载

相关推荐
菜冻鱼1 小时前
Python-pytorch-模型保存与加载
开发语言·人工智能·pytorch·python·深度学习·机器学习
四千岁1 小时前
RAG系统中的分块
前端·javascript·后端
骇客野人1 小时前
Java SSO 统一认证方案
java·开发语言
START_GAME2 小时前
MSSQL$SQL2016
java·服务器·前端
Captaincc2 小时前
Show me your works & token -稀土掘金上线内测作品广场和用量统计
前端·掘金社区·vibecoding
进击的明明2 小时前
闭包:JavaScript里的“随身背包” 🎒
前端·javascript·面试
Code额2 小时前
Python 连接 DeepSeek API,OpenAI
开发语言·python·ai·ai编程
-凌凌漆-2 小时前
【freertos】Task创建(v2)
java·开发语言·算法
牛油果子哥q3 小时前
C++内存模型与深浅拷贝万字详解:栈堆静态内存布局、深浅拷贝底层差异、内存泄漏根治、拷贝崩溃踩坑、手写深拷贝实战
java·开发语言·c++