沐光

记录在前端之路的点点滴滴

npx 的用途

前言

最近在使用 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

参考文档