1、npm

众所周知,npm是Node.js的软件包管理器,其目标是自动化的依赖性和软件包管理。

这意味着,可以在package.json文件中为项目指定所有依赖项(软件包),当需要为其安装依赖项时,只要运行npm install,这样就好啦!

它还提供了版本控制,即可以指定项目的依赖版本,这样可以在大多数情况下,防止更新破坏项目,或者使用首选版本。

2、npx

另一方面,npx是执行Node软件包的工具,它从 npm5.2版本开始,就与npm捆绑在一起。

npx的作用如下:

  • 默认情况下,首先检查路径中是否存在要执行的包(即在项目中);
  • 如果存在,它将执行;
  • 若不存在,意味着尚未安装该软件包,npx将安装其最新版本,然后执行它;

示例:

假设有一个名为my-package的软件包,想要执行它。

好吧,若没有npx,要执行一个软件包,必须通过其本地路径运行来完成,如下所示:

1
./node_modules/bin/my-package

或在 package.json文件的 scripts section中将其定义为单独的脚本,如下所示:

1
2
3
4
5
6
7
{
"name":"something",
"version": "1.0.0",
"scripts": {
"my-package":"./node_modules/bin/my-package"
}
}

然后使用npm run my-package运行。

现在,运用npx,只需运行npx my-package.,即可轻松实现此目的。

3、总结

npx是一个由Node.js官方提供的用于快速执行npm包中的可执行文件的工具。它可以帮助我们在不全局安装某些包的情况下,直接运行该包提供的命令行工具。npx会在执行时,检查本地项目中是否安装了对应的依赖,如果没有安装则会自动下载安装,并执行命令。如果本地已经存在该依赖,则直接执行命令。

使用npx时,可以在命令行中输入要执行的包名加上其参数,例如:

1
npx create-react-app my-app

以上命令会在本地下载并运行create-react-app包中的可执行文件,创建一个名为my-app的React应用程序。

(1)npx 会把远端的包下载到本地吗?

npx 不会像 npm 或 yarn 一样将包下载到本地的 node_modules 目录中。相反,它会在执行命令时,在本地缓存中寻找并下载包,然后执行该包中的命令。这样可以避免在开发过程中在全局安装大量的包,同时也可以确保使用的是最新版本的包。

(2)npx 执行完成之后, 下载的包是否会被删除?

是的,npx会在执行完命令后删除下载的包。这是因为npx会在执行命令之前,将需要执行的包下载到一个临时目录中,并在执行完毕后删除该目录。这样可以避免在本地留下不必要的依赖包。如果需要保留依赖包,可以使用–no-cleanup选项来禁止删除下载的包。