npx是什么命令?npx和npm有什么区别?
发布于 作者:苏南大叔 来源:程序如此灵动~平时安装node
模块的时候,经常使用的命令是npm
。其实还有另外一个命令,叫做npx
。网上的说法都是:npx
是npm
命令的升级版本,功能非常强大。但是,苏南大叔不同意这个看法。
本文主要说明的就是npx
的基本使用方式。本文测试环境:win10
,node@14.16.0
,npm@6.14.11
,npx@6.14.11
。
npx
和npm
的区别
谈起npx
和npm
的区别,虽然网上的说法是:npx
是npm
的升级版本。但是,苏南大叔认为:两者就是拼写比较像。命令的基本功能完全不一样,并不存在着升级不升级的说法,不是替代的关系。
npx
侧重于执行命令的,执行某个模块命令。虽然会自动安装模块,但是重在执行某个命令。npm
侧重于安装或者卸载某个模块的。重在安装,并不具备执行某个模块的功能。
npx
的基本逻辑
npx
非常强大。苏南大叔认为他最主要的功能就是:
npx
非常智能的识别模块,如果模块存在,就使用。如果不存在,就临时下载[意味着永远是最新版],用完就删除。- 使用某个
node
模块的时候,根本不用关心是否安装过了。npx
会给你最满意的答案(没有对应模块就临时下载)。
所以,不使用特殊参数的npx
命令的基本逻辑是:先检查当前项目node_modules/
下,是否存在。不存在的话,就检查全局是否已经安装对应的模块。如果还没有的话,就去仓库里面去下载对应的模块,下载完毕就执行。执行完毕就删除,不留下一丝痕迹!
苏南大叔是个比较怀旧的人,对于npx
这种用完就丢弃删除的行为,是十分不屑的。所以,比较不喜欢使用npx
命令。下次使用不是又要下载嘛,很麻烦是不?很耗时不是?
npx
命令效果测试
以electron
这个模块为例,基本背景是这样的:
当前项目test
下,安装的是electron@8
。
同时,电脑里面全局安装的是electron@12
。
截至到发稿,electron
最新版是14
系列。
相关文档:
然后,问题来了,npx electron -v
命令会显示什么样的版本号?
- 在项目根目录下面,执行
npx electron -v
,显示的node_modules/
下的electron
版本号。 - 在其它路径下面,执行
npx electron -v
,显示的全局的electron
版本号。
然后,苏南大叔卸载了全局的electron
。再次在非项目路径下,执行npx electron -v
。在一阵下载界面闪过之后,显示的是最新的electron
版本号。
npx子命令参数
下面展示一些npx
命令的子命令,都可以完成特定的功能。
npx --no-install
npx
的最大优势就是:不存在就会尝试下载。但是,居然就有这么一次参数--no-install
。意思是不存在就不存在了,不要去尝试下载... 那这个npx
命令还有啥存在价值?苏南大叔表示:很无语!
温馨提示:注意--no-install
参数的位置,否则,就说不清这个参数是作用在npx
命令上面的,还是后面的命令(例子中的electron
命令)上的了。
npx --ignore-existing
这又是一个令人很无语的参数--ignore-existing
,它的意思就是:不管本地有没有(包括项目内或者全局),都一定要下载命令,然后执行,然后删除!令人无语吧?
npx -p
这个参数的意思是:必须先下载完对应模块,然后再执行后面的命令。这里苏南大叔写了个测试文件test.js
,用于输出当前的node
版本号,然后看看效果吧。
test.js
内容:
console.log(process.version)
执行的命令:
npx -p node@8 node test.js
上图的例子中,本地的node
版本号是14.16.0
,但是通过npx
的-p
命令,硬生生的改成了node@8
来执行这个test.js
。颇有违和感!
npx github:
这个功能需要git
客户端的配合,如果本地没有识别出git
命令的话,是需要先安装git
客户端才能正常使用的。安装完git
命令之后,记得要新开命令行窗口才能被识别。
还是以electron -v
命令为例:
npx github:electron/electron -v
这个命令能够成功执行的话,
- 一是要正确安装
git
命令 - 二是要能访问
github
网站,这可是个技术活儿。不是么? - 三是人品问题。放弃吧。
对应的github
代码地址是:
由于人品问题,这个实验暂时放弃。
可能的使用场景
下面的场景,是苏南大叔总结的可能的使用场景:
- 不想安装相关的代码,仅仅是个测试,用完自动删除。
- 想运行当前目录下的
node_modules/
内的命令,比如:webpack-cli
。
相关链接
总结
总结上来说,苏南大叔认为:
npx
命令的优点就是:可以智能识别,甚至主动下载。保证对应命令一定会执行完成。npx
命令的缺点就是:主动下载的文件,用完就会删除。下次还要再次下载,耗时耗资源!
更多npx
的文章,请点击下面的链接:
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。