Angular12 SSR部署Firebase函数时报createRequire不存在错误如何解决
错误根因
报错TypeError: module__default.default.createRequire is not a function的核心原因是:createRequire是Node.js v12.2.0版本才新增的内置API,你当前的运行环境为Node 10,而新版@firebase/firestore包的Node端实现已经依赖了这个API,因此在Node 10环境下无法正常加载运行。
之前部署正常是因为旧版本的@firebase/firestore没有用到该API,依赖包自动升级后就触发了兼容性问题。
修复方案
可根据项目实际情况选择以下任意一种方案:
方案一:升级Node.js运行环境(推荐)
- 将本地开发环境的Node.js版本升级到v12.2.0及以上,优先选择v14 LTS版本,兼容性更稳定
- 修改Firebase Functions的运行时配置,打开
functions目录下的package.json,新增/修改engines字段:
{ "engines": { "node": "14" } }- 重新执行依赖安装、构建、部署流程即可
方案二:锁定
@firebase/firestore兼容版本
若暂时无法升级Node.js版本,可以将@firebase/firestore锁定到支持Node 10的最后一个版本:- 执行命令安装指定版本:
npm install @firebase/firestore@3.4.0 --save - 若使用yarn作为包管理器,可以在
package.json中增加resolutions字段强制锁定版本:
{ "resolutions": { "@firebase/firestore": "3.4.0" } }- 重新构建部署即可,该方案为临时兼容方案,后续还是建议尽快升级Node.js版本,避免出现其他依赖的兼容性问题。
- 执行命令安装指定版本:
方案三:调整SSR构建逻辑
若SSR端不需要用到Firestore功能,可以在angular.json的SSR构建配置中,将@firebase/firestore加入外部依赖排除列表,避免将其打包进服务端bundle;也可以在代码中增加运行环境判断,仅在客户端侧加载Firestore相关逻辑。
内容的提问来源于stack exchange,提问作者chadoulis
相关产品推荐
相关产品推荐

