使用yarn@4.6.0装包,项目是react+vite搭建的,项目无法启动,报错:

✘ [ERROR] Cannot read file: E:/source/m-apps/my-vite-app/.yarn/virtual/react-dom-virtual-81b5a735d4/5/C:/Users/13796/AppData/Local/Yarn/Berry/cache/react-dom-npm-19.2.0-10246904d4-10c0.zip/node_modules/react-dom/client.js

AI的回答:

bash 复制代码
这是一个在 Windows 上用 Yarn PnP + 全局缓存 + esbuild/Vite 时的已知路径问题:Yarn 会把依赖的 zip 放在全局缓存目录(C 盘用户目录),PnP 生成的虚拟路径里会出现类似
E:/.../.yarn/__virtual__/.../5/C:/Users/.../cache/...zip/node_modules/...
这种"盘符嵌套"的路径,esbuild 无法识别,导致 Cannot read file。

最简单可行的修复方案(任选其一):

方案 A(推荐):关闭 Yarn 的全局缓存
1) 在项目根目录的 .yarnrc.yml 中加入/修改:
   enableGlobalCache: false
2) 清理并重装依赖:
   - 删除 .yarn/cache(如果有)
   - yarn cache clean
   - yarn install
3) 重新启动 Vite。

方案 B:改用 node_modules 链接器(暂避开 PnP)
1) 在 .yarnrc.yml 中设置:
   nodeLinker: node-modules
2) yarn install
3) 重新启动 Vite。

方案 C:仅把有问题的包解压到本地(unplug)
1) 运行:
   yarn unplug react react-dom
   或在 package.json 增加:
   "dependenciesMeta": {
     "react": { "unplugged": true },
     "react-dom": { "unplugged": true }
   }
2) yarn install
3) 重新启动 Vite。

备注
- 方案 A 的原理是让依赖的 zip 放在项目本地 .yarn/cache(与你的项目同盘符),避免路径里混入 C: 盘导致 esbuild 解析失败。
- 保持 Yarn PnP 的同时,A 通常就能解决问题;如果你更倾向于兼容性优先,B 最省心。
- 如果依然报错,确认 Node 版本为 18+/20+,并升级 Vite 和 esbuild 到较新版本,然后重新安装依赖。

需要我看下你的 .yarnrc.yml、package.json 和 Vite 版本,我可以给出更精确的配置。

我的选择:

在根目录下添加文件.yarnrc.yml

.yarnrc.yml:

bash 复制代码
enableImmutableInstalls: false

httpTimeout: 300000

nodeLinker: node-modules

enableScripts: false

AI对各个字段含义的解释:

bash 复制代码
下面分别说明这些 .yarnrc.yml 配置项的作用、默认值与影响:

- enableImmutableInstalls: false
  - 含义:允许安装过程中修改 yarn.lock/.pnp.* 等(即不强制"只读安装")。
  - 默认:false(在 CI 环境通常会用 --immutable 或显式设为 true)。
  - 影响:便于本地开发自动更新锁文件;在 CI 中通常应开启以防依赖漂移。

- httpTimeout: 300000
  - 含义:每个 HTTP 请求(如拉取包、元数据)的超时时间,单位毫秒。
  - 默认:30000(30 秒)。
  - 影响:设为 300000 即 5 分钟,适合网络较慢或有代理的环境,减少超时失败。

- nodeLinker: node-modules
  - 含义:使用 node_modules 安装模式,而不是 Yarn 默认的 Plug'n'Play (pnp)。
  - 默认:pnp。
  - 影响:会生成并"提升"node_modules,兼容依赖 node_modules 的工具链,但磁盘占用更大、安装/解析可能更慢,失去 PnP 的一致性/性能优势。

- enableScripts: false
  - 含义:禁用安装阶段执行依赖包的生命周期脚本(preinstall/install/postinstall/prepare 等)。
  - 默认:true。
  - 影响:提升安全性与可重复性,但可能导致需要编译/下载二进制的包无法正常安装(如 node-gyp、sharp、esbuild 等)。你项目自身的脚本可通过 yarn run 手动执行;如需在禁用情况下仅允许部分包执行脚本,可配合 yarn-plugin-allow-scripts 白名单使用,或用环境变量 YARN_ENABLE_SCRIPTS=1 临时开启。
相关推荐
Qrun3 小时前
Windows11安装nvm管理node多版本
前端·vscode·react.js·ajax·npm·html5
中国lanwp3 小时前
全局 npm config 与多环境配置
前端·npm·node.js
JELEE.4 小时前
Django登录注册完整代码(图片、邮箱验证、加密)
前端·javascript·后端·python·django·bootstrap·jquery
TeleostNaCl6 小时前
解决 Chrome 无法访问网页但无痕模式下可以访问该网页 的问题
前端·网络·chrome·windows·经验分享
前端大卫7 小时前
为什么 React 中的 key 不能用索引?
前端
你的人类朋友7 小时前
【Node】手动归还主线程控制权:解决 Node.js 阻塞的一个思路
前端·后端·node.js
小李小李不讲道理9 小时前
「Ant Design 组件库探索」五:Tabs组件
前端·react.js·ant design
毕设十刻9 小时前
基于Vue的学分预警系统98k51(程序 + 源码 + 数据库 + 调试部署 + 开发环境配置),配套论文文档字数达万字以上,文末可获取,系统界面展示置于文末
前端·数据库·vue.js
mapbar_front10 小时前
在职场生存中如何做个不好惹的人
前端