QuickBot 前端工程实战:基于 Imagen3 文生图应用的 Angular 开发、构建与代码规范
【免费下载链接】generative-aiSample code and notebooks for Generative AI on Google Cloud, with Gemini Enterprise Agent Platform项目地址: https://gitcode.com/GitHub_Trending/ge/generative-ai
本文以 QuickBot 系列模板中的 text-to-image-using-imagen3 为例,系统讲解其 Angular 前端工程(前端目录 frontend)的开发、构建、测试与部署全流程。QuickBot 是一个可直接部署到 Cloud Run 的模板集合,每个模板都是前后端分离架构:前端为 Angular 应用,后端为 FastAPI Python 应用。阅读本文后,你将掌握该前端工程的本地开发服务器、代码脚手架、生产构建、单元测试与端到端测试等标准命令,同时理解它与 Imagen3 文生图后端的对接方式(后端目录)以及 Docker 容器化部署的配置细节。
QuickBot 模板架构概览
QuickBot 是一组开箱即用的应用模板,每个模板可以独立运行并接入用户默认的 Google Cloud 认证凭据;根据模板复杂度不同,部署时需要在 Google Cloud 项目中创建相应资源。整个架构始终遵循同样的结构:frontend目录存放 Angular 前端应用,backend目录存放 FastAPI Python 后端应用,两者通过 HTTP 接口解耦通信。
以 text-to-image-using-imagen3 为例,应用借助 Vertex AI 上的 Imagen3 模型,让用户通过文本提示词(prompt)生成高质量图片。整体项目结构如下(可对照 根目录 README):
text-to-image-using-imagen3/ ├── backend/ # Python 后端(FastAPI/Uvicorn) │ ├── main.py # 后端主应用入口 │ ├── requirements.txt # 后端依赖 │ └── README.md # 后端专项说明 ├── frontend/ # TypeScript 前端(Angular) │ ├── src/ # 前端源码 │ ├── package.json # 前端依赖与脚本 │ ├── angular.json # Angular 工程配置 │ ├── nginx.conf # 生产环境 Nginx 配置 │ ├── Dockerfile # 前端容器构建文件 │ └── README.md # 前端专项说明(本文主题文档) ├── docker-compose.yml # 一键编排前后端服务 └── README.md # 项目根说明本前端工程由Angular CLI 15.1.3生成(见 package.json 中@angular/cli与@angular/core均声明为^15.1.x)。需要特别说明的是,前端 README 中列出的命令(ng serve、ng build、ng test等)是 Angular CLI 的标准工作流,而本文结合工程内真实的 package.json 脚本与 angular.json 配置,将每一条命令映射到实际可运行的脚本,使其真正可复制、可执行。
本地开发服务器:ng serve
进入frontend/目录后执行:
cd frontend ng serveAngular CLI 会启动开发服务器并监听http://localhost:4200/,修改任意源文件时应用会自动重新加载(热更新)。在 package.json 中,start脚本就是ng serve,因此直接运行npm start效果相同。
开发模式下,Angular 使用src/environments/environment.ts作为运行时配置(environment.ts),其中backendURL: 'http://localhost:8080/api'指向本地 FastAPI 后端,requiredLogin: 'False'表示无需强制登录即可使用。
代码脚手架:ng generate
Angular CLI 提供标准的代码生成能力:
ng generate component component-name也可以生成其他类型的代码单元:
ng generate directive|pipe|service|class|guard|interface|enum|module在该工程中,src/app/components 下已包含header、footer、login、main(内含chat-input、search-results)与toast-message等组件,src/app/services 下包含login、user等目录以及search.service.ts、speech-to-text.ts。这些目录结构可以作为你后续ng generate的命名与组织参考。
提示:工程在 angular.json 中通过
@schematics/angular:component将组件默认样式语言配置为scss,因此生成的新组件会以.scss为样式文件扩展名。
构建:ng build 与多环境配置
执行标准构建命令:
ng build构建产物会输出到dist/目录(本工程实际输出路径为dist/quick-bot-app-frontend,见 angular.json 的outputPath)。
工程在 package.json 中定义了多套构建脚本,可直接使用:
"build:prod": "ng build --configuration production --aot --output-hashing=all", "build:dev": "ng build --configuration development", "build:staging": "ng build --configuration staging", "build": "ng build", "watch": "ng build --watch --configuration development"npm run build:prod:生产构建,启用 AOT 预编译,并对产物文件做全量内容哈希(--output-hashing=all),便于浏览器长效缓存;angular.json 中 production 配置还包含体积预算:初始包警告上限 4MB、错误上限 10MB,单组件样式警告 20KB、错误 50KB。npm run build:dev/npm run build:staging:开发与预发布环境构建,后者依赖staging配置(可按需在angular.json中补充对应的environment.staging.ts文件)。npm run watch:监听源码变化并持续增量构建。
生产构建的默认配置在 angular.json 中为defaultConfiguration: "production",同时工程引入了 Tailwind CSS(tailwind.config.js)与 Angular Material 主题(构建配置中@angular/material/prebuilt-themes/indigo-pink.css)。
容器化构建与 Nginx 部署
前端 Dockerfile 采用两阶段构建:
FROM node:18.17.1-alpine AS builder WORKDIR /app COPY . /app/ RUN npm ci RUN npm run build:prod FROM nginx:alpine COPY --from=builder /app/dist/quick-bot-app-frontend /usr/share/nginx/html COPY --from=builder /app/nginx.conf /etc/nginx/conf.d/ EXPOSE 8080- 第一阶段使用 Node 18 安装依赖(
npm ci,基于package-lock.json保证可复现)并执行npm run build:prod产出静态文件; - 第二阶段基于
nginx:alpine将构建产物复制到 Nginx 的 HTML 根目录,并挂载 nginx.conf。该配置监听 8080 端口,并通过try_files $uri $uri/ /index.html;实现 Angular 路由的 SPA 回退,确保前端路由刷新不产生 404。
单元测试:ng test(Karma + Jasmine)
执行单元测试:
ng test测试运行器基于 Karma。本工程在 angular.json 中使用@angular-devkit/build-angular:karmabuilder,测试配置通过tsconfig.spec.json引入。工程为每个组件与服务都编写了对应的.spec.ts测试文件,例如 search.service.spec.ts、auth.guard.spec.ts 以及各组件的*.component.spec.ts。
在 package.json 中,测试链路还串联了类型检查与代码规范检查:
"pretest": "npm run compile", "posttest": "npm run lint"即运行npm test时,Angular 会先执行 TypeScript 编译(compile→tsc),测试结束后自动执行lint(gts lint)。
端到端测试:ng e2e
执行端到端测试:
ng e2e端到端测试通过你选择的平台运行。需要注意的是,使用该命令前需要先添加一个实现了端到端测试能力的 npm 包(例如 Cypress、Playwright 或 Protractor 等)。本工程默认并未内置 e2e 测试框架依赖,因此在执行前需要自行安装并配置对应的端到端测试包。
进一步帮助
如需了解更多 Angular CLI 用法,可运行:
ng help查看完整的 CLI 命令参考,也可以查阅 Angular CLI Overview and Command Reference 文档(package.json 中@angular/cli版本为 15.1.3,注意命令行为以对应版本为准)。
前端与后端的对接方式
前端通过依赖注入的SearchService与后端通信(见 search.service.ts):
const searchURL = `${environment.backendURL}/search`; @Injectable({providedIn: 'root'}) export class SearchService { constructor(private http: HttpClient) {} search(searchRequest: SearchRequest) { return this.http .post(searchURL, searchRequest) .pipe(map(response => response as CombinedImageResults)); } }- 请求地址由
environment.backendURL(默认http://localhost:8080/api)与/search拼接而成,向 FastAPI 后端的/api/search接口发起POST请求; - 请求体为 search.model.ts 中定义的
SearchRequest(即用户输入的文生图提示词),响应被映射为 generated-image.model.ts 中的CombinedImageResults,再由search-results组件渲染生成结果。
在 docker-compose.yml 中,前后端容器通过端口映射联通:后端映射8080:8080,前端映射4200:8080(即访问宿主机 4200 端口进入 Nginx 服务的前端静态页面),前端开发时使用的backendURL指向后端容器的 8080 端口。
代码规范与提交规范
为了维护代码质量与一致性,QuickBot 系列遵循以下约定:
- TypeScript(前端):遵循 Angular Coding Style Guide,借助 Google 的
gts(Google TypeScript Style Guide)工具链,包含格式化器、lint 器与自动修复器; - Python(后端):遵循 Google Python Style Guide,使用
pylint与black进行 lint 与格式化; - 提交信息:建议遵循 Angular 的 Commit Message Guidelines,编写清晰、描述性的提交说明。
前端(TypeScript + gts)
初始化
gts(若工程尚未配置):在frontend/目录下执行:npx gts init这会配置
gts并生成必要的配置文件(如tsconfig.json)。确保tsconfig.json(或相关的 gts 配置文件,如.gtsrc)继承gts默认配置:{ "extends": "./node_modules/gts/tsconfig-google.json" }本工程已在 package.json 中声明
gts: ^5.3.1作为 devDependency,并定义了对应脚本:"lint": "gts lint", "fix": "gts fix", "clean": "gts clean", "compile": "tsc", "format": "prettier --write \"src/**/*.{ts,html,scss,json}\"", "check-format": "prettier --check \"src/**/*.{ts,html,scss,json}\""检查 lint 问题:
npm run lint对应 package.json 中的
"lint": "gts lint"。自动修复可修复的 lint 问题:
npm run fix对应
"fix": "gts fix"。此外工程还额外集成了 Prettier(format/check-format脚本)用于统一 TS/HTML/SCSS/JSON 的格式化风格。
后端(Python + pylint + black)
安装依赖:将
pylint与black加入backend/requirements.txt:pylint black然后在虚拟环境中安装:
pip install pylint black # 或 pip install -r requirements.txt本工程的 backend/requirements.txt 已包含相关依赖,且
backend/目录下提供现成的 pylintrc 配置文件,无需再从零生成。配置
pylint:建议在backend/目录放置.pylintrc以配置规则。若没有现成配置,可通过pylint --generate-rcfile > .pylintrc生成标准模板后再按项目需求(参考 Google Python Style Guide)定制。本工程直接使用目录内的pylintrc即可。使用
pylint检查代码:进入backend/目录执行:pylint .或指定具体模块/包:
pylint your_module_name。使用
black格式化代码:自动格式化当前目录及子目录下所有 Python 文件:python -m black . --line-length=80--line-length=80指定行宽上限为 80 字符,与 Google Python Style Guide 的默认约定一致。
结合源码的工程实践要点
依赖锁文件:前端根目录包含 package-lock.json,配合 Dockerfile 中的
npm ci,可保证 CI/CD 与本地构建依赖完全一致,避免版本漂移。后端
local.env:手动运行后端时,需要在backend/目录准备本地环境变量文件。以 backend/local.env 为参考,关键变量包括ENVIRONMENT(如development)、FRONTEND_URL(如http://localhost:4200)以及 Google Cloud / Vertex AI 相关配置(项目 ID、区域、Imagen3 模型 ID 等)。Linux bash 用户可将export追加到backend/.venv/bin/activate的 PATH 导出之后,再通过env验证变量生效。Google Cloud 认证:无论本地手动运行还是 Docker 部署,都需要让应用(尤其是后端)能访问 Vertex AI 上的 Imagen3。推荐使用 Application Default Credentials(ADC):
gcloud auth application-default login gcloud config set project <your-project-id> gcloud auth application-default set-quota-project <your-project-id> # 验证配置 gcloud auth list gcloud config list projectdocker-compose.yml 将宿主机
~/.config/gcloud/(Linux/macOS)以只读方式挂载到后端容器:ro,并将GOOGLE_APPLICATION_CREDENTIALS指向容器内的application_default_credentials.json,实现本地 ADC 直接透传。Windows 用户需改为挂载%APPDATA%/gcloud对应路径。请确保目标项目已启用 Vertex AI API。完整启动流程:在满足前置条件(Docker 与 Docker Compose v2、Google Cloud SDK、Python 3.x、Node.js/npm)后,最快的一键启动方式是:
docker compose build docker compose up随后访问
http://localhost:4200(前端)与http://localhost:8080(后端 API)。手动开发模式下,后端用uvicorn main:app --reload --port 8080启动(见 backend/main.py),前端用npm start启动。
以上内容以 frontend/README.md 为骨架,结合工程内真实的 package.json、angular.json、Dockerfile、nginx.conf、docker-compose.yml 等源码与配置做了纵深补充。你可以基于这些命令和配置,将 QuickBot 前端模板改造成自己的文生图应用界面,并直接部署到 Cloud Run。
【免费下载链接】generative-aiSample code and notebooks for Generative AI on Google Cloud, with Gemini Enterprise Agent Platform项目地址: https://gitcode.com/GitHub_Trending/ge/generative-ai
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考