前端辨识:npx、npm 、pnpm的区别
下面从定位、原理、速度/磁盘、用法、适用场景分别说清楚。一、定位不是同一类东西npm全称Node Package Manager地位Node.js 内置官方标准包管理器作用管理项目依赖、运行 scripts、发布包pnpm全称Performant npm地位第三方替代方案需手动安装作用和 npm 一样管理依赖但底层机制更高效npx全称Node Package eXecute地位npm 5.2 自带不是包管理器作用临时执行 npm 包的命令不长期安装依赖二、核心原理与 node_modules 结构1. npm扁平化 重复存储node_modules 会扁平化把深层依赖提到首层导致依赖提升、幽灵依赖没写在 package.json 却能引用每个项目都完整复制一份依赖磁盘大量重复锁文件package-lock.json2. pnpm硬链接 内容寻址存储CAS所有项目同一版本的包只存一份全局 store项目 node_modules 里用硬链接指向全局 store用软链接组织依赖树结果磁盘节省50%–80%依赖树严格无幽灵依赖安装速度比 npm 快2–3 倍锁文件pnpm-lock.yaml3. npx临时下载 → 执行 → 销毁流程先查本地node_modules/.bin再查全局都没有就临时下载到缓存执行后不污染全局不改变项目依赖不写 package.json三、速度与磁盘对比直观版特性npmpnpmnpx类型包管理器包管理器高性能命令执行器安装速度慢串行少量并行最快全并行硬链接复用只跑命令不管理依赖磁盘占用高大量重复极低全局共享一份不长期占用依赖结构扁平易有幽灵依赖严格树无幽灵依赖无依赖结构Monorepo需配置 workspace原生支持体验好无关适用项目小型、简单项目中大型、多项目、Monorepo临时跑命令、脚手架四、常用命令对比npmnpminstall# 安装依赖npmuninstall xxx# 卸载npmrun build# 跑脚本npminit# 初始化项目pnpmpnpminstall# 等价 npm installpnpmaddxxx# 安装依赖pnpmremove xxx# 卸载pnpmrun build# 跑脚本npx# 临时用 create-react-app不用全局安装npx create-react-app my-app# 临时跑 eslintnpx eslint.# 执行本地 node_modules/.bin 里的命令npx jest五、怎么选简单建议初学/小项目/官方模板用 npm开箱即用稳定中大型项目/多项目共存/追求快省空间用 pnpm现在很多大厂都转 pnpm临时用工具、脚手架、不想全局安装用 npx六、一句话总结npm官方标配稳但慢、费磁盘。pnpmnpm 加强版更快、更省、更安全。npx临时跑命令的工具不装包也能用。