六维教程

NPM 全局包与NPX命令

前几篇教程我们安装的依赖都是项目本地的 —— 每个项目有自己独立的 node_modules

但有时候你需要的不是“某个库”,而是一个命令行工具,比如:

  • nodemon —— 文件变更时自动重启 Node 服务
  • create-react-app —— 一键创建 React 项目
  • eslint —— 检查代码规范

这些工具你希望在任何目录下都能直接敲命令运行,而不是每个项目里都装一份。

这时候就需要 全局安装

全局安装(-g)

什么是全局安装

全局安装就是把包安装到系统目录,安装后它的命令行工具可以在任何位置直接调用。

# 全局安装 nodemon
npm install -g nodemon

安装完成后,你就可以在终端任意目录下直接敲:

nodemon server.js

系统会找到全局安装的 nodemon 并执行。

查看全局安装的包

# 列出所有全局包
npm list -g --depth=0

卸载全局包

npm uninstall -g nodemon

什么时候应该全局安装

应该全局安装 应该本地安装
命令行工具,需要在任意目录使用 项目代码中 import/require 的库
每个项目版本需求一致 不同项目可能用不同版本
例如:nodemonpm2yarn 例如:reactexpresslodash

核心判断标准:这个包是“工具”还是“代码依赖”?

  • 工具 → 全局安装(命令行里用)
  • 代码依赖 → 本地安装(代码里 import)

NPX命令

NPX 是什么

NPX(Node Package Execute) 是 NPM 5.2.0 及以上版本自动附带的工具,可以理解为 “包执行器”

# 检查是否已安装
npx --version

它的核心能力是:不安装包,直接执行它

没有 NPX 的时候

在 NPX 出现之前,如果你想运行一个命令行工具(比如 create-react-app),通常有两种方式:

方式 命令 缺点
全局安装 1 npm i -g create-react-app
2 create-react-app my-app
占用磁盘空间;版本管理混乱;不同项目可能依赖不同版本
本地安装 + 路径调用 1 npm i create-react-app
2 ./node_modules/.bin/create-react-app my-app
路径繁琐;每次都要输入长路径

NPX 的解决方案是:直接运行,无需安装

npx create-react-app my-app

执行流程

执行 npx create-react-app my-app 时,NPX 做的事情是:

  1. 查找本地:在当前项目的 ./node_modules/.bin/ 中查找是否存在 create-react-app
  2. 查找全局:如果本地没有,查找全局安装目录
  3. 临时下载:如果都没有,从 npm 仓库临时下载到缓存目录并执行

提示npx 会自动向上查找包含 node_modules 的最近项目根目录。即使你在子文件夹中执行命令,它也能正确找到项目根目录下的依赖。

临时下载的缓存位置

npx 需要从远程下载包时,会将其存放在 Node.js 的全局缓存目录中:

操作系统 缓存路径
Windows C:\Users\你的用户名\AppData\Local\npm-cache\_npx
macOS / Linux ~/.npm/_npx

注意:在较新版本中(npm 7.0+),npx保留缓存,第二次执行相同命令时直接读取,速度更快。如需清空缓存,可执行 npm cache clean --force

NPX 使用场景

执行项目本地的命令(最常用)

在项目中,当你想查看 webpack 版本时,传统方式需要敲完整路径:

# 传统方式(繁琐)
./node_modules/.bin/webpack -v

# NPX 方式(简洁)
npx webpack -v

npx 会自动在 node_modules/.bin 中查找命令并执行,省去了写完整路径的麻烦。

创建新项目(避免全局安装)

# 创建一个 React 项目
npx create-react-app my-app

# 创建一个 Vite 项目
npx create-vite my-vue-app

# 创建 Next.js 项目
npx create-next-app my-next-app

# 指定版本
npx create-react-app@5.0.0 my-app

用 npx 的好处是:你总是用最新的脚手架,不会因为全局装了旧版本而建出老项目。

临时切换包的版本

测试某个工具的特定版本是否兼容:

# 使用 ESLint 的特定版本
npx eslint@7.32.0 app.js

# 测试不同版本的 webpack 打包结果
npx webpack@4 build
npx webpack@5 build

# 测试不同版本的 TypeScript 编译结果
npx typescript@4.9.5 tsc --version
npx typescript@5.3.0 tsc --version

不用切换全局版本,也不用每个版本都装一遍。

执行一次性脚本

直接运行 GitHub Gist 上的脚本:

npx https://gist.github.com/username/script.js

或运行项目初始化工具:

# 生成开源协议文件
npx license MIT

# 生成 README 文件
npx readme-generator

npm create:创建项目的快捷方式

npm createnpx 的别名,专门用于执行项目脚手架:

# 创建 Vue 项目
npm create vue@latest

# 创建 Vite 项目
npm create vite@latest

NPX 常用参数

参数 说明 示例
-v, --version 显示 NPX 版本号 npx -v
-h, --help 显示帮助信息 npx -h
--no-install 强制只使用本地包,不存在则报错 npx --no-install webpack -v
--ignore-existing 强制忽略本地包,直接从远程下载 npx --ignore-existing eslint
-p, --package <pkg> 指定包名(包名与命令名不同时使用) npx -p @vue/cli vue create my-app
-c, --call <cmd> 将后面内容作为完整命令传递(支持管道符) npx -c "eslint . --fix"
--yes 跳过下载确认提示(自动化脚本) npx --yes create-react-app my-app
--shell <shell> 指定执行命令时使用的 Shell 环境 npx --shell bash -c "echo hello"

NPX 新手常见问题

Q:npx 需要单独安装吗?

不需要。NPM 5.2+ 自带 npx

Q:npx 下载的包会永远留在电脑里吗?

不会长期占用。npx 会缓存一段时间,但最终会被清理。如果想彻底清掉:npm cache clean --force

Q:npxnpm run 有什么区别?

npm run npx
执行位置 必须在项目根目录 任意目录
依赖来源 node_modules/.bin/ node_modules/.bin/ 或临时下载
需要写入 scripts 需要 不需要
适用场景 项目内的固定任务 临时执行任意命令

Q:那是不是可以完全不用全局安装,全用 npx?

理论上可以,但不实际。像 nodemon 这种你每天可能要执行几十次的工具,每次都等 npx 下载或读缓存,太慢了。高频用全局,低频用 npx

NPX vs 全局安装

对比 全局安装 npx
安装方式 npm i -g xxx 无需安装,临时下载
占用磁盘 永久占用 用完即走(有缓存)
版本管理 只有一个版本,多个项目可能冲突 每次可指定不同版本
全局环境 会污染全局环境 不污染全局环境
适用场景 高频使用的工具(每天用) 偶尔用一次的工具

简单说:天天用的工具全局装,偶尔用一次的工具用 npx。

NPX vs NPM

两者是“管理”和“执行”的分工关系:

对比维度 NPM(包管理器) NPX(包执行器)
职责 安装、管理、卸载包 执行包中的命令
是否保存包 保存到 node_modules/package.json 不保存(除非加 --save),临时使用
执行本地命令 需写完整路径 ./node_modules/.bin/xxx 直接 npx xxx,自动识别
执行未安装包 ❌ 不支持 ✅ 自动下载到临时缓存并执行
典型场景 安装项目依赖(如 npm install vue 执行一次性脚手架或工具

本篇小结

  • 全局安装(-g:装到系统目录,所有项目共用。适合高频命令行工具。
  • npx:临时下载执行,用完不保留。适合偶尔用一次的工具或需要特定版本的场景。
  • 判断标准:工具 vs 依赖;高频 vs 低频。
上一篇
NPM scripts脚本
下一篇
NPM create命令