求助:Turborepo Monorepo从Yarn转pnpm后Vite构建遇Rollup解析失败
解决方案
开启pnpm依赖提升
执行pnpm install --shamefully-hoist,或者在根目录.npmrc中添加shamefully-hoist=true后重新执行pnpm install。pnpm默认严格隔离依赖,部分第三方库的子依赖需要在顶层node_modules中才能被Rollup解析,开启该配置可解决这类问题。配置Vite预打包依赖
在vite.config.mts中添加optimizeDeps.include,指定需要预打包的依赖,示例:import { defineConfig } from 'vite' import react from '@vitejs/plugin-react' export default defineConfig({ plugins: [react()], optimizeDeps: { include: [ 'zustand', 'use-sync-external-store/shim/with-selector.js', '@tanstack/react-query', '@tanstack/query-core', '@tanstack/query-persist-client-core' ] }, // 其他原有配置... })让Vite预打包这些依赖,避免Rollup构建时出现解析失败。
清理错误的
external配置
移除vite.config.mts中rollupOptions.external里添加的所有依赖项——这些是项目需要的内部依赖,不是外部资源,添加后反而会让Rollup跳过解析,导致找不到文件。统一依赖版本并清理缓存
- 执行
pnpm dedupe统一依赖版本,减少嵌套层级冲突; - 执行
pnpm dlx turbo clean清理Turborepo缓存; - 删除项目根目录下的
node_modules/.vite文件夹清理Vite缓存; - 重新执行
pnpm install和构建命令。
- 执行
验证依赖树
执行pnpm ls zustand @tanstack/react-query查看依赖树,确认报错的子依赖(如use-sync-external-store、@tanstack/query-core)是否存在,若缺失则手动安装对应版本的子依赖到app1目录(例如pnpm add use-sync-external-store -F app1)。
内容的提问来源于stack exchange,提问作者Alef Duarte
相关产品推荐
相关产品推荐

