前言
最近在使用 package.json
的 script 运行指令时,发现通过 npm 包安装的部分指令无法使用(比如 docsify 指令),原因是因为 docsify-cli
当作 devDependence
依赖项安装至项目中了,这与在终端上直接运行 docsify 指令一样,因为全局环境并没有对应的指令,因此会提示找不到对应的指令,这时候就能用上 npx 了。
简介 npx
npx 是自 npm5.2 之后发布的一个命令,用于执行 node_modules/.bin
内的可执行命令,其主要解决的就是前言中描述的问题:能够直接执行项目内安装的模块的命令。
npx 的执行流程如下:
- 去
node_modules/.bin
路径检查 npx 后面的命令是否存在,找到之后执行; - 找不到,就去环境变量 $PATH 里面,检查 npx 后面的命令是否存在,找到之后执行;
- 还是找不到,自动下载一个临时的依赖包最新版本在一个临时目录,然后再运行命令,运行完之后删除,不污染全局环境。
使用 npx 能够减少无用的全局模块的安装,比如
npx http-server
可以在当前目录启动一个 Web 服务,即使没有安装对应的包
npx 常用参数
–no-install 参数
如果想让 npx 强制使用本地模块,不下载远程模块,可以使用 –no-install 参数。如果本地不存在该模块,就会报错。
1 | npx --no-install http-server |
–ignore-existing 参数
与上面相反,此命令是强制忽略本地的同名模块,强制安装使用远程模块。比如,本地已经全局安装了 create-react-app,但还是想使用远程模块,就用这个参数。
1 | npx --ignore-existing create-react-app my-react-app |