npx
目录
npx 是 npm 的一个工具,主要解决 3 个问题
bash
npx -- <pkg>[@<version>] [args...]
npx --package=<pkg>[@<version>] -- <cmd> [args...]
npx -c '<cmd> [args...]'
npx --package=foo -c '<cmd> [args...]'
1. 调用项目中的命令
很多模块都有自己的命令行工具,比如 vite 的命令行工具实际上存在于./node_modules/.bin/
中,如下:
bash
ll ./node_modules/.bin/vite
lrwxrwxrwx 1 xxx xxx 19 3月 19 21:40 ./node_modules/.bin/vite -> ../vite/bin/vite.js
执行./node_modules/.bin/vite
显然是个麻烦的方式,所以 npx 解决了这个问题。
npx 的原理很简单,就是运行的时候,会到 node_modules/.bin 路径和环境变量$PATH 里面,检查命令是否存在。
bash
npx vite
因为 vite 会检查$PATH
所以诸如ls
rm
mv
等命令,npx 都可以执行。
bash
npx ls
2. 临时安装依赖
如果本地没有安装某个依赖,调用 npx 的时候会自动去下载,并存储到临时目录,用完后会自动删除。
bash
npx prisma
npx http-server
注意,npx 在下载时默认调用 npm,如果你常用 pnpm 或者 yarn,可以考虑使用
pnpm dlx
或者yarn dlx
3. 版本管理
使用 npx 可以指定 node 版本和包版本
bash
npx uglify-js@3.1.0 main.js -o ./dist/main.js
npx node@0.12.8 node -v
- 如果需要指定多个版本时,需要用
-p
来分隔每个版本 - 如果需要 npx 执行多条命令,则需要用
-c
参数
bash
npx -p lolcatjs -p cowsay -c 'cowsay hello | lolcatjs'
npx 甚至还能执行 github 上面的模块源码
bash
# 执行仓库代码
npx github:piuccio/cowsay hello