npm和npx的区别是什么?

10,631 阅读2分钟

大家好,我是右子。

npm的全称是Node Package Manager,是国外的友人搞了一个统一管理资源的工具服务。

为什么要做npm统一管理?

在早些年的时候开发,你用jquery要在jquery官网上下载,lodash要去lodash官网上下载,其他也都诸如此类。很麻烦,技术人就应该用技术的方式来方便自己。

于是这种资源的托管平台就出来了,现在很多公司也有属于自己内部的npm资源管理平台。

使用起来也很方便,通过配置的package.json文件执行npm install就可以自动安装下载了。

所以npm的目标是:自动化的依赖性和软件包管理

npx是什么?

从npm的5.2.0版本开始就增加了npx这个命令。当然如果你也可以手动安装:

sudo npm install npx -g

为什么会有npx?

npx提升了CLI的操作易用性。

比如你的项目内安装了MyPackage的一个module,不使用npx时,你想调用你只能:

// 方法1: 在package里面的scripts字段里配置
"scripts":{
    "mp": "node_modules/.bin/MyPackage"
}
// 方法2: 在cmd命令行中敲击代码
# 项目的环境根目录下执行
$ node_modules/.bin/MyPackage

npx则可以解决这样的问题,让项目内部安装的模块用起来更方便:

npx MyPackage

还可以避免全局安装的问题。 比如我们想用一个全局模块的方法,但是我们又不想安装到全局,就可以使用npx来运行它,而且不进行全局安装。

npx vuecli create <projectname>

实现原理

npx的实现原理其实很简单,就是在npx运行的时候,自动去node_modules/.bin路径和环境变量中里面检查命令是否存在。

其他

有两个常用参数:--no-install/--ignore-existing。 强制使用本地模块时,可以在命令中带上--no-install参数,如果本地不存在则会报错。 忽略本地模块,强制使用远程模块,可以在命令中带上--ignore-existing参数。