npx

1 npx 是什么

npx 是 npm v5.2.0 引入的命令,即 npm 自带的命令。

2 npx 有什么作用

通过 npx 我们可以直接执行依赖包里面的二进制文件,而无需给出依赖包路径,如:

1
npx webpack --config webpack.prod.js

没有 npx 时,当我们想在命令行直接使用依赖包时,需要给出依赖包的路径,如:

1
.\node_modules\.bin\webpack --config webpack.prod.js

3 npx 典型使用场景

3.1 一次性使用的命令

对于一些一次性命令,可以直接使用npx,如:

1
npx create-react-app my-app

指定模块运行版本,如下面命令指定 node 的 0.12.8 版本来运行命令 :

1
npx node@0.12.8 -v

4 npx 原理

npx 运行时,会从 node_modeule/.bin 路径和环境变量 $PATH 中,检测命令是否存在,当不存在时,会直接帮我们安装。

npx 甚至支持运行远程仓库的可执行文件,如:

1
npx github:piuccio/cowsay hello

再比如 npx http-server 可以一句话帮你开启一个静态服务器:

1
npx http-server

5 npx 高级用法

5.1 强制使用本地模块

使用 --no-install 参数,不下载远程模块, 强制使用本地模块,当本地不存在此模块时,会报错。

1
npx --no-install http-server

5.2 强制安装远程模块

使用 --ignore-existing 参数忽略本地同名模块,强制使用远程模块。

1
npx --ignore-existing create-react-app my-react-app

5.3 指定模块的安装版本

使用 -p 参数可以指定 npx 所要安装的模块。下面命令先安装 node ,再执行node -v

1
npx -p node@0.12.8 node -v 

-p 参数还可以安装多个模块。

1
npx -p lolcatjs -p cowsay [command]

5.4 执行多条命令

如果 npx 安装多个模块,默认情况下,所执行的命令之中,只有第一个可执行项会使用 npx 安装的模块,后面的可执行项还是会交给 Shell 解释。

1
2
npx -p lolcatjs -p cowsay 'cowsay hello | lolcatjs'
# 报错

-c参数可以将所有命令都用 npx 解释。有了它,下面代码就可以正常执行了。

1
npx -p lolcatjs -p cowsay -c 'cowsay hello | lolcatjs'

参考:

https://blog.csdn.net/csdn_yudong/article/details/81670477

http://www.ruanyifeng.com/blog/2019/02/npx.html