npx和npm 和pnpm的区别

概念与功能

  • npx :npx 并不是一个包管理器,而是 npm(Node Package Manager)的一个工具,用于临时执行 npm 包中的命令,而无需全局安装该包。比如你想临时使用某个脚手架工具创建一个项目,就可以直接使用npx create-react-app my-app,它会自动下载并执行create-react-app这个包的命令,执行完后不会在本地全局环境中留下该包。
  • npm :是 Node.js 的默认包管理器,用于管理项目的依赖关系,包括安装、卸载、更新包等操作,还可以用于运行脚本、管理项目的版本等。它会将下载的包安装到项目的node_modules目录下,并在package.json文件中记录项目的依赖信息。
  • pnpm:是一个快速、节省磁盘空间的包管理器,与 npm 类似,也用于管理 Node.js 项目的依赖,但在安装包的方式和存储结构上有所不同,能更高效地利用磁盘空间,提升安装速度,并且在多项目管理等方面有一些独特的优势。

安装方式与性能

  • npx:不涉及对包的长期安装,只是临时下载并执行包中的命令,执行完毕后会自动清理相关文件,不会占用过多的磁盘空间和系统资源。
  • npm :在安装包时,会将包及其所有依赖项完整地下载到node_modules目录中。如果多个项目依赖同一个包,每个项目的node_modules中都会有一份该包的副本,可能会占用较多磁盘空间。在安装大型项目依赖时,可能会因为需要下载大量文件而导致安装速度较慢。
  • pnpm :采用了硬链接(hard link)和符号链接(symbolic link)的方式来管理node_modules中的包。它会将所有项目共享的依赖包存储在一个全局的存储位置,然后在每个项目的node_modules中通过链接的方式引用这些共享的包,从而大大节省了磁盘空间。由于这种存储方式,pnpm 在安装包时,如果已经有了相关的缓存,安装速度会非常快

命令使用与行为

  • npx :主要用于执行一次性的命令,比如运行测试工具、代码生成器等。使用npx时,如果本地没有找到指定的包,它会自动从 npm 仓库下载并执行,执行完后不会将该包添加到项目的依赖列表中。
  • npm :提供了丰富的命令来管理项目依赖和执行脚本等操作。如npm install用于安装依赖,npm run用于执行package.json中定义的脚本命令等。安装包时,会根据package.json中的依赖信息,将所有依赖包下载并安装到node_modules目录下,并自动处理依赖关系。
  • pnpm :命令与 npm 类似,也有pnpm install、pnpm run等命令。但在处理依赖安装时,行为有所不同。例如,pnpm 在安装依赖时,会严格按照项目的依赖关系树来安装包,并且在遇到依赖冲突时,可能会有不同的处理方式,更注重依赖的一致性和稳定性

适用场景

  • npx:适用于偶尔需要执行某个 npm 包中的命令,而不想全局安装该包,或者不想将其添加为项目的长期依赖的情况。比如快速尝试一个新的工具、临时执行一些代码生成或测试任务等。
  • npm:适用于大多数 Node.js 项目,尤其是在没有特殊性能要求或对包管理有特定需求的情况下,是一个通用的选择。它与 Node.js 生态系统紧密集成,广泛应用于各种类型的项目,无论是小型个人项目还是大型企业级应用。
  • pnpm:适用于对磁盘空间和安装速度有较高要求的项目,特别是在管理多个项目且有大量共享依赖的场景下,能显著提高效率和节省空间。例如,在开发大型的前端项目或多个微服务组成的后端项目时,pnpm 可以更好地管理依赖,提升开发体验。
相关推荐
啾咪orJIUMI34 分钟前
Vue 3 + 高德地图封装实战:点位、区域、Loca 流光与 Vue 信息窗体
前端·vue.js
掘金者阿豪36 分钟前
AI数据库不只是向量检索:从数据语义到库内智能计算的技术演进
前端
梦里寻码39 分钟前
我用 NestJS + Vue3 写了一套完整的研发管理系统(58 表 / 229 API / 130 项断言,全开源
前端·后端·算法
FRing0341 分钟前
vue2干货总结8(路由模块封装、router-link、声明式导航、路由重定向、编程式导航)
开发语言·前端·vue.js·vue2
Dumbness1 小时前
一份 JSON 生成增删改查接口,入参清洗漏了什么:Number(" ") 是 0,搜 100% 把 1000 元券也搜出来
node.js·express
SameX1 小时前
HarmonyOS ArkUI Dialog 复用 用 @CustomDialog + enum type 做多类型统一管理的做法
前端
AiMan1 小时前
豆包爱学还是不可以导出左侧所有对话,只能单容导出,方法不对吗
前端
AiMan1 小时前
Grok生成的内容能否下载吗?
前端
徐小夕2 小时前
JitArchives,一款基于JitWord协同AI文档打造的企业级电子档案系统
前端·vue.js·github
陈随易2 小时前
Node.js 2026上半年都有哪些性能提升?
前端·后端·程序员