定义

首先从字面意思上理解
npm全称:node.js package manager,是一款node.js的包管理工具。
npx全称: node.js package execute,是一个node.js的包执行工具。

什么是包管理工具?什么是包执行工具?

包管理工具

众所周知,在linux的发行版centOS下可以通过yum来安装各种应用。例如当安装php的时候可以打开终端输入并运行以下命令来一键安装php。

yum install php

以java为例,当我们运行一个java程序时会需要依赖其它的java包,难道需要开发者自己去一个一个下载这些被依赖的包?

有没有上文提到类似yum的东西来一键安装这些依赖包呢?

熟悉java的同学都知道我们可以列出一张这些依赖包的清单,然后通过maven读取清单并自动安装。

npm

在这里我们把java和node.js来做一下等价,那么npm在node.js作用就相当于maven在java中作用。npm会读取package.json中列出来的依赖包,然后自动安装这些依赖包。

包执行工具

npx

当我们在开发项目使用到gulp时,可以打开终端并cd到当前项目路径下并执行以下命令来运行gulp。

./node_modules/.bin/gulp

每次运行gulp都要输入这么多东西好麻烦,所以我们可以把上面这行代码写到package.json中,如下图所示。

之后在终端里只需要运行以下代码就可以执行gulp了。

npm run gulp

但是如果定义很多条script命令的话,如下图所示。

我们要写很多图中红框部分重复的代码"./node_modules/.bin/"。

这个时候npx的作用就体现出来了,它会自动帮我们搜索程序所在的路径,此时就不需要去手动定义程序的路径了,效果如下图。

./node_modules/.bin/gulp
可以替换为
npx gulp

所以package.json就可以变成下图所示的样子。

此时npx自动帮我们找到了gulp所在的路径。当然这只是npx一个最基础的功能。

总结

通过上述讲解,相信大家已经对npm和npx的作用有了一些认识。