npm.io
0.7.0 • Published 13h agoCLI

@manohub/kit

Licence
UNLICENSED
Version
0.7.0
Deps
0
Size
210 kB
Vulns
0
Weekly
0

@manohub/kit

AIHub 子应用入口编排层createSubApp 统一挂载、i18n 单实例, 外加随包分发的接入契约(CONTRACT.md:五层闭集条款 + §7 自检清单)与三个 AI 技能包(skills/)。

组件与命令式服务不在本包 —— 它们来自 @manohub/ui全局令牌(值)不在本包 —— 它来自 @manohub/theme本包也不发布任何样式 —— 上面两行由消费方直接引。几个包并列安装。

0.6.0 是破坏性变更(上一个已发布版本是 @manohub/app-kit@0.4.3):本包不再提供任何组件 (App* 前缀名与 .ak-* 类名全部退场、farris 依赖移除)、主题层独立为 @manohub/theme (容器锚改名 data-manohub-ui)、本包内的样式全部删除reset.css.app-markdown 富文本预设不再提供)、消费侧机器规则整批下线(原 kit lint 三条护栏不再发布, 合规改为「契约条款 + §7 自检清单」)。 这些是同一次重构,一次性做完 —— 迁移对照与步骤见 CONTRACT.md §12。

新项目接入(快速开始)

1. 安装

pnpm add @manohub/kit @manohub/ui @manohub/theme

peer(由应用提供,缺一个都装不上):

pnpm add vue vue-router pinia vue-i18n @tanstack/vue-query

@manohub/ui 自带图标包依赖(@manohub/icon),不必单独声明。

2. 样式:两行 + 应用自己一行(顺序即契约)

本包不发布任何样式:设计令牌(值)在 @manohub/theme、组件面(类 + 组件令牌基础值)在 @manohub/ui,两行由消费方直接引;本包不再提供 reset、富文本预设与样式汇总入口。

@import "@manohub/theme/default.css";   /* ① 令牌(值)—— 换主题只换这一行 */
@import "@manohub/ui/styles.css";   /* ② 组件面(类 + 组件令牌基础值) */
@import "./app.css";                    /* ③ 应用自身(只写布局) */

顺序不可换:先值(令牌)后面(组件面)—— 反过来的话组件面里的 var(--ui-*) 全是空值。

改用非兜底主题:把 ① 换成对应主题入口 + 给容器属性 ——

@import "@manohub/theme/farris.css";  /* 替换 ① 那一行 */
createSubApp({ /* … */ theme: 'farris' })    // 写到容器的 data-theme 上

主题套锚在容器属性上(default 不带主题属性、其余套锚 [data-manohub-ui][data-theme='<名>']), 所以换皮不动类名、不动组件代码、不重打包。

3. 入口:统一走 createSubApp
// src/main.ts
import { createSubApp } from '@manohub/kit/entry'
import Root from './root'
import { routes } from './router'

export const { mount, unmount } = createSubApp({
  rootComponent: Root,
  routes,
  i18n: { messages: { zh, en } }, // vue-i18n 形态:{ zh: {...}, en: {...} },无 translation 包装层
})

它替你做完:div.app-container 包裹与 data-manohub-ui 锚点、pinia / vue-router / vue-query 装配、 宿主挂载协议(window.mount/unmount + microApp.mount/unmount)、宿主语言同步、首帧路由重置。

data-manohub-ui跨包唯一的作用域锚点(主题令牌、组件令牌、微前端 scopecss 都锚在它上面, 组件库服务层也按它解析宿主)—— 别改名;若自建容器(不走 createSubApp)必须自己带上。 类名 .app-container 只是本包内部命名(调试自查用),不是契约。

4. 第一个页面用模板 A
import { Button, Input, Page, Panel, Table } from '@manohub/ui'

export default function SkillList() {
  return (
    <Page>
      <Page.Header title="技能列表" extra={<Input placeholder="搜索" />} />
      <Page.Body mode="plain">
        <Panel title="技能列表" actions={<Button variant="primary">新建</Button>}>
          <Table data={rows} columns={columns} />
          <Panel.Footer>分页放这里</Panel.Footer>
        </Panel>
      </Page.Body>
    </Page>
  )
}

三种页面模板、四种操作位、两级滚动归属、分页归属 —— 见 CONTRACT.md §5(L2 结构)。

5. 自检(0.6.0 起没有自动扫描)

本包不再发布消费侧机器规则。合规靠契约条款 + 自检清单在写作与评审时把关:

  1. 写代码前按契约 §0 权威源表去取值 / 查件名 / 查词表(不要抄一份会过期的副本);
  2. 收工前人工过 CONTRACT.md §7 自检清单(24 问,五层各一组);
  3. 类型与构建照常跑:
pnpm exec vue-tsc --noEmit
pnpm build

类名命名空间表放本仓 docs/kit-namespaces.md(per-app 文件,格式见技能包的 kit-migrate/references/migration-playbook.md)—— 原 appkit-guardrails.config.json 不再被读取。

6. 技能包落盘(AI 代理用)
pnpm exec kit install            # 把三个技能落到本工程的技能目录
pnpm exec kit install --dry-run  # 先看会写什么
7. 验收
  • 应用能挂载(window.mount() / micro-app 容器);
  • 类型检查 0 错、构建成功;
  • 命令式提示落回应用容器(toast('success', 'ok') 后检查 DOM 里 [data-manohub-ui] 内有 .mh-toast);
  • CONTRACT.md §7 自检清单逐条过完。

分发形态

预编译产物:exports 指向 dist。公开入口(改名即破坏性变更):

入口 内容
@manohub/kit useClientPaginationresolveAppContainer / resolveAppContainerSelector
@manohub/kit/entry createSubAppinstallInitialGuardcreateQueryClientapplyLocale / getLocale / i18n / setupI18n
@manohub/kit/CONTRACT.md 接入契约(权威规范:五层闭集条款 + §7 自检清单)

本包没有任何样式出口(0.6.0 起):./styles.css./reset.css./markdown.css 都已删除。 样式请引 @manohub/theme@manohub/ui 的公开入口(见上面 §2)。

技能包(AI 代理用,随包分发)

技能 什么时候用
kit 不确定该用哪个子技能、问骨架层总体规范、要接入步骤与升级口径
kit-dev 写/改页面:选模板、选组件与 prop、样式纪律、收工前自检
kit-migrate 存量应用改造:按契约分层盘点、划批次、逐文件替换、逐层收口

来源

包内实现由 gsp-cloud-ds/dip/ibp/aihub/aihub-frontendkit 分支首提交导入 (commit 315b60f),再按「组件与服务独立成 @manohub/ui、本包只留入口编排」拆分而成。 迁移来源 commit 只作留档,不要据此回改本包实现。