尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Vite 构建失败 esbuild 冲突 3 条路修好

Vite 构建失败 esbuild 冲突 3 条路修好 Vite 构建失败 esbuild 冲突 3 条路修好【免费下载链接】viteNext generation frontend tooling. Its fast!项目地址: https://gitcode.com/GitHub_Trending/vi/vitenpm 装依赖报 ERESOLVE或 vite build 直接说 esbuild 模块找不到Vite 构建失败大多卡在版本区间对不上跑完下面自检选一条路命令直接复制。 先对号入座你是不是这几个报错之一报错基本就三类先对一下原文对上了后面少走弯路npm 装依赖时直接拒绝npm ERR! ERESOLVE unable to resolve dependency tree npm ERR! peer esbuild^0.27.0 || ^0.28.0 from vite8.2.2触发条件手动往 devDependencies 里加过 esbuild或刚升过 Vite 主包之后重装依赖时出现。构建时找不到原生二进制Error: Cannot find module esbuild/linux-x64 Require stack: node_modules/esbuild/lib/main.js触发条件锁文件命中旧缓存或 CI 干净环境里 esbuild 的 postinstall 脚本没跑完JS 包和原生二进制版本对不上。提示需要单独安装 esbuildFailed to load transformWithEsbuild. It is deprecated and it now requires esbuild to be installed separately.触发条件较新版本 Vite 里 esbuild 是可选 peer 依赖项目依赖树里根本没装 esbuild 包。对上了就往下看对不上先跑一遍自检。 跑一遍自检确认卡在哪先别慌在项目根目录跑完三条命令就能分清问题出在版本区间、安装缺失还是二进制残缺node -p require(vite/package.json).peerDependencies.esbuild npm ls vite esbuild node -e console.log(require(esbuild).version)第一条打印 Vite 声明的 esbuild 兼容区间正常输出^0.27.0 || ^0.28.0这样的区间字符串异常输出 undefined说明你这个 Vite 版本把 esbuild 写在 dependencies 里改看dependencies.esbuild字段。第二条看实际装了什么正常是 vite 和 esbuild 各一行且都带版本号异常是 esbuild 那行显示 empty 或 missing大概率是它——包压根没装上。第三条验证 esbuild 自身能否加载正常输出一个和第一条区间匹配的版本号异常直接抛 Cannot find module说明装的是残缺包删掉 node_modules 重装都救不回来得换版本。按结果分流第二条报 missing、或版本落在第一条区间外走「我用 npm」你用 pnpm 且锁文件钉死旧版走「我用 pnpm」Vite 主包暂时动不了走「主包暂时不能升」。版本错配的后果不只是报错esbuild 版本回退还会把冷启动时间拖慢修完可以拿这张曲线对比一下前后差异。 按你的场景选一条路三条路互斥挑你命中的那条走别混用混用只会把依赖树搅得更乱。我用 npmpeer 依赖冲突装不上根因esbuild 实际版本落在 vite peer 区间外。第一行先打印当前 vite 到底要哪个区间第二行装区间内的版本示例按 Vite 8 写其他版本以打印结果为准node -p require(vite/package.json).peerDependencies.esbuild npm install -D esbuild^0.27.0验证再跑npm ls esbuild输出落在区间内然后npm run build能走完即修好。我用 pnpmoverrides 钉死了旧 esbuild根因lockfile 或 overrides 把 esbuild 钉在旧大版本。在根 package.json 里加 overrides强制整棵依赖树的 esbuild 统一到一个大版本别指望pnpm update能穿透嵌套依赖{ pnpm: { overrides: { esbuild: ^0.27.0 } } }加完重跑pnpm install用pnpm why esbuild确认整棵树只剩一个版本构建命令照常执行即可验证。Vite 主包暂时不能升只补 esbuild根因esbuild 没装或版本对不上旧 vite 的声明。旧版本 Vite 把 esbuild 写在 dependencies 里第一行打印它声明的区间第二行照着装示例的 0.24.0 是官方 changelog 里当年回归发生时钉的版本以第一行打印结果为准node -p JSON.stringify(require(vite/package.json).dependencies.esbuild) npm install -D esbuild0.24.0验证npm run build完整跑完且 dist 目录正常生成产物说明版本已经对齐。为什么偏偏卡在这两个版本之间前面三路都是换版本这里说清楚版本为什么这么敏感花两分钟看懂以后升级不用再踩同一个坑。Vite 较新版本把 esbuild 从直接依赖降成了可选 peer 依赖每个大版本只声明兼容一个窄区间区间之外装什么都算冲突而 esbuild 走 0.x 语义化版本次版本号本身就代表破坏性变更JS 包与 esbuild/* 原生二进制必须严格同版本差一位就是 Cannot find module 或 ERESOLVE。仓库当前声明可以直接查证packages/vite/package.json 里 peerDependencies 写死了esbuild: ^0.27.0 || ^0.28.0devDependencies 里锁的是^0.28.2CHANGELOG 里还留着 pin to 0.24.0 再 unpin esbuild version 的两条记录就是当年 esbuild 0.24.1 回归现场的原始出处。修完顺手把这仨坑堵上一次修好容易下个月升级再翻车才是常态把下面三个口子顺手堵上把 esbuild 写进版本锁定字段pnpm 用pnpm.overridesnpm 用 package.json 的overrides一行配置锁住整棵树例如pnpm: { overrides: { esbuild: ^0.27.0 } }。CI 一律按锁文件安装和开发环境用同一条命令口径pnpm 跑pnpm install --frozen-lockfilenpm 跑npm ci保证生产依赖树和本地逐字一致。确认 esbuild 的安装脚本被允许执行pnpm 10 要在 pnpm-workspace.yaml 的 allowBuilds 里写esbuild: true官方仓库就是这么配的漏了这条二进制永远装不完整。下次再撞见 ERESOLVE 或 esbuild 模块报错先跑一遍自检再动手两分钟就能定位。【免费下载链接】viteNext generation frontend tooling. Its fast!项目地址: https://gitcode.com/GitHub_Trending/vi/vite创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表