升级Node.js v18后Vercel部署Node项目报错求助
问题背景
我参考在线入门教程搭建了一个用于Twitch直播的简单TypeScript API,观众使用该CLI在聊天中互动已有2年,运行一直正常。近期更新代码后,Vercel部署失败,提示需升级至Node.js v18;在Vercel项目设置中完成版本升级后,构建部署时出现以下错误:
[10:40:58.919] Running build in Washington, D.C., USA (East) – iad1 [10:40:58.985] Cloning bitbucket.org/JonWiesman/twitchbot (Branch: master, Commit: 2222239) [10:41:00.430] Cloning completed: 1.445s [10:41:00.571] Skipping build cache since Node.js version changed from "16.x" to "18.x" [10:41:01.133] Running "vercel build" [10:41:01.644] Vercel CLI 30.2.3 [10:41:01.893] Installing dependencies... [10:41:02.687] npm WARN old lockfile [10:41:02.687] npm WARN old lockfile The package-lock.json file was created with an old version of npm, [10:41:02.688] npm WARN old lockfile so supplemental metadata must be fetched from the registry. [10:41:02.688] npm WARN old lockfile [10:41:02.688] npm WARN old lockfile This is a one-time fix-up, please be patient... [10:41:02.688] npm WARN old lockfile [10:41:10.357] npm WARN deprecated urix@0.1.0: Please see https://github.com/lydell/urix#deprecated [10:41:10.708] npm WARN deprecated source-map-resolve@0.5.3: See https://github.com/lydell/source-map-resolve#deprecated [10:41:10.835] npm WARN deprecated resolve-url@0.2.1: https://github.com/lydell/resolve-url#deprecated [10:41:10.917] npm WARN deprecated source-map-url@0.4.0: See https://github.com/lydell/source-map-url#deprecated [10:41:11.312] npm WARN deprecated querystring@0.2.0: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. [10:41:12.466] npm WARN deprecated chokidar@2.1.8: Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies [10:41:28.905] [10:41:28.905] added 651 packages in 27s [10:41:28.905] [10:41:28.905] 30 packages are looking for funding [10:41:28.906] run `npm fund` for details [10:41:28.933] Detected Next.js version: 10.0.3 [10:41:28.940] Detected `package-lock.json` generated by npm 7+... [10:41:28.940] Running "npm run build" [10:41:29.238] [10:41:29.238] > with-typescript@1.0.0 build [10:41:29.239] > next build [10:41:29.239] [10:41:29.882] Browserslist: caniuse-lite is outdated. Please run: [10:41:29.882] npx browserslist@latest --update-db [10:41:29.930] node:internal/errors:490 [10:41:29.931] ErrorCaptureStackTrace(err); [10:41:29.931] ^ [10:41:29.931] [10:41:29.931] Error [ERR_PACKAGE_PATH_NOT_EXPORTED]: Package subpath './lib/parser' is not defined by "exports" in /vercel/path0/underbot/node_modules/postcss/package.json [10:41:29.931] at new NodeError (node:internal/errors:399:5) [10:41:29.931] at exportsNotFound (node:internal/modules/esm/resolve:361:10) [10:41:29.931] at packageExportsResolve (node:internal/modules/esm/resolve:697:9) [10:41:29.931] at resolveExports (node:internal/modules/cjs/loader:565:36) [10:41:29.931] at Module._findPath (node:internal/modules/cjs/loader:634:31) [10:41:29.932] at Module._resolveFilename (node:internal/modules/cjs/loader:1061:27) [10:41:29.932] at Module._load (node:internal/modules/cjs/loader:920:27) [10:41:29.932] at Module.require (node:internal/modules/cjs/loader:1141:19) [10:41:29.932] at require (node:internal/modules/cjs/helpers:110:18) [10:41:29.932] at 552 (/vercel/path0/underbot/node_modules/next/dist/compiled/postcss-scss/scss-syntax.js:1:11590) { [10:41:29.932] code: 'ERR_PACKAGE_PATH_NOT_EXPORTED' [10:41:29.933] } [10:41:29.933] [10:41:29.933] Node.js v18.15.0 [10:41:29.955] Error: Command "npm run build" exited with 1 [10:41:30.431] BUILD_UTILS_SPAWN_1: Command "npm run build" exited with 1
尝试执行npm update命令,但系统提示不存在package.json(实际项目中有package-lock.json),不清楚问题根源,希望得到解决方案。
解决方案
1. 解决npm update提示找不到package.json的问题
- 确认执行
npm update的目录是项目根目录,若不是,切换到根目录后重新执行。 - 如果
package.json确实丢失,先运行npm init -y生成基础配置文件,再执行npm install,npm会自动根据package-lock.json同步依赖版本。
2. 修复postcss导出路径错误
这个错误是因为Node.js 18对ES模块导出的解析更严格,而你使用的Next.js 10.0.3依赖的postcss版本不兼容Node.js 18,有两种解决方式:
方式一:升级Next.js到兼容版本
在项目根目录执行:
npm install next@latest
更新完成后,提交更新后的package.json和package-lock.json到仓库,重新触发Vercel构建。
方式二:锁定兼容的postcss版本
在package.json的dependencies或devDependencies中添加:
"postcss": "^8.4.21"
然后执行:
npm install
提交更新后的文件到仓库,重新部署。
3. 清理旧依赖缓存
删除项目根目录的node_modules文件夹和package-lock.json文件,然后执行:
npm install
重新生成适配Node.js 18的依赖文件,避免旧版本冲突。
内容的提问来源于stack exchange,提问作者JonWiesman
相关产品推荐
相关产品推荐

