npx与npm的区别,使用npx的好处
什么是NPX?
一个npm包执行器,指在提高从npm注册表使用软件包时的体验
NPX是NPM包的执行者。最初,NPX于2017年7月推出.NPX只是一个可以像其他NPM软件包一样安装的NPM软件包。目前,在安装NPM 5.2.0或更高版本时,NPX与NPM捆绑在一起。
使用NPX
使用NPX,您可以运行和执行软件包,而无需在本地或全局安装它们。
使用NPX运行NPM可执行文件时
如果安装了包,NPX将搜索包二进制文件(本地或全局),然后运行包。
如果之前未安装该软件包,NPX将不会在您的系统中安装该软件包;相反,它将创建一个临时缓存来保存包二进制文件。一旦执行结束,NPX将从系统中删除已安装的缓存二进制文件。
使用npx
有如下好处:
1、可以直接执行npm包中的可执行文件
比如,项目内部安装了测试工具mocha
:
npm install -D mocha
一般来说,调用mocha
,只能在项目脚本和package.json
的script
字段里面,如果想在命令行下调用,必须像下面这样:
node-modules/.bin/mocha --version
这样使用比较麻烦,使用npx就简单多了:
npx mocha --version
npx
的原理很简单,就是运行的时候,会到node_modules/.bin
路径和环境变量$PATH
里面,检测命令是否存在,存在则执行,不存在则临时安装mocha
来执行。
2、避免全局安装模块
比如我们新建一个vue
项目时,需要先进行脚手架@vue-cli
的全局安装,然后再进行项目的新建,如下:
npm install -g @vue/cli
vue create my-app
全局包默认的安装路径为C:\Users\xxx\AppData\Roaming\npm
,安装成功后,我们可以在该目录下查看到安装的包。
使用npx可简化如下:
npx @vue/cli my-app
上面代码运行时,npx
将@vue/cli
下载到一个临时目录,使用以后再删除。所以,以后再次 执行上面的命令时,会重新下载@vue/cli
。
3、可以指定node
版本、命令的版本,解决了不同项目使用不同版本的命令的问题
相信小伙伴们都遇到过旧的项目用的是比较老的node
版本,如果新项目想用新的node
版本,则会存在不兼容的情况,可以通过安装nvm
来给本地安装多个node
包解决此问题。使用npx
也可解决该问题。
npx node@12.20.0 -v
4、执行GitHub
源码
npx
还可以执行GitHub
上面的模块源码。
npx github:piuccio/cowsay hello
需要注意的是,远程代码必须是一个模块,即必须包含package.json
和入口脚本。
总结(摘录苏南大叔的说明)
- npx侧重于执行命令的,执行某个模块命令。虽然会自动安装模块,但是重在执行某个命令。
- npm侧重于安装或者卸载某个模块的。重在安装,并不具备执行某个模块的功能。
- npx非常智能的识别模块,如果模块存在,就使用。如果不存在,就临时下载,用完就删除。
- 使用某个node模块的时候,根本不用关心是否安装过了。npx会给你最满意的答案(没有对应模块就临时下载)。
所以,不使用特殊参数的npx
命令的基本逻辑是:先检查当前项目node_modules/
下,是否存在。不存在的话,就检查全局是否已经安装对应的模块。如果还没有的话,就去仓库里面去下载对应的模块,下载完毕就执行。执行完毕就删除,不留下一丝痕迹!