pnpm:public-hoist-pattern[]配置

在 pnpm 中,public-hoist-pattern\[\] 是用于控制依赖提升(Hoisting)的一个重要配置项。

核心作用

它的主要作用是允许符合特定规则的第三方依赖被提升到根目录的 node_modules 中,从而使其对项目中的所有代码(包括未在 package.json 中显式声明该依赖的代码)可见。

为什么需要它?

  • pnpm 默认使用符号链接的方式管理依赖

  • 大多数依赖不会被提升到顶层 node_modules,而是存放在 .pnpm 文件夹中

  • 这样可以避免幽灵依赖问题,但也可能导致某些包无法被正确访问

为什么需要这个配置
  • @aurora 作用域下的包可能是内部私有包

  • 这些包可能在构建、运行或插件机制中需要直接访问(例如通过 require('@aurora/xxx'))

  • 通过强制提升,确保这些包始终在 node_modules 顶层,避免因路径解析失败导致的问题

配置规则与默认值

默认值:通常默认为 '*eslint* ', '*prettier* '。这意味着任何名称包含 eslint 或 prettier 的包都会被自动提升。

配置位置:在项目根目录的 .npmrc 文件中定义。

语法示例:

ini

提升所有以 @types/ 开头的包和所有包含 babel 的包

public-hoist-pattern\[\]=@types/*

public-hoist-pattern\[\]=babel

使用 ! 符号可以排除特定包(从 v7.12.0 开始支持)

public-hoist-pattern\[\]=!@types/react

请谨慎使用此类代码。

与 hoist-pattern 的区别

hoist-pattern:将匹配的包提升到 node_modules/.pnpm/node_modules(一个隐藏的、由 pnpm 内部管理的目录)。

public-hoist-pattern:将匹配的包直接提升到根目录 node_modules,对外部环境完全可见。

pnpm10中的使用

publicHoistPattern

默认值:\[\]

类型:string\[\]

不同于 hoist-pattern 会把依赖提升到一个虚拟存储中的隐藏的模块目录中,publicHoistPattern 将匹配的依赖提升至根模块目录中。 提升至根模块目录中意味着应用代码可以访问到幻影依赖,即使它们对解析策略做了不当的修改。

当处理一些不能正确解析依赖关系的有缺陷可插拔工具时,此设置很有用。

例如:

javascript 复制代码
publicHoistPattern:
 - "*plugin*"
 -  "*aurora*"
 - "*@wetest*"
 - "*@types*"
 - "*eslint*"
相关推荐
万少12 小时前
如果你要自动化操作浏览器,Kimi-WebBridge可能适合你
前端·javascript·后端
倾颜13 小时前
React 自定义 Hook 实战:把 AI Chat 的会话流和滚动体验从组件中拆出来
前端·react.js·next.js
vipbic13 小时前
从一句话需求到可交互草图,我用 AI 设计了一个团队组件共享平台
前端
小小前端--可笑可笑13 小时前
【Web 流媒体三部曲之一】直播、点播与 WebRTC 是什么?
前端·webrtc
gCode Teacher 格码致知13 小时前
Javascript提高:冒泡和捕获的典型案例-由Deepseek产生
前端·javascript
蒟蒻星球住民13 小时前
web应用技术作业01
前端·javascript·firefox
Csvn13 小时前
前端团队协作
前端
道友可好13 小时前
Superpowers:给 AI 编程助手装上超能力
前端·人工智能·后端
协享科技13 小时前
Vue 3 实现抖音式卡片滑动交互:从零到完整方案
前端·vue.js·交互·ai编程·英语·自考英语
_xaboy14 小时前
开源Vue组件FormCreate通过 JSON 生成TinyVue表单
前端·vue.js·低代码·开源·json·表单设计器