开发流程总览
这一页只解决一个问题:你在懒猫微服里开发应用时,应该按什么顺序工作。
如果你只记住一句话,可以记这个:
- 前端开发:先
project deploy,再打开应用,再启动本机 dev server。 - 后端开发:先
project deploy,再打开应用,再把代码同步进真实运行环境并手动启动进程。 - 发布:始终用
lzc-build.yml和最终产物构建发布包。
目标
看完这一页后,你应该能明确:
- 开发态和发布态分别用哪套文件。
- 前端开发时流量为什么会转到开发机。
- 后端开发时为什么推荐在真实微服环境里运行代码。
- 什么时候用
project deploy,什么时候用project sync --watch,什么时候用project release。
一图看懂三条主线
图里最重要的判断只有一个:
- 改前端,就把请求转到开发机。
- 改后端,就把代码放进真实微服运行环境。
- 做发布,就只保留 release 所需产物。
前置条件
开始前,默认你已经满足下面条件:
- 已完成 开发者环境搭建。
- 已至少成功跑通过一次 Hello World。
- 本机
lzc-cli能连接到目标微服。 - 你知道当前项目根目录里有哪些核心文件。
先建立一个统一心智模型
建议先按下面三层理解整个开发流程:
lzc-build.yml作用:发布包构建配置。lzc-build.dev.yml作用:dev 构建覆盖配置,只保存开发态差异。lzc-manifest.yml作用:应用运行结构本身;其中 dev 专属逻辑通过#@build预处理块决定是否进入最终包。这里可以先把它理解成“应用运行说明文件”。
典型项目通常只维护这四类文件:
lzc-manifest.ymlpackage.ymllzc-build.ymllzc-build.dev.yml
推荐的 dev 配置通常长这样:
pkg_id: org.example.todo.dev
contentdir:
envs:
- DEV_MODE=1这里最重要的是三点:
pkg_id: org.example.todo.dev作用:保证开发部署不会覆盖正式安装包。contentdir:作用:若 release 配置了静态目录,dev 可用空值覆盖它,避免误打包本地未构建产物。DEV_MODE=1作用:让lzc-manifest.yml里的 dev-only#@build片段只在开发态生效。
project 命令默认会选哪套配置
只要项目中存在 lzc-build.dev.yml,下面这些命令默认优先使用它:
lzc-cli project deploylzc-cli project infolzc-cli project startlzc-cli project execlzc-cli project cplzc-cli project synclzc-cli project log
每个命令都会打印一行 Build config,就是在告诉你“这次实际用了哪个构建配置文件”。
如果你要显式操作发布配置,直接加 --release:
lzc-cli project deploy --release
lzc-cli project info --release而 project release 永远使用 lzc-build.yml。
为什么 dev 逻辑要放到 request inject 里
开发流程的核心是请求分流脚本(request inject)。
原因很简单:
- 前端开发时,你要把浏览器访问流量转到开发机上跑的
npm run dev。 - 后端开发时,你要根据真实服务是否就绪,动态返回引导页、代理到容器内服务,或者代理到开发机。
- 这些行为都属于“请求进入应用后如何处理”,最自然的位置就是 request inject。
推荐模式是:
- 发布包里的路由保持稳定。
- dev 专属 inject 只放在
#@build if env.DEV_MODE=1里。 - 这样最终发布包里物理上不会带任何开发态分流逻辑。
最小示例:
application:
routes:
- /=file:///lzcapp/pkg/content/dist
#@build if env.DEV_MODE=1
injects:
- id: dev-entry
on: request
when:
- "/*"
do:
- src: |
// dev-only request inject
#@build end前端开发主线
前端开发示意图
适用场景
你的前端代码在开发机上跑,例如:
npm run dev应用访问流量通过 request inject 被转到开发机。
推荐顺序
lzc-cli project deploylzc-cli project info- 先打开应用
- 再执行
npm run dev - 刷新应用页面继续开发
为什么要先打开应用,再启动 dev server
这样做有三个直接好处:
- 你能立即看到当前实例是否已经关联到开发机。
- 页面可以明确告诉你请求分流脚本正在等待哪个端口。
- 如果开发机未在线,或实例还没同步“开发机关联标识”,页面会直接给出下一步引导,而不是只看到 502 或空白页。
典型请求流
- 浏览器访问微服里的应用域名。
- request inject 先检查当前实例是否已经关联到某台开发机。
- 如果已关联,再通过客户端隧道把请求转到那台开发机。
- 开发机上的
npm run dev返回页面与热更新结果。
你应该如何验证成功
满足下面任一条,就说明前端开发流已跑通:
- 页面不再显示“等待开发环境”引导,而是显示你的 dev 页面。
- 修改
src/App.vue后,浏览器刷新立即生效。 project log -f中不再看到“开发机未就绪”这类提示。
术语说明
这一页里提到的“开发机关联标识”,技术上对应 inject 上下文里的 ctx.dev.id。 你在入门阶段只需要把它理解成:当前应用实例知道应该把开发流量转发到哪一台开发机。
后端开发主线
后端开发示意图
适用场景
你的后端必须运行在真实微服环境里,例如:
- 依赖
/lzcapp/run、/lzcapp/var等真实运行目录。 - 依赖 socket、系统挂载、权限或真实容器网络。
- 在开发机上很难完整模拟运行环境。
推荐顺序
lzc-cli project deploylzc-cli project info- 先打开应用
- 如果页面提示后端未就绪,再执行代码同步与进程启动
- 业务服务 ready 后刷新页面继续验证
最常见的一组命令是:
lzc-cli project sync --watch
lzc-cli project exec /bin/sh
# inside container
/app/run.sh为什么后端开发不推荐先在本机模拟
因为这里要验证的是“代码在真实微服运行环境里的行为”,不是单纯验证语法或业务逻辑。
也就是说,后端开发阶段你更关心:
- 在真实容器里能不能启动。
- 访问真实
/lzcapp/*路径时是否正确。 - request inject 是否能基于服务是否 ready 做分流。
模板上的默认建议
当前模板建议大致如下:
golang- dev 模式下默认不自动启动。
- 你自己构建、自己启动,更可控。
springboot- dev 模式下默认不自动启动。
python/node- 更适合直接启一个 dev service,配合 request inject 转发。
你应该如何验证成功
满足下面几条中的任意几条,就说明后端开发流已经通了:
project sync --watch持续同步没有报错。project exec /bin/sh能进入容器并手动启动服务。- 应用页面从“等待后端就绪”切换到真实业务响应。
- 刷新页面后,请求被 request inject 正确转到目标服务。
release 发布主线
release 阶段的目标只有一个:产出一个干净、稳定、没有开发态副作用的 LPK。
release 包应满足什么要求
- 使用
lzc-build.yml。 - 不带开发态的
pkg_id覆盖。 - 不启用 dev-only
#@build分支。 - 镜像只包含最终产物,而不是开发工具链。
- 如果 release 不需要静态文件目录,可以不配置
contentdir。
发布命令
lzc-cli project release -o app.lpk你应该如何验证 release 包是干净的
至少检查下面几项:
- 发布包名没有
.dev之类的后缀。 - 包内运行说明文件不包含开发态 inject。
- 发布镜像不是
Dockerfile.dev或开发态 alias。 - 安装发布包后,不需要开发机在线也能正常访问。
一个最实用的判断表
当你不确定当前该走哪条路径时,直接按下面表判断:
| 你的目标 | 该用什么 | 不该先做什么 |
|---|---|---|
| 改页面、看热更新 | project deploy + 打开应用 + npm run dev | 不要先纠结发布包 |
改后端、依赖真实 /lzcapp/* 环境 | project deploy + project sync --watch + project exec | 不要优先在开发机模拟整套运行环境 |
| 产出安装包给别人用 | project release | 不要直接拿 dev 部署结果当正式发布包 |
常见错误
1. 明明改的是 dev,结果覆盖了正式应用
原因通常是:
- 项目里没有
lzc-build.dev.yml。 - 或者没有配置单独的
pkg_id。
处理:
- 检查
lzc-build.dev.yml是否存在。 - 检查命令输出里的
Build config。 - 检查 dev 配置里是否有
pkg_id: org.example.todo.dev这类独立包名覆盖。
2. 页面一直显示等待开发环境
原因通常是:
- 开发机 dev server 还没启动。
- 实例还没同步开发机关联标识。
- 开发机当前不在线。
处理:
- 先重新执行
lzc-cli project deploy。 - 再启动
npm run dev。 - 刷新页面,看引导文案里提示的端口是否一致。
3. 后端代码已经同步,但页面仍然不通
原因通常是:
- 服务进程并没有真正启动。
- request inject 代理目标和真实监听地址不一致。
- 服务虽然启动了,但还没 ready。
处理:
- 用
lzc-cli project exec /bin/sh进入容器手动确认。 - 用
lzc-cli project log -f看实时日志。 - 对照 inject 脚本检查目标地址和 ready 条件。
下一步
建议按下面顺序继续:
- 如果你还没真正跑过一遍:回到 Hello World。
- 如果你要写 request inject:继续看 inject request 开发态 Cookbook。
- 如果你要把后端 HTTP 接进来:继续看 有后端时如何通过 HTTP 路由对接。
- 如果你要理解 build 字段细节:继续看 lzc-build.yml 规范。