3. 脚手架搭建:使用 npx @backstage/create-app 创建基线项目

本章进入实战环节的第一步——搭建 Backstage 基线项目。通过官方脚手架工具 @backstage/create-app,你将在本地快速生成一个包含核心服务、前端应用和后端插件的标准项目骨架。这个骨架是后续所有控制平面接口调用与插件集成工作的基础。

3.1 环境准备与前置检查

在执行脚手架命令之前,请确保你的开发环境满足以下最低要求。缺失任何一项都可能导致创建失败或运行时异常。

依赖项 最低版本 验证命令 说明
Node.js 18.x 或 20.x LTS node --version 推荐使用 20.x,对 ESM 和性能支持更好
Yarn 1.22.x (Classic) yarn --version Backstage 依赖 Yarn Classic 的工作空间机制
Git 2.30+ git --version 用于版本管理和后续插件模板下载
Docker (可选) 20.10+ docker --version 本地运行 PostgreSQL 或测试容器化部署时必需
版本对齐建议: 如果你同时管理多个 Node.js 版本,建议使用 nvm 或 fnm 切换到 20.x LTS。Backstage 社区对 18.x 的兼容性测试正在逐步减少,使用 20.x 可以避免潜在的依赖安装问题。

3.2 执行脚手架命令

打开终端,进入你希望存放项目的父目录(例如 ~/workspace/),然后运行以下命令:

npx @backstage/create-app@latest

命令执行后,交互式 CLI 会引导你完成以下步骤:

  1. 输入项目名称 —— 例如 backstage-platform,该名称将作为目录名和 package.json 中的 name 字段。
  2. 选择数据库类型 —— 推荐选择 SQLite(开发阶段)或 PostgreSQL(生产准备)。本课程后续章节将使用 PostgreSQL 演示控制平面接口的持久化。
  3. 等待依赖安装 —— 脚手架会自动执行 yarn install,安装约 2000+ 个依赖包,耗时取决于网络状况。
常见失败场景: 如果安装过程中出现 ETIMEOUT 或 ENOENT 错误,请检查网络代理设置,或尝试使用 yarn config set registry https://registry.npmmirror.com 切换到国内镜像源。安装完成后务必执行 yarn install --frozen-lockfile 验证依赖完整性。

3.3 基线项目结构解析

创建成功后,项目根目录的结构如下。理解每个顶层目录和关键文件的职责,是后续插件开发和接口调用的前提。

backstage-platform/
├── app-config.yaml              # 全局应用配置(前端+后端)
├── app-config.local.yaml        # 本地覆盖配置(不提交到 Git)
├── catalog-info.yaml            # 实体目录定义(软件模板、API 等)
├── lerna.json                   # Lerna 多包管理配置
├── package.json                 # 根工作空间定义
├── packages/
│   ├── app/                     # 前端应用(React + Material UI)
│   │   ├── src/
│   │   │   ├── App.tsx          # 前端路由与插件挂载入口
│   │   │   └── ...
│   │   └── package.json
│   ├── backend/                 # 后端服务(Express + 插件后端)
│   │   ├── src/
│   │   │   ├── index.ts         # 后端启动入口
│   │   │   ├── plugins/         # 后端插件注册目录
│   │   │   └── ...
│   │   └── package.json
│   └── README.md
├── plugins/                     # 自定义插件目录(初始为空)
└── yarn.lock
关键文件速查:
  • app-config.yaml —— 控制平面接口的地址、认证密钥、数据库连接等全局配置均在此文件定义。
  • packages/backend/src/index.ts —— 后端服务的启动入口,所有后端插件和中间件在此注册。
  • packages/app/src/App.tsx —— 前端路由表,决定每个插件页面在哪个路径下渲染。

3.4 启动基线项目并验证

进入项目目录,使用以下命令同时启动前端和后端开发服务器:

cd backstage-platform
yarn dev

启动成功后,终端会输出类似以下信息:

backend:  [1] 2024-12-01T10:00:00.000Z backstage info  Listening on :7007
frontend: [0] 2024-12-01T10:00:01.000Z backstage info  webpack compiled successfully
frontend: [0] ℹ 「wdm」: Compiled successfully.

打开浏览器访问 http://localhost:3000,你应该能看到 Backstage 的默认首页,包含顶部导航栏、软件目录入口和“Create Component”按钮。这表明基线项目已成功运行。

验证控制平面接口可用性: 在浏览器中打开开发者工具(F12),切换到 Network 标签,刷新页面。你应该能看到对 http://localhost:7007/api/catalog/entities 的 GET 请求返回 200 状态码和 JSON 数据。这个端点就是 Backstage 控制平面的核心接口之一——软件目录查询接口。

3.5 基线项目架构总览

下面的 SVG 图展示了基线项目中前端、后端、数据库以及外部控制平面接口之间的调用关系。理解这个架构有助于你在后续章节中定位插件集成点。

Backstage 基线项目架构图 Backstage 基线项目架构总览 前端应用 packages/app React + Material UI 后端服务 packages/backend Express + 插件后端 数据库 SQLite / PostgreSQL 实体与配置持久化 控制平面接口层 Catalog API · Scaffolder API · TechDocs API · Auth API 统一暴露在 :7007/api/* 路径下 HTTP REST Knex ORM 直接调用 内部路由 说明: 前端通过 HTTP 直接调用控制平面接口(如 /api/catalog),后端则通过内部路由调用同一套接口。 数据库仅由后端服务访问,前端不直接操作数据库。

3.6 验证清单与常见问题

完成基线项目创建后,请对照以下清单逐项确认,确保环境就绪:

检查项 验证方法 预期结果
前端页面可访问 浏览器打开 http://localhost:3000 显示 Backstage 默认首页,无白屏或 404
后端服务健康 访问 http://localhost:7007/api/health 返回 JSON {"status":"ok"}
目录接口可用 访问 http://localhost:7007/api/catalog/entities 返回空数组 [] 或包含默认实体
配置文件加载 查看后端启动日志 无 ConfigNotFound 或 ValidationError
依赖安装完整 执行 yarn install --frozen-lockfile 无依赖冲突或缺失警告
端口冲突处理: 如果 :3000 或 :7007 已被占用,可以在 app-config.yaml 中修改 app.baseUrl 和 backend.listen.port 字段。修改后需要重新执行 yarn dev 使配置生效。

3.7 本章小结