是什么?
npm
npm 全称是 node package manager,是 node 环境下的一个包管理工具,同时 npm 也有自己的脚手架(cli工具)。我们可以用npm安装、管理各种依赖包。如果是非全局安装npm install example-package,npm会将依赖包装到项目中的/node_modules下,如果是全局安装npm install -g example-package,npm会将依赖包安装到/usr/local/bin当中(或者其他安装node.js的地方)。
$ npm install -g create-react-app
$ create-react-app my-app
在上面这个例子中,我们先将cra全局安装,然后执行cra这个脚手架(BTW,执行cli命令,系统会调用 which 命令检查当前调用的cli在哪个目录下,然后你会发现在/usr/local/bin/create-react-app中),在当前目录创建一个React应用。
npx
npx是npm 5.2.0版本之后新增的一个命令行工具,用于执行临时安装的包(npm注册表中的任何可执行文件)。同时npx也是node环境下的包管理工具,但是和npm不同的是,执行npx命令不需要将依赖包下载至本地,就可以直接执行命令,只需要在npx后面跟着需要执行的包或工具名称和参数即可。如:npx create-react-app my-app,我们并没有将create-react-app这个依赖包安装到本地,但是创建了一个新的React应用。
为什么不是所有命令都用npx?
这是因为对于一些常用的工具或者脚本,我们会频繁地使用,如果每次都要通过npx来运行这些工具或脚本,会显得很麻烦。这时候我们可以通过全局安装这些工具或脚本来使它们变得更加方便。但对于一些不常用的工具或脚本,我们可以使用npx来避免全局安装,从而减少系统中的冗余模块。
总结
可以将npm看作是一个全局安装和管理依赖项的工具,而npx则是用于快速运行临时安装的包中的可执行文件。