将基于ES6 Modules的Express.js应用部署到Vercel遇错求助
解决Express ES6模块部署Vercel时的require未定义错误
错误根源
Vercel默认的启动脚本___now_launcher.js采用CommonJS语法编写,但你的项目通过package.json里的"type": "module"声明为ES模块,导致脚本中的require调用在ES模块环境中失效。
解决方案
指定自定义启动命令
在项目的package.json中修改scripts字段,直接用Node.js启动你的Express入口文件,绕开Vercel的默认启动器:"scripts": { "start": "node server.js", "vercel-build": "echo 'Build completed'" }注意:把
server.js替换成你实际的项目入口文件名。确认ES模块配置
确保package.json中已正确声明:"type": "module"同时检查项目中所有
.js文件的导入语法,统一使用ES模块的import替代CommonJS的require,比如:// 替换前 const express = require('express') // 替换后 import express from 'express'配置Vercel项目设置
登录Vercel控制台,进入你的项目:- 打开「Settings」→「Build & Development Settings」
- 将「Build Command」设置为
npm run vercel-build(如果项目无需构建步骤,此命令仅作占位用) - 「Output Directory」留空(Express项目通常无需指定输出目录)
- 「Install Command」保持默认的
npm install即可
修正本地文件导入路径
ES模块要求导入本地文件时必须添加扩展名,比如:// 错误写法 import router from './routes' // 正确写法 import router from './routes.js'
内容的提问来源于stack exchange,提问作者Lakween Senathilake
相关产品推荐
相关产品推荐

