You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Yarn会生成.pnp.loader.mjs与.pnp.cjs文件?

关于Yarn生成的.pnp.loader.mjs和.pnp.cjs文件的说明

核心背景

这两个文件是Yarn 2+(又称Yarn Berry)引入的Plug'n'Play (PnP) 特性的产物。如果你之前用的是Yarn 1(经典版Yarn)或npm,自然不会见到它们——因为npm和Yarn 1采用传统的node_modules依赖管理方式,而PnP是Yarn Berry推出的替代方案。

两个文件的具体用途

  • .pnp.cjs:这是PnP的核心配置文件,记录了所有依赖的安装位置、版本、依赖关系等元数据。Node.js或Vite这类构建工具会通过它直接定位依赖文件,无需依赖node_modules目录。
  • .pnp.loader.mjs:这是PnP的加载器脚本,负责拦截Node.js的模块加载逻辑,让Node.js能理解并使用PnP配置来查找依赖。用Yarn Berry启动项目时,这个加载器会被注入到Node.js的加载流程中,确保所有模块都能被正确找到。

生成原因

如果你近期升级了Yarn版本,或是在项目中启用了PnP特性(比如执行过yarn set version berry),Yarn就会自动生成这两个文件,同时默认不再创建node_modules目录。PnP通过直接映射依赖路径的方式,比传统node_modules更节省磁盘空间,还能避免依赖版本冲突问题。

补充说明

如果想回到传统的node_modules管理方式,可以在项目根目录的.yarnrc.yml文件中添加如下配置:

nodeLinker: node-modules

之后重新运行yarn install,Yarn就会生成node_modules,同时不再维护这两个PnP相关文件。

内容的提问来源于stack exchange,提问作者Esteban Sabo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 22:40:37