Appearance
第 1 步:创建项目并跑通主子应用
本教程从空目录开始,使用 CLI 创建一个基座和一个 Vue 子应用,先在没有后端的情况下跑通“基座登录 → 菜单 → 子应用列表 → 详情页签”。下一章再接 HTTP 接口和独立登录,第三章替换为订单业务页。
本章使用模板已提供的启动、缓存和路由装配。创建后按下文修改配置即可,不需要另外创建 host/runtime 或自行调用 Wujie startApp。
1. 准备环境与确定版本
使用 Node.js 22 LTS 和 npm;模板最低要求 Node.js 18。本教程统一使用 npm,团队使用 pnpm 时可换为对应的 install/run 命令。
sh
node --version
npm --version以下创建命令要求 registry 已发布包含本教程功能的 @axewo/fin-micro。团队锁定版本时,将两条命令中的 @latest 都替换为同一个已发布版本;保留生成的 package.json 依赖组合,安装后提交 lock 文件。
当前仓库与已发布包
本手册与当前仓库模板同步,仓库修改不会自动进入 npm。仓库内 review 可以用 node packages/fin-micro/cli/index.mjs create ... 生成最新源码,但生成项目仍安装 package.json 指定的依赖;仅换 CLI 路径不代表已安装最新运行库。尚未发布配套包时,先按本地候选包验收取得配套包,不能用旧运行库硬套新模板。
2. 创建两个项目
在准备存放项目的父目录执行。目标目录必须不存在,创建器不会覆盖已有项目,也不会自动安装依赖。
sh
mkdir micro-lab
cd micro-lab
npx @axewo/fin-micro@latest create my-host --template host --layout standard --port 7100
npx @axewo/fin-micro@latest create order-app --template vue --layout standard --app-id order --port 7101text
micro-lab/
├─ my-host/ # 基座:登录、后台菜单、工作区、页签
└─ order-app/ # 子应用:业务页面、独立登录、本地路由本教程先使用 standard 公共布局;需要维护自己的完整布局源码时,创建阶段改为 --layout custom,认证和页面接入步骤一致。
打开第一个终端,从 micro-lab 父目录安装基座依赖:
sh
cd micro-lab/my-host
npm install
npm run check:runtime第二个终端从 micro-lab 父目录安装子应用依赖:
sh
cd micro-lab/order-app
npm install
npm run check:runtime若终端已经在 micro-lab,只执行 cd my-host 或 cd order-app。两次能力检查都应成功;失败先处理缺包、旧包或版本组合,暂不继续改页面。
3. 配置基座指向子应用
新建 my-host/.env.local,完整内容为:
dotenv
VITE_AUTH_DEMO=true
VITE_MICRO_APP_ID=order
VITE_MICRO_APP_ENTRY=http://localhost:7101新建 order-app/.env.local,完整内容为:
dotenv
VITE_MICRO_AUTH_MODE=auto| 配置 | 本教程的值 | 作用 |
|---|---|---|
子应用创建参数 --app-id | order | 写入子应用身份与启动校验 |
基座 VITE_MICRO_APP_ID | order | 登记同一个子应用 |
| 子应用 Vite 端口 | 7101 | 子应用资源服务器 |
基座 VITE_MICRO_APP_ENTRY | http://localhost:7101 | 子应用 HTML 入口,不是业务 /list 路由 |
.env.example 只是说明文件,不会自动生效。修改 env 或 Vite 配置后要重启对应服务器。全文统一使用 localhost,不要在联调中交替使用 127.0.0.1,以免 Cookie、存储和 Origin 不一致。
4. 启动并登录基座
两个终端各自在对应项目内运行:
sh
npm run dev在浏览器地址栏输入 http://localhost:7100/,使用基座开发演示账号 demo / 123456。
预期:登录后出现“演示用户”、本地主页和左侧“业务应用工作区 / 示例记录”。点击“示例记录”,工作区内出现子应用列表,顶部多一个业务页签。嵌入时子应用不会再显示一套登录页和侧栏。
当前没有启动后端。基座开发演示生成固定公开身份、demo:read 权限和列表菜单;子应用展示模板内存示例。注册表保持默认 shareToken:false,本阶段不调用需要认证的业务接口。能看到嵌入页面不表示已经接好了 API 认证。
5. 验证页签与返回
| 操作 | 应看到的结果 |
|---|---|
| 点击列表里的“打开详情页” | 新增“示例详情 1”页签 |
| 输入草稿,点击列表页签 | 未保存守卫先询问;取消则留在详情,确认切换后再次回来仍保留该缓存页草稿 |
| 点击详情里的“返回来源” | 未保存时先确认;确认后详情关闭并回列表 |
| 点击详情里的“刷新本页” | 未保存时先确认;确认后该详情实例重建 |
| 浏览器刷新 | 演示身份和授权页签恢复;内存草稿不会跨整页刷新保存 |
详情组件里的“关闭本页 / 返回来源”调用 sdk.back(),属于功能页主动结束流程。页签栏的关闭按钮使用宿主自己的关闭策略,两种动作不要混为一谈。
6. 单独打开子应用
在浏览器地址栏输入 http://localhost:7101/,会进入 /#/login。这是正常结果:基座的演示账号逻辑只在基座生效,子应用没有内置假登录服务。 尚未接后端时,向独立登录页提交账号不会成功。
下一章提供可运行的本地 API,并接通独立登录:第 2 步:接通认证、菜单和独立登录。
本章涉及的文件
| 文件 | 当前如何处理 |
|---|---|
两个项目的 .env.local | 按上文新建 |
基座 src/configs/microApps.ts | 本章保留默认,下一章显式授权可信应用共享认证 |
子应用 src/main.ts、src/bootstrap.ts、src/App.vue | 保留生成器提供的生命周期、会话注入、缓存和清理接线 |
子应用 src/router/index.ts | 已有 /list、/detail;第三章更换业务权限和视图 |
基座 src/platform.ts | 兼容导出;实际接入文件在 src/platform/ |
卡住时按现象排查
| 现象 | 先检查什么 |
|---|---|
| npx 找不到包、安装报版本不存在 | registry、访问权限、团队发布版本;本地生成源码不能解决缺包 |
| check:runtime 报缺少能力 | 安装包是否与模板配套;不要删除检查或用类型断言跳过 |
| 基座能登录,点菜单却加载失败 | 7101 是否启动,入口能否直接打开,Network 中 HTML/JS 是否成功 |
| 提示 appId 不一致 | 基座 env 的 order 与创建参数是否一致;修改后是否重启 |
| 只有基座主页,没有业务菜单 | 是否意外设了 VITE_AUTH_DEMO=false;真实模式需要 session 和 menus 接口 |
| 子应用单独打开停在登录页 | 继续第二章接认证,这是独立模式的预期行为 |
| 局域网访问被 CORS 拒绝 | 默认只允许本机来源;在子应用 Vite CORS 登记精确可信 Origin |
端口启用 strictPort;7100/7101 已被占用时终端会报错,不会静默换端口。