首页
学习
活动
专区
圈层
工具
发布
技术百科首页 >pnpm >pnpm 与 npm 在依赖提升(hoisting)策略上有什么区别?

pnpm 与 npm 在依赖提升(hoisting)策略上有什么区别?

词条归属:pnpm

1. npm 的扁平化提升

npm 和 Yarn Classic 默认采用扁平化提升策略,将尽可能多的依赖(包括传递依赖)提升到 node_modules 根目录。这种设计的初衷是减少目录嵌套深度,兼容早期 Node.js 的模块解析行为。其副作用是项目代码可以访问任意层级的依赖,形成幽灵依赖,同时同一依赖的多个版本无法并存,可能引发版本冲突。

2. pnpm 的默认提升与可选配置

pnpm 默认将依赖提升到 node_modules/.pnpm/node_modules(隐藏目录),而非根目录。这意味着依赖对 node_modules 内部的包可见,但对外部代码不可见,在兼容性与隔离性之间取得平衡。用户可通过 .npmrc 配置灵活调整提升行为:hoist=false 完全禁止提升,实现最严格隔离;public-hoist-pattern[] 将匹配模式的包提升到根目录,用于兼容特定工具;shamefully-hoist=true 则将所有依赖提升到根目录,行为等同于 npm。

3. 提升策略对工具链的影响

大多数现代工具(Vite、Webpack 5、TypeScript 等)已兼容 pnpm 的非扁平结构。少数依赖扁平化结构的工具(如 React Native 的 Metro 打包器、部分 Webpack 4 配置、某些 serverless 部署环境)需要借助 node-linker=hoisted 配置生成无符号链接的扁平 node_modules,此时会失去幽灵依赖保护,但保留 pnpm 的 store 和锁文件优势。

相关文章
pnpm的安装与配置(Windows/macOS)
PNPM作为新一代的包管理器,通过引入内容可寻址文件系统和硬链接,有效解决了npm存在的重复依赖问题,极大地节省了磁盘空间和提高了安装速度。相比Yarn和npm,PNPM在处理依赖上有其独特的优势:
Allen_z
2024-06-14
29.8K1
深入浅出 npm & yarn & pnpm 包管理机制
本文会以尽量简洁的语言来描述当下主流包管理工具 npm、yarn、pnpm 的管理策略以及进化史,不涉及任何晦涩的代码。
Leecason
2022-07-13
2.4K0
npm、yarn与pnpm详解
🔍 简介: npm是随Node.js一起安装的官方包管理工具,它为开发者搭建了一个庞大的资源库,允许他们在这个平台上搜索、安装和管理项目所必需的各种代码库或模块。
Allen_z
2024-06-14
1.4K0
包管理工具
前端的包管理工具相信大家一定不会陌生,因为每天都需要跟他打交道,新项目或者刚拉下来的前端项目都需要去 install 依赖进行包的依赖安装,大家最熟悉的应该就是 npm 了,或者国内的 npm 镜像包 cnpm ,大家熟称为淘宝镜像
离殊
2022-04-01
3.6K0
什么是 npm、Yarn、pnpm? 有什么区别? 分别适应什么场景?
在前端开发中,包管理工具扮演着非常重要的角色。它们帮助开发者高效地管理项目的依赖,确保项目中所需的所有第三方库和工具都能按时安装,并且兼容版本。npm、Yarn 和 pnpm 是三款常用的包管理工具,它们各有特点,适用于不同的场景。那么,它们之间有什么区别呢?如何根据不同的需求选择最合适的工具呢?本文将一一解答这些问题。
猫头虎
2025-07-17
10.1K0
点击加载更多
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
领券