创建本地 Web App
显式选择 Linked Web Starter,添加第二个 Web Plugin,并在本地检查两条路由。
此页不会替代缺失的已发布版本。 查询确切版本
- 语言
- zh-CN
- 内容修订
sha256:685ee18c6630f8ffb1699ee659dce296250ec5bb76b08690bb0be78b0e4c77ab
Rust 依赖已发布,CLI 从源码构建。 本教程使用合并后的
lenso仓库中 匹配的lenso-cli源码。仓库外新建的 App 在没有 Lenso path 或 Git 覆盖的情况下 从 crates.io 解析依赖,并通过app build、app check、app show和真实问候请求。 这项验证只覆盖生成的第一个 Web Plugin,不代表下文第二个 Plugin 流程或预装 CLI 二进制也已验收。生成的app/local.starter/Cargo.toml是精确版本依据; 生成的 Host 会选择自己的 Web Ingress 版本。若某个精确依赖不可用,应停下并 报告包名和版本,不要改动版本。Rust Crate 公开发布不等于 Marketplace 签名 列表已生成,也不等于 Site 已部署。
这条路径用 --web 显式创建 Linked Web Starter,从浏览器表单发出真正的 POST /greetings
请求,再添加第二个 Linked Web Plugin。它不需要 Marketplace 条目。手工开发与
Coding Agent 使用同一组命令和完成检查。
不带 --web 的 app create 则在 App 根目录生成 Cargo Process Plugin,提供
POST /notes 和 GET /notes/{id},没有 public/index.html 或问候表单。
不要把这个默认路径当成本教程的第一个 Linked Web Plugin。
1. 从匹配源码构建 CLI
在当前 LioRael/lenso 源码 Checkout 根目录,确认已安装 Rust 与 Cargo:
cargo build --locked -p lenso-cli --bin lenso
LENSO_CLI="$(pwd)/target/debug/lenso"
"$LENSO_CLI" app create --help确认 app create --help 能正常执行。PATH 中安装的 lenso 可能是旧公开版本;
本页后续命令均使用绝对路径 LENSO_CLI。创建时脚手架会运行 Cargo check。
Cargo 从 crates.io 获取生成 App 锁定的包;离线开发可使用经审查且包含相同版本的
镜像,不要改用本地 path 或 Git 覆盖。
2. 创建并运行同一个 App
继续使用上面的 Shell。临时父目录让预览留在框架 Checkout 之外;要长期保存 App, 可改用自己选择的空父目录。
APP_PARENT="$(mktemp -d)"
"$LENSO_CLI" app create "$APP_PARENT/hello-web" --web
cd "$APP_PARENT/hello-web"
"$LENSO_CLI" app dev第一个 App 自有 Web Plugin 位于 app/local.starter/,持有
public/index.html 和自己的 Cargo.toml;此模式下 App 根目录不是 Cargo 包。
生成的 Host 提供 Web Ingress;你不需要手写 Host Catalog 或 Plan。保持 app dev 运行,
在浏览器中打开 Host 打印的 Listening on http://... 地址,不要假定固定端口。
在页面表单输入 Ada,点击 Create greeting。页面应显示来自 Plugin
POST /greetings Endpoint 的 Hello, Ada!。若未出现,检查浏览器控制台与
网络响应。仅看到 HTML 页面不算完成,POST 必须成功。
3. 添加第二个 Linked Web Plugin
停止 app dev 后,从 hello-web/ 执行:
"$LENSO_CLI" plugin new example.second-http --web --repo-root ./app命令在 app/example.second-http/ 生成源码和独立的 Cargo.lock。它的问候 Route ID
及路径与第一个 Plugin 冲突。将第二个 Plugin 的 greetings.create 和
POST /greetings 改为 second.greetings.create 和 POST /second/greetings;将
greetings.search 和 POST /greetings/search 改为 second.greetings.search 和
POST /second/greetings/search,并同步修改生成的测试。新增
app/example.second-http/src/routes/home.rs,使第二个 Plugin 有可直接访问的路由:
#[get("second.home", "/second")]
async fn home(&self) -> Result<HandleResponse, Problem> {
Ok(lenso_capability_http_endpoint::response::text(
StatusCode::OK,
"second Web Plugin",
))
}生成的 Plugin 已导入这里使用的类型。Host 会在 Ready 前拒绝路由冲突。 发现和组合规则见本地 App 开发。
4. 构建并检查结果
从 hello-web/ 执行:
"$LENSO_CLI" app discover --json
cargo test --locked --manifest-path app/example.second-http/Cargo.toml
"$LENSO_CLI" app build --out dist-review
"$LENSO_CLI" app check --root dist-review
"$LENSO_CLI" app show --root dist-review/intent --json
"$LENSO_CLI" app start --from dist-review --checkapp build 不覆盖已有输出目录。app check 以分发目录为根,核对 Host Bundle 清单;
app show 则以其中的 intent/ Plugin Root 为根,查看解析结果。start --check 完成激活并关闭。
App 构建成功不会生成签名 Catalog Release,也不会部署 App。要检查真实 HTTP,运行
"$LENSO_CLI" app start --from dist-review,
并在它打印的地址访问 / 和 /second。
让 Coding Agent 执行相同步骤
向 Agent 提供匹配源码 Checkout 和一个本地空父目录,然后使用以下有边界的请求:
按本页手工命令创建本地 Web App,使用这个 Checkout 源码构建的 lenso CLI。
从 crates.io 或经审查的离线镜像解析生成项目锁定的 Cargo 版本。若某个版本不可用,
应停止并报告缺少的包和版本,不要修改生成的依赖清单或使用本地 path、Git 覆盖。
App 必须放在框架源码树外:先运行
APP_PARENT="$(mktemp -d)",再运行 "$LENSO_CLI" app create "$APP_PARENT/hello-web" --web,
然后 cd "$APP_PARENT/hello-web",最后运行 "$LENSO_CLI" app dev。
不带 --web 的 app create 会生成根目录 Process notes Plugin,不属于本教程。
在真实浏览器提交 Ada,展示 Hello, Ada! 结果与控制台错误。
停止 dev 后,用 plugin new --web --repo-root ./app 创建 example.second-http,
修改冲突的 Route ID 和路径,添加 GET /second 路由,并更新测试。运行 discover、
第二个 Plugin 的测试、build、check、show、start --check,再真实请求 `/` 和 `/second`。
报告精确 CLI Revision、命令、App 路径、输出路径、浏览器 URL 与失败。Agent 可以编辑 app/local.starter/ 和 app/example.second-http/ 中的普通业务代码,
但 App 选择与 Authority 仍来自 App 的 plugins/ Root 和 Host。Site 不能操作你的本地文件,也不能替你
批准安装。
仅在真实可用时采用其他 Plugin
浏览 Plugin,查看分发方式、版本、Target 与文档。历史
lenso.web-ingress 0.4.5 候选页面不是已签名 Catalog Release,不能当作
安装说明。即使看到已签名的 Linked Cargo 列表,Plugin 也并未自动安装;CLI
仍须校验精确 Snapshot、公钥信任、.crate、Host Target、构建和解析后的 App。
完成本地问候无需采用目录 Plugin。
已发布 CLI 的独立 Plugin 工作流仍见Plugin 快速开始。 本地 App 的发现与打包原理见本地 App 开发。 要让普通 React 页面调用有类型的公开 API,可继续阅读 React/Vite 候选路径。
返回构建 App 路径,查找配置、检查与版本化 Plugin 文档。