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

在Vercel执行多构建命令时出现ES模块错误(NextJS项目)

问题:Vercel部署NextJS时修改构建命令引发ESM兼容错误

我在Vercel上部署NextJS项目,把构建命令改成了同时运行一个额外脚本:

yarn run build && yarn run email

修改后构建报错:

Error [ERR_REQUIRE_ESM]: require() of ES Module /vercel/path0/node_modules/strip-ansi/index.js from /vercel/path0/node_modules/ora/index.js not supported.

本地运行完全正常,想知道这个构建命令的修改和错误之间有什么关联?已知错误和库版本有关,但问题出在Vercel环境里。


关联分析

这个错误和你新增的yarn run email脚本直接相关,原因如下:

  • 原本的yarn run build仅执行NextJS的构建流程,依赖链局限在NextJS及项目核心依赖范围内;新增的yarn run email会触发另一个工具/库的执行,这个库的依赖链里出现了ESM(ECMAScript模块)和CommonJS的兼容冲突。
  • 具体来说,strip-ansi的新版本是纯ESM包,而ora的旧版本仍然用require()加载它——这种版本组合在Vercel环境下被安装了,但你本地环境里的ora或strip-ansi版本是兼容的(比如ora已更新到支持ESM的版本,或者strip-ansi用的是仍提供CommonJS的旧版)。
  • Vercel构建时可能会重新安装依赖,如果你的yarn.lock没有同步到仓库,或者Vercel的依赖安装策略(比如默认拉取最新兼容版本)导致和本地依赖版本不一致,就会触发这个冲突。原本的构建流程不会触发这个依赖链的执行,所以之前没报错。

解决建议

  • 锁定依赖版本:检查yarn.lock,确保strip-ansi和ora的版本和本地一致,把这两个包的版本锁定到兼容组合(比如找ora支持ESM的版本,或者降级strip-ansi到仍提供CommonJS的版本)。
  • 同步lock文件:确保yarn.lock提交到仓库,让Vercel安装和本地完全一致的依赖版本。
  • 匹配Node.js版本:在Vercel项目设置里把Node.js版本改成和本地环境一致,避免版本差异导致依赖安装的版本不同。
  • 本地模拟调试:清空本地node_modules和yarn.lock,重新执行yarn install,再运行构建命令,看是否能复现错误,方便本地调试版本兼容问题。

内容的提问来源于stack exchange,提问作者Henrique P. Lima

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 19:12:32