
npx主要解决了一下几个问题:
- 局部安装的包没有设置环境变量,不能很方便的在本项目目录下和全局其他任意路径下使用
- 全局安装包在全局任何位置都可用,但是占用本机存储,而且项目中一旦引用了全局的模块,版本容易不一致.
这个都是项目中很常见的问题,我们很多时候不得不在每个项目重复安装相同的模块包,为了在自己的项目中方便使用;实在为了方便全局安装了,一旦项目中引用,多人协作的时候依赖版本可能会不一致…针对这些问题,我们今天说一下npx这个安装工具的使用…
npx
- 在 npm@5.2.0 版本之后,增加 npx 以提供来一些辅助的功能,全名 Node Package Executor - node的包执行工具
手动安装 - 万一不能用,就要手动安装一下。
npm install -g npx
=====================================================================================================
用途1:调用局部安装包
npx 想要解决的主要问题,就是调用项目内部安装的模块。比如,项目内部安装了测试工具 http-server
- 局部安装http-server
npm install -D http-server - 一般来说,调用 http-server ,只能在项目脚本和 package.json 的scripts字段里面, 如果想在命令行下调用,必须像下面这样。
项目的根目录下执行
$ node-modules/.bin/http-server -p 9999
script脚本
1 | { |
npx 就是想解决这个问题,让项目内部安装的模块用起来更方便,只要像下面这样调用就行了
npx http-server -p 9999

- npx 的原理很简单,就是运行的时候,会到
node_modules/.bin路径和环境变量$PATH里面,检查命令是否存在。
由于 npx 会检查环境变量$PATH,所以系统命令也可以调用。
优点:
- 任何command都通过npx在machine任何位置使用
=====================================================================================================
用途2:避免全局安装模块,执行一次性命令

对于一些工具,比如create-react-app,它们有些特性:
- 可能很久才会被使用一次
- 安装包会很大
全局安装劣势:
占用本机空间
包安装在Node安装目录下的node_modules文件夹中
版本问题
假如一个项目中的某一个dependency是全局安装的,也就意味着不同的开发人员使用的这个dependency版本完全基于本地的版本,也就会导致不同的开发人员使用不同的版本
再也不需全局安装任何工具只需要npx
npx create-react-app my-react
- npx 可以运行它create-react-app,而且不进行全局安装。
- 下载到一个临时目录,使用以后再删除。
- 以后再次执行上面的命令,会重新下载
优点:
- 不会污染本机的存储
- 永远使用最新版本的dependency
=====================================================================================================
用途3:帮助切换版本
npx的-p选项允许您指定要安装的包,并将其添加到正在运行的$PATH中
- 当你没有nvm的时候,帮你方便的切换node版本,假设你本机安装的node版本是node@8,但是你的项目可能需要使用使用node@6做测试,如果你有nvm,可以使用nvm use v8.11,其实npx也可以帮你做成。
1 | 使用npx -p node@6 npm run test: |