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

Vercel生产环境异常:回滚至可用提交仍无法正常运行

本地正常但Vercel生产环境突发模块导出与require错误问题

错误详情

  • 模块导出路径未定义错误:
    Error [ERR_PACKAGE_PATH_NOT_EXPORTED]: Package subpath './cjs/stripe.cjs.node.js' is not defined by "exports" in /.../node_modules/stripe/package.json
    
    Error [ERR_PACKAGE_PATH_NOT_EXPORTED]: Package subpath './dist/index.cjs' is not defined by "exports" in /.../node_modules/express-rate-limit/package.json
    
  • ES模块环境下require未定义错误:尽管项目使用ES6 import语法且package.json设置"type": "module"(本地运行正常),仍出现ReferenceError: require is not defined in ES module scope。

已采取的排查步骤

  • 回滚至之前生产环境可正常运行的提交,问题依旧。
  • 确认Node.js版本:本地为v19.6.1,Vercel使用默认18.x版本,两者近期均无变更。
  • 检查package.json依赖与代码中的导入语句,确认配置正确且版本已锁定。

可能的原因及解决方向

  1. Vercel构建缓存污染
    Vercel会缓存过往构建产物和依赖,即便回滚代码,旧缓存里的依赖可能未被清理,导致新安装依赖与缓存版本冲突。可在Vercel项目设置的「Build & Development Settings」中手动清除构建缓存,再重新部署。

  2. 依赖安装环境差异
    本地与Vercel的包管理器(npm/yarn)或版本可能不一致,导致依赖安装产物不同。比如本地用npm,Vercel默认用yarn,反之亦然;或npm版本差异引发lock文件解析偏差。可在项目根目录添加vercel.json指定包管理器:

    {
      "installCommand": "npm install"
    }
    

    同时确保本地与Vercel使用相同的包管理器版本。

  3. 间接依赖隐性更新
    即便锁定了直接依赖版本,间接依赖(依赖的依赖)可能未被锁定,Vercel安装时拉取了更新后的间接依赖,新版本可能修改了导出结构,引发路径错误。生成完整的package-lock.json(或yarn.lock)并提交到仓库,确保所有依赖版本完全锁定。

  4. Vercel环境配置隐性变更
    Vercel后台可能调整了构建环境默认配置,比如启用更严格的ES模块检查、修改模块解析规则。可在vercel.json中显式指定Node.js版本及运行时:

    {
      "functions": {
        "api/**/*.js": {
          "runtime": "@vercel/node@3.0.10"
        }
      }
    }
    

    同时检查.vercelignore文件是否意外排除了必要的依赖文件。

  5. ES模块与CommonJS混合解析差异
    虽然项目设置了"type": "module",但部分第三方依赖内部仍使用require,Vercel的模块解析逻辑与本地不同,触发错误。可尝试在package.json中添加"exports"字段明确模块导出路径,或在启动命令中加入--experimental-specifier-resolution=node参数(注意兼容性)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 02:20:21