Angular 12是否支持@ng-toolkit/universal实现AWS Lambda无服务器部署
Angular 12 结合 @ng-toolkit 部署 AWS Lambda 问题解决方案
@ng-toolkit 系列包已停止维护,最新稳定版仅兼容 Angular 8 及更低版本,你遇到的依赖不匹配、构建报错均为版本不兼容导致。
现有报错修复步骤
- 第一步:卸载所有不兼容依赖
执行命令清除已安装的冲突包:npm uninstall @ng-toolkit/universal @ng-toolkit/serverless @nguniversal/express-engine @nguniversal/module-map-ngfactory-loader webpack-cli - 第二步:安装适配 Angular 12 的官方 Universal 包
Angular 12 对应兼容的 @nguniversal 版本为 12.1.x,执行命令自动生成所需的 server.module.ts、browser.module.ts 等文件和构建脚本:ng add @nguniversal/express-engine@12.1.5 - 第三步:锁定依赖版本兼容 ng-toolkit
如果必须使用 @ng-toolkit/serverless 做部署,先在 package.json 中添加依赖锁定规则(npm 8+ 支持 overrides,yarn 使用 resolutions),强制指定 @nguniversal/express-engine 版本为 12.1.5,避免安装时拉取不存在的版本。再安装适配 webpack 5 的 webpack-cli 4.x 版本,解决Cannot read property 'properties' of undefined报错:npm install webpack-cli@4.10.0 @ng-toolkit/serverless --save-dev - 第四步:调整构建配置
检查 angular.json 配置:浏览器端构建 outputPath 设为dist/browser,服务端构建 outputPath 设为dist/server。修改 package.json 中的 build:prod 脚本为:"build:prod": "ng build --configuration production && ng run <替换为你的项目名>:server:production"
重新执行npm run build:prod即可完成构建。
更稳定的无服务器部署替代方案
@ng-toolkit 停更后存在大量兼容性问题,推荐使用以下更适配 Angular 12 的部署方案:
- 方案一:Angular Universal + serverless-http 手动部署
- 完成官方 @nguniversal/express-engine 安装后,安装 serverless 相关依赖:
npm install serverless-http @types/aws-lambda --save - 根目录新建 lambda 入口文件,将 Universal 生成的 express 服务实例包装为 AWS Lambda 可识别的 handler
- 配置 serverless.yml,指定运行时为 nodejs14.x,绑定 API Gateway 触发路由
- 构建完成后将 dist 文件夹、入口文件、生产依赖打包上传到 Lambda 即可
- 完成官方 @nguniversal/express-engine 安装后,安装 serverless 相关依赖:
- 方案二:AWS Amplify 托管
AWS Amplify 原生支持 Angular 12 SSR 应用的构建和部署,无需手动适配 Universal 配置,提交代码到关联的代码仓库即可自动完成构建、资源分发、Lambda 配置全流程。
内容的提问来源于stack exchange,提问作者Rithicka
相关产品推荐
相关产品推荐

