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有如下好处:

摘自:npx的使用 - SummerSatr - 博客园


1、可以直接执行npm包中的可执行文件

比如,项目内部安装了测试工具mocha

npm install -D mocha

一般来说,调用mocha,只能在项目脚本和package.jsonscript字段里面,如果想在命令行下调用,必须像下面这样:

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/下,是否存在。不存在的话,就检查全局是否已经安装对应的模块。如果还没有的话,就去仓库里面去下载对应的模块,下载完毕就执行。执行完毕就删除,不留下一丝痕迹!

posted @ 2023-05-06 10:46  走走停停走走  Views(1405)  Comments(0Edit  收藏  举报