如何解决Angular Universal部署Firebase Functions的npm依赖冲突
问题
部署Angular Universal项目时,npm run build:ssr编译正常、模拟器运行无问题,但执行firebase deploy时触发npm依赖冲突错误,具体错误日志如下:
=== Deploying to 'terabulkssr2'... i deploying functions, hosting i functions: ensuring required API cloudfunctions.googleapis.com is enabled... i functions: ensuring required API cloudbuild.googleapis.com is enabled... i artifactregistry: ensuring required API artifactregistry.googleapis.com is enabled... + artifactregistry: required API artifactregistry.googleapis.com is enabled + functions: required API cloudbuild.googleapis.com is enabled + functions: required API cloudfunctions.googleapis.com is enabled i functions: preparing codebase default for deployment i functions: preparing functions directory for uploading... i functions: packaged C:\Users\Fujitsu\terabulk\terabulk-front-ssr\dist\functions (14.54 MB) for uploading + functions: functions folder uploaded successfully i hosting[terabulkssr2]: beginning deploy... i hosting[terabulkssr2]: found 335 files in functions + hosting[terabulkssr2]: file upload complete i functions: updating Node.js 16 function ngssr(us-central1)... Build failed: npm ERR! code ERESOLVE npm ERR! ERESOLVE could not resolve npm ERR! npm ERR! While resolving: @nguniversal/module-map-ngfactory-loader@8.2.6 npm ERR! Found: @angular/common@14.1.3 npm ERR! node_modules/@angular/common npm ERR! @angular/common@"^14.1.3" from the root project npm ERR! peer @angular/common@"^14.0.0 || ^15.0.0" from @angular/cdk@14.1.3 npm ERR! node_modules/@angular/cdk npm ERR! @angular/cdk@"^14.1.2" from the root project npm ERR! 18 more (@angular/fire, @angular/forms, ...) npm ERR! npm ERR! Could not resolve dependency: npm ERR! peer @angular/common@"^8.2.0" from @nguniversal/module-map-ngfactory-loader@8.2.6 npm ERR! node_modules/@nguniversal/module-map-ngfactory-loader npm ERR! @nguniversal/module-map-ngfactory-loader@"^8.2.6" from the root project npm ERR! npm ERR! Conflicting peer dependency: @angular/common@8.2.14 npm ERR! node_modules/@angular/common npm ERR! peer @angular/common@"^8.2.0" from @nguniversal/module-map-ngfactory-loader@8.2.6 npm ERR! node_modules/@nguniversal/module-map-ngfactory-loader npm ERR! @nguniversal/module-map-ngfactory-loader@"^8.2.6" from the root project npm ERR! npm ERR! Fix the upstream dependency conflict, or retry npm ERR! this command with --force, or --legacy-peer-deps npm ERR! to accept an incorrect (and potentially broken) dependency resolution. npm ERR! npm ERR! See /www-data-home/.npm/eresolve-report.txt for a full report. npm ERR! A complete log of this run can be found in: npm ERR! /www-data-home/.npm/_logs/2022-08-20T16_19_35_316Z-debug-0.log; Error ID: beaf8772 Functions deploy had errors with the following functions: ngssr(us-central1) i functions: cleaning up build files... Error: There was an error deploying functions
错误核心是@nguniversal/module-map-ngfactory-loader@8.2.6要求peer依赖@angular/common@^8.2.0,但项目使用的是@angular/common@14.1.3,版本不兼容。尝试firebase deploy --force无效,需解决依赖冲突或强制完成部署。
解决方案
一、彻底修复依赖冲突(推荐)
@nguniversal/module-map-ngfactory-loader在Angular 10及以后版本已被官方弃用,Angular 14无需该包,直接移除即可:
- 执行命令卸载依赖:
npm uninstall @nguniversal/module-map-ngfactory-loader
- 检查项目代码(如
app.server.module.ts),移除所有对该包的引用,替换为Angular 14原生的SSR路由配置逻辑。
二、强制Firebase云端构建忽略peer依赖(临时方案)
若需临时跳过依赖冲突完成部署,可通过firebase.json配置让云端执行npm安装时添加--legacy-peer-deps参数:
- 打开项目根目录的
firebase.json文件 - 修改
functions配置,添加predeploy命令:
{ "functions": { "predeploy": ["npm --prefix \"$RESOURCE_DIR\" install --legacy-peer-deps"] } }
- 重新执行
firebase deploy,此时云端构建会忽略peer依赖冲突完成安装。
内容的提问来源于stack exchange,提问作者Adam Howard
相关产品推荐
相关产品推荐

