2. 开发环境搭建:Node.js 与 Yarn 安装、Backstage CLI 工具、创建 Backstage 应用项目

搭建稳定、可复现的开发环境是 Backstage 插件开发的基石。本章将引导你完成从基础运行时安装到项目脚手架初始化的全流程,确保后续章节的示例代码能够在统一的环境中正确运行。

2.1 环境依赖概览

Backstage 应用本质上是基于 Node.js 的 monorepo 项目,依赖以下核心运行时与包管理器:

组件 推荐版本 说明
Node.js 18.x LTS 或 20.x LTS Backstage 1.x 要求 Node.js ≥ 18;推荐使用 LTS 版本以获得长期支持
Yarn 1.22.x (Classic) 或 3.x (Berry) Backstage 官方使用 Yarn Classic;Yarn Berry 需额外配置 nodeLinker
Git ≥ 2.30 用于版本管理和模板初始化时的仓库克隆
Docker (可选) ≥ 20.10 本地运行 PostgreSQL 或测试容器化部署时使用
版本对齐建议: 如果你同时维护多个 Node.js 项目,强烈建议使用 nvm(Node Version Manager)管理 Node.js 版本。Backstage 对 Node.js 版本敏感,使用错误的版本可能导致 node-gyp 编译失败或依赖安装异常。

2.2 Node.js 与 Yarn 安装

2.2.1 安装 Node.js

推荐通过 nvm 安装 Node.js 18 LTS:

# 安装 nvm(macOS / Linux)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

# 重新加载 shell 配置
source ~/.bashrc   # 或 source ~/.zshrc

# 安装 Node.js 18 LTS
nvm install 18

# 设置为默认版本
nvm alias default 18

# 验证版本
node --version   # 应输出 v18.20.x 或类似
npm --version    # 应输出 10.x
Windows 用户注意: nvm 官方不支持 Windows。请使用 nvm-windows(https://github.com/coreybutler/nvm-windows)或直接下载 Node.js 18 LTS 安装包。安装后务必重启终端,确保 node 和 npm 命令可用。

2.2.2 安装 Yarn Classic

Backstage 官方模板默认使用 Yarn Classic(v1.x)。全局安装命令如下:

# 使用 npm 全局安装 Yarn
npm install -g yarn

# 验证版本
yarn --version   # 应输出 1.22.x

如果你希望使用 Yarn Berry(v3.x),需要在创建项目后额外配置 .yarnrc.yml 文件,设置 nodeLinker: "node-modules" 以兼容 Backstage 的 monorepo 结构。

2.3 Backstage CLI 工具

Backstage 提供了一套命令行工具 @backstage/cli,用于项目创建、插件脚手架生成、构建与测试。它封装了 Webpack、Jest、ESLint 等工具的配置,让开发者专注于业务逻辑。

2.3.1 核心命令速查

命令 功能 使用场景
yarn create app 创建新的 Backstage 应用项目 初始化整个服务目录平台
yarn new --select plugin 生成插件脚手架 快速创建插件目录结构与模板代码
yarn dev 启动开发服务器(前端 + 后端) 本地开发与调试
yarn build 构建生产版本 部署前的打包
yarn test 运行测试套件 单元测试与集成测试
yarn backstage-cli versions:check 检查依赖版本一致性 升级 Backstage 版本后校验

2.3.2 CLI 工具的内部工作流程

下图展示了 yarn create app 命令从执行到项目生成的核心流程:

yarn create app 执行流程 用户执行 yarn create app CLI 解析 @backstage/create-app 模板 交互式问答(应用名称等) 生成项目文件 & 安装依赖 模板来源: npm registry 中的 @backstage/create-app
关键理解: Backstage CLI 并非一个独立的二进制文件,而是通过 @backstage/create-app 包提供的交互式脚手架。执行 yarn create app 时,Yarn 会自动从 npm registry 下载该包并执行其入口脚本。

2.4 创建 Backstage 应用项目

2.4.1 使用官方模板初始化

确保 Node.js 和 Yarn 安装正确后,执行以下命令创建新的 Backstage 应用:

# 创建应用(替换 my-backstage 为你的项目名称)
yarn create app my-backstage

# 进入项目目录
cd my-backstage

# 启动开发服务器
yarn dev

在交互式问答中,CLI 会询问以下信息:

  • 应用名称: 默认使用你传入的目录名,如 my-backstage。
  • 是否使用 PostgreSQL: 如果选择 Yes,需要本地运行 PostgreSQL 实例;选择 No 则使用 SQLite 作为默认数据库,适合快速开发。
  • 是否包含示例数据: 建议选择 Yes,以便在开发阶段看到预置的服务目录数据。
首次启动耗时说明: yarn dev 会并行启动前端(默认端口 3000)和后端(默认端口 7007)。首次启动需要编译所有依赖,耗时约 2-5 分钟,具体取决于网络速度和机器性能。后续启动会利用缓存,速度显著提升。

2.4.2 项目目录结构解析

创建成功后,项目根目录结构如下:

my-backstage/
├── app-config.yaml          # 应用配置文件(数据库、集成、插件配置)
├── catalog-info.yaml        # 服务目录实体定义(默认包含示例组件)
├── packages/
│   ├── app/                 # 前端应用(React + Material UI)
│   │   ├── src/
│   │   │   ├── App.tsx      # 前端根组件
│   │   │   └── ...
│   │   └── package.json
│   └── backend/             # 后端应用(Express + 插件后端)
│       ├── src/
│       │   ├── index.ts     # 后端入口
│       │   └── plugins/     # 后端插件目录
│       └── package.json
├── plugins/                 # 自定义插件目录(初始为空)
├── yarn.lock                # 依赖锁定文件
└── package.json             # 根 monorepo 配置(workspaces)

2.4.3 验证安装成功

启动后,在浏览器中访问 http://localhost:3000,应看到 Backstage 的默认首页,包含左侧导航栏和示例服务目录数据。如果页面正常渲染,说明开发环境搭建成功。

2.5 常见问题与排查

问题现象 可能原因 解决方案
yarn create app 卡住或报错 npm registry 访问慢或网络代理问题 设置 npm 镜像源:npm config set registry https://registry.npmmirror.com
启动后前端白屏,控制台报 CORS 错误 后端未正确启动或端口冲突 检查 app-config.yaml 中的 backend.baseUrl 配置;确保 7007 端口未被占用
node-gyp 编译失败 缺少 C++ 编译工具链 macOS 安装 Xcode Command Line Tools;Windows 安装 windows-build-tools
Yarn Berry 报 YN0002 错误 nodeLinker 配置不兼容 在 .yarnrc.yml 中添加 nodeLinker: "node-modules"
性能提示: 在后续开发中,频繁执行 yarn install 会消耗大量时间。建议在 package.json 的 scripts 中添加 "postinstall": "yarn backstage-cli versions:check",在安装后自动检查依赖一致性,避免因版本不匹配导致的运行时错误。

2.6 开发环境架构总览

下图展示了搭建完成后,本地开发环境的组件关系与数据流向:

Backstage 本地开发环境架构 前端应用 React + Material UI 端口 3000 后端应用 Express + 插件后端 端口 7007 数据库 SQLite / PostgreSQL 本地文件 / 端口 5432 HTTP API ORM app-config.yaml 应用配置 catalog-info.yaml 服务目录实体 开发工作流:修改代码 → 前端/后端自动热重载 → 刷新浏览器查看效果 无需手动重启服务器(后端使用 nodemon 监听文件变化)