部署至Vercel时npm run build报错退出1:EventEmitter导出异常
问题详情
本地运行正常,但部署到Vercel时构建报错,具体错误信息:
✓ 1403个模块已转换。
✓ 构建完成耗时4.88秒
"EventEmitter" 未被 "__vite-browser-external" 导出,被 "node_modules/@walletconnect/jsonrpc-provider/dist/esm/provider.js" 导入。
文件路径:/vercel/path0/onchain-roullete/node_modules/@walletconnect/jsonrpc-provider/dist/esm/provider.js:1:9
1: import { EventEmitter } from "events";
^
2: import { IJsonRpcProvider, isJsonRpcResponse, formatJsonRpcRequest, isJsonRpcError, getBigIntRpcId, } from "@walletco...
3: export class JsonRpcProvider extends IJsonRpcProvider {
构建期间出错:
RollupError: "EventEmitter" 未被 "__vite-browser-external" 导出,被 "node_modules/@walletconnect/jsonrpc-provider/dist/esm/provider.js" 导入。
at error (file:///vercel/path0/onchain-roullete/node_modules/rollup/dist/es/shared/node-entry.js:2245:30)
at Module.error (file:///vercel/path0/onchain-roullete/node_modules/rollup/dist/es/shared/node-entry.js:13604:16)
at Module.traceVariable (file:///vercel/path0/onchain-roullete/node_modules/rollup/dist/es/shared/node-entry.js:14029:29)
at ModuleScope.findVariable (file:///vercel/path0/onchain-roullete/node_modules/rollup/dist/es/shared/node-entry.js:12547:39)
at ChildScope.findVariable (file:///vercel/path0/onchain-roullete/node_modules/rollup/dist/es/shared/node-entry.js:7082:38)
at ClassBodyScope.findVariable (file:///vercel/path0/onchain-roullete/node_modules/rollup/dist/es/shared/node-entry.js:7082:38)
解决方案
错误根源是events是Node.js核心模块,浏览器环境不支持,Vite默认将其标记为外部依赖,但@walletconnect/jsonrpc-provider在浏览器构建中错误导入了它,可通过以下方式解决:
- 配置Vite别名替换EventEmitter
先安装浏览器兼容的EventEmitter实现:
npm install @ungap/events --save
然后在vite.config.js中添加别名配置:
import { defineConfig } from 'vite' export default defineConfig({ resolve: { alias: { events: '@ungap/events', }, }, optimizeDeps: { include: ['@ungap/events'], }, })
- 使用Node Polyfill插件
安装插件:
npm install vite-plugin-node-polyfills --save-dev
修改vite.config.js注入兼容实现:
import { defineConfig } from 'vite' import { nodePolyfills } from 'vite-plugin-node-polyfills' export default defineConfig({ plugins: [ nodePolyfills({ include: ['events'], }), ], })
- 升级WalletConnect依赖
旧版本的@walletconnect/jsonrpc-provider可能存在浏览器兼容缺陷,尝试升级到最新稳定版:
npm update @walletconnect/jsonrpc-provider
内容的提问来源于stack exchange,提问作者Donatus Prince

