Angular SSR部署Firebase Hosting提示找不到dist/server模块如何解决
问题诊断与解决方案
你遇到的报错由2个核心配置错误导致,按以下步骤修改即可:
1. 路径引用逻辑错误
你当前的引用存在三个明显问题:
- 硬编码了Windows系统的路径分隔符
\\,部署到Firebase的Linux运行环境会直接失效 - 使用
process.cwd()获取工作目录稳定性差,且没有指定SSR的入口文件:Angular SSR打包后的默认服务入口是main.js,Node直接引用dist/server文件夹时会默认查找index.js,找不到就会抛出模块不存在的报错 - 编译后的
index.ts会输出到functions/lib/index.js,你写的相对路径和实际运行时的文件位置不匹配
修复后的index.ts代码
import * as functions from "firebase-functions"; import * as path from "path"; // 用__dirname获取当前脚本的实际所在目录,自动兼容跨平台路径 const universal = require(path.join(__dirname, "../dist/server/main")).app(); export const ssr = functions.https.onRequest(universal);
2. 可选校验:确认复制逻辑正常
你的cp-angular.js逻辑本身没有问题,每次执行npm run build后可以手动检查functions/dist/server/main.js文件是否存在,避免Angular打包路径和你配置的复制源不匹配:
- 确认Angular项目的
angular.json中,server构建的outputPath配置为dist/server - 如果你的Angular打包后
dist下还有一层项目名文件夹,需要同步修改cp-angular.js的src路径
额外优化建议
如果部署后还出现运行报错,可以把package.json中的engines.node版本升级到16或18,Firebase官方已经不再推荐使用Node.js 12运行环境。
内容的提问来源于stack exchange,提问作者Jino John Devasia
相关产品推荐
相关产品推荐

