Lenso

创建本地 Web App

显式选择 Linked Web Starter,添加第二个 Web Plugin,并在本地检查两条路由。

开发预览 · 尚未对应已发布框架版本

此页不会替代缺失的已发布版本。 查询确切版本

语言
zh-CN
内容修订
sha256:685ee18c6630f8ffb1699ee659dce296250ec5bb76b08690bb0be78b0e4c77ab
English

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 --check

app 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 文档。

On this page