简介NPM 和 NPX
npm 和 npx的基本使用条件
- NPM(Node Package Manager)是 Node.js 的包管理工具,用于安装、管理和发布 JavaScript 包。NPX 是 NPM 5.2.0 及以上版本附带的工具,用于临时执行包中的命令。
- npx 是 npm(Node.js 包管理器)的一部分,因此需要安装 Node.js 环境才能使用。Node.js 的安装包默认会包含 npm 和 npx。
- npx 在执行时会从 npm 仓库下载所需的包(如果本地未安装)。因此需要稳定的网络连接才能正常使用。
npx 的内部逻辑
npx 的工作原理可以分为以下几个关键步骤:
查找本地或全局包 npx 会先检查命令是否存在于本地项目的
node_modules/.bin
或全局安装的包中。如果找到,直接执行。临时下载并执行 如果本地或全局未安装该包,npx 会从 npm 仓库下载包的最新版本(或指定版本),存放在临时目录中,执行后自动清理(除非使用
--no-clean
选项)。缓存机制 下载的包会被缓存在系统的 npm 缓存目录中(如
~/.npm/_npx
),避免重复下载。缓存会保留一段时间,但不会永久存储。执行环境隔离 npx 会为每次临时执行创建一个独立的上下文,确保不会污染项目依赖或全局环境。
支持远程脚本 npx 可以直接运行 GitHub Gist 或其他远程脚本,例如:
npx https://gist.github.com/user/script.js
清理 npx 安装的包
npx 是 npm 5.2.0 及以上版本自带的工具,用于临时执行 npm 包中的命令。由于 npx 的设计目标是临时使用,它不会永久安装包到本地项目中。清理 npx 缓存或临时文件可以通过以下方法:
清理 npx 缓存 npx 会将下载的包缓存在系统中,可以通过以下命令清理缓存:
npx clear-npx-cache
或者直接删除 npm 的缓存目录(npx 共享 npm 的缓存):
npm cache clean --force
手动删除临时文件 npx 的临时文件通常存储在系统的临时目录中,路径可能为:
- Linux/macOS:
/tmp
或~/.npm/_npx
- Windows:
%TEMP%
或C:\Users\<USER>\AppData\Local\npm-cache\_npx
可以直接删除这些目录中的文件。
- Linux/macOS:
定期清理 npm 缓存 由于 npx 依赖 npm 的缓存机制,定期运行以下命令可以清理旧文件:
npm cache verify
NPM 和 NPX 的核心区别
NPM 的主要功能
NPM 主要用于包的安装和管理。通过 npm install
命令,可以将包下载到本地 node_modules
目录中,并在项目中引用。NPM 还支持版本控制、依赖管理和脚本执行(通过 package.json
中的 scripts
字段)。
安装包:
npm install <package-name>
将包安装到项目的node_modules
目录中,并添加到dependencies
或devDependencies
。全局安装:
npm install -g <package-name>
将包安装到全局环境,供所有项目使用。运行脚本:
npm run <script-name>
执行package.json
中定义的脚本。
NPX 的主要功能
NPX 用于临时执行包中的命令,无需全局安装。它会在执行命令时检查本地 node_modules
和全局环境,如果未找到包,则自动下载并执行,执行完成后删除临时文件。
临时执行包:
npx <package-name>
无需全局安装即可运行包中的命令。执行本地未安装的包:
如果包未安装,NPX 会临时下载并执行,完成后清理。运行特定版本的包:
npx <package-name>@<version>
指定包的版本运行。直接运行 GitHub 代码:
npx github:<username>/<repo>
从 GitHub 仓库直接运行代码。
使用场景对比
NPM:
适合管理项目依赖,长期使用的包。例如,安装react
、lodash
等需要在项目中重复使用的库。NPX:
适合一次性或临时任务。例如,快速运行脚手架工具(如create-react-app
)或测试某个包的功能。
示例对比
使用 NPM 运行
create-react-app
:
需要先全局安装,再执行命令:npm install -g create-react-app create-react-app my-app
使用 NPX 运行
create-react-app
:
无需安装,直接执行:执行完命令之后 create-react-app包自动从缓存目录中清除npx create-react-app my-app
总结
- NPM 是包管理工具,用于安装和管理依赖。
- NPX 是执行工具,用于临时运行包中的命令,避免全局安装的污染。
- 在需要频繁使用某个包时,用 NPM 安装;在临时使用时,用 NPX 执行。