首先从字面意思上理解
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读取清单并自动安装。
在这里我们把java和node.js来做一下等价,那么npm在node.js作用就相当于maven在java中作用。npm会读取package.json中列出来的依赖包,然后自动安装这些依赖包。
当我们在开发项目使用到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的作用有了一些认识。