nodejs npx 命令介绍与使用

介绍

npx 是 npm 5.2.0+ 自带的命令工具(Node.js 配套)

作用:不用提前全局安装,临时下载,直接调用 npm 包,用完就扔。

提示:npx 执行完不会立刻删除文件,只是不会把包安装到系统全局;下载的包会放进缓存目录,留着下次复用,这个缓存文件才需要手动清理。

低版本安装

低版本 npm 需要手动安装:

npm install -g npx

作用

  1. 临时执行包,用完就删:不需要 npm install -g xxx 全局安装,执行完自动删除,不污染本地全局环境。
  2. 调用项目本地 node_modules/.bin 下的脚本:优先使用当前项目里安装的包版本,而不是全局版本。
  3. 指定包版本运行,可以一次性跑不同版本工具。
  4. 执行远程仓库代码(有安全风险)

区分

  • npm:管理包(安装、卸载、版本管理)
  • npx:运行包里的命令

语法

npx [选项] <包名>[@版本] [命令参数]

常用例子

1. 临时运行包(最常用)

# 临时使用 create-react-app 创建项目,不用全局安装
npx create-react-app myapp

执行逻辑:

  1. 检查本机是否已经有 create-react-app
  2. 没有 → 自动下载该包到临时目录
  3. 运行包提供的命令
  4. 运行结束自动删除临时包

2. 指定版本运行

# 使用 node 18 版本的 node 临时执行代码
npx node@18 -e "console.log('hello')"

3. 执行当前项目本地的包(不下载)

当前项目已经 npm install eslint,但没全局装 eslint:

# 直接调用项目 node_modules/.bin/eslint
npx eslint src/index.js

等价于 ./node_modules/.bin/eslint src/index.js,Windows 下是 node_modules\.bin\eslint.cmd

4. 不自动安装,只尝试本地查找(—no-install)

npx --no-install eslint src/index.js

如果本地找不到 eslint,直接报错,不会去网上下载。

5. 强制使用缓存里的包,不更新(—cache)

npx --cache ./mycache create-vite

6. 一次性执行 github 仓库代码(慎用)

npx github:xxx/xxx

注意:会直接拉取远程代码执行,不要执行来源不明仓库。

重要参数

参数 说明
--no-install 禁止自动下载包,只使用本地已存在
--cache <path> 指定 npx 缓存目录
--yes 所有询问自动回答 yes
-p, --package <pkg> 预先安装指定包,多个包逗号分隔
-c "cmd" 多命令执行,支持管道

示例 -p:一次性安装多个包并执行

npx -p lodash -p moment -c "node -e 'const _=require(\"lodash\");console.log(_.VERSION)'"

npx 的查找优先级

  1. 当前目录 node_modules/.bin
  2. 本地缓存
  3. npm 仓库下载临时包执行

好处: 解决全局包版本冲突。比如项目A需要 webpack4,项目B需要 webpack5,不用反复切换全局版本,直接 npx webpack@4。

缓存目录

npx 下载的临时包会缓存,不是每次都重新下载。

  • Linux/macOS:~/.npm/_npx
  • Windows:%AppData%\npm\_npx

清理缓存:

npm cache clean --force

常见坑点

  1. Node.js 版本 < 8.2 / npm <5.2:没有内置 npx,需要手动 npm i -g npx
  2. 包名和命令名不一致:有些包安装后提供的命令名字≠包名,需要用 -p 指定包:
# 包名 @vue/cli,命令是 vue
npx -p @vue/cli vue create demo
  1. 网络问题:国内访问 npm 慢,可以切换淘宝源
npm config set registry [https://registry.npmmirror.com](https://registry.npmmirror.com)
  1. npx 是一次性环境:执行完临时包就销毁,不会保留任何依赖。

补充:pnpm 对应替代品

pnpm:pnpm dlx,功能和 npx 几乎一致。


原文出处:/show_1IXTMOaRWHY.html