框架元数据
框架名称、版本、版权与运行时信息的单一事实源在 @xihan-ui/core 的 XIHAN_UI_METADATA 中,与 XiHan.Framework 的 XiHanMetadata 同构:常量集中维护在一份文件中,版本从 package.json 派生,运行时信息由适配器登记。
元数据对象
import { XIHAN_UI_METADATA, XIHAN_UI_VERSION } from "@xihan-ui/core/metadata";
XIHAN_UI_METADATA.name; // 'XiHan.UI'
XIHAN_UI_METADATA.displayName; // '曦寒视图组件'
XIHAN_UI_METADATA.version; // 与 package.json 同源,即整套库的版本
XIHAN_UI_METADATA.majorVersion; // 主版本号(数字)
XIHAN_UI_METADATA.minorVersion; // 次版本号
XIHAN_UI_METADATA.patchVersion; // 修订版本号
XIHAN_UI_METADATA.prerelease; // 预发布标识(如 'alpha.2'),正式版为 null
XIHAN_UI_METADATA.copyright; // 版权信息
XIHAN_UI_METADATA.author; // 作者
XIHAN_UI_METADATA.organization; // 组织与网址
XIHAN_UI_METADATA.repositoryUrl; // 仓库地址
XIHAN_UI_METADATA.documentationUrl; // 文档地址
XIHAN_UI_METADATA.license; // 许可证与地址
XIHAN_UI_METADATA.keywords; // 关键词
XIHAN_UI_METADATA.supportedPlatforms; // 支持的浏览器引擎(Chrome / Edge / Firefox / Safari)
XIHAN_UI_METADATA.adapters; // 渲染适配器(react / vue / web-components)对象与内部数组一律 Object.freeze:这是集中维护点,消费方无法修改。
标志与寄语不在这个对象中,是两个独立导出:
import { XIHAN_UI_LOGO, XIHAN_UI_SEND_WORD } from "@xihan-ui/core/metadata";对象被整体引用时打包器无法摇掉其中的字段,并入这两项会随浏览器产物发送给每个访问者。单独导出后无人引用即整体消失:它们面向开发者,见下文的终端横幅。
版本不在元数据中手写:version / majorVersion / minorVersion / patchVersion / prerelease 全部由 XIHAN_UI_VERSION 从 core 的 package.json 解析而来。修改版本只改 package.json 一处,元数据自动同步。
运行时信息
import { getRuntimeHost, getRuntimeInfo } from "@xihan-ui/core/metadata";
getRuntimeInfo();
// { mode: 'development' | 'production', ssr: boolean, host: { name, version } | null }mode取import.meta.env.DEV;ssr表示当前是否运行在无 DOM 的环境(服务端渲染 / 纯 Node)。host是适配器自行登记的运行时宿主:Vue 适配器在第一个组件创建状态机时登记{ name: 'vue', version },Web Components 适配器在defineXhElements()中登记。元数据据此报告组件运行的适配器与版本:这是 Framework 侧 EntryAssembly 概念在浏览器语境下的对应物。
输出
与 Framework 的 GetSummary() / GetDetails() 同款:
import { getMetadataDetails, getMetadataSummary, printMetadataSummary } from "@xihan-ui/core/metadata";
const summary = getMetadataSummary();
// XiHan.UI 曦寒视图 v<当前版本>
// 快速、轻量、高效、用心的框架无关跨端组件库。
//
// 宿主:vue v<当前版本>
const details = getMetadataDetails(); // 摘要之外再补作者 / 组织 / 仓库 / 文档 / 许可证 / 环境
// dev 中输出到控制台,生产静默
printMetadataSummary();
printMetadataDetails();启动横幅:输出到开发者的终端
对齐 XiHan.Framework 的 XiHanApplicationBase:应用构造时自动打印 Logo 与摘要。UI 库的等价位置是开发服务器启动的终端,由 @xihan-ui/core/vite 子入口负责:
// vite.config.ts
import { xihanUiBanner } from "@xihan-ui/core/vite";
import { defineConfig } from "vite";
export default defineConfig({ plugins: [xihanUiBanner()] }); _ __ ______ _____ _ __ ← 标志逐字符横向彩虹
| |/ // _/ / / / | / | / /
| / / // /_/ / /| | / |/ /
/ |_/ // __ / ___ |/ /| /
/_/|_/___/_/ /_/_/ |_/_/ |_/
XiHan.UI 曦寒视图 v<当前版本>
快速、轻量、高效、用心的框架无关跨端组件库。
碧落降恩承淑颜,共挚崎缘挽曦寒。
迁般故事终成忆,谨此葳蕤换思短。
—— 致她同一入口另导出两个与 Vite 无关的函数,任何 Node 脚本都可调用:getXiHanUiBanner() 只返回文本,printXiHanUiBanner() 输出到 stdout。这一份不从 index 再导出,浏览器产物中不包含它。
是否上色的判据与 picocolors 逐条对齐:Vite 自身的输出即用它上色,遵循同一判据横幅才与周围输出一致;NO_COLOR 与 --no-color 一票否决。横幅排在 Vite 打印本地地址之后(打印该段时会清屏),使用 server.config.logger,因此受 --silent 与 logLevel 控制。
浏览器控制台:默认不输出
适配器启动时也可以向浏览器控制台输出一次摘要,但默认关闭:控制台是网站访问者也可见的位置,横幅面向开发者。需要输出时显式开启,开关只影响之后的启动,手动 print 不受影响:
import { setMetadataAutoPrint } from "@xihan-ui/core/metadata";
setMetadataAutoPrint(true);开启后 Vue 适配器在第一个组件创建状态机时、Web Components 适配器在 defineXhElements() 时各输出一次,整个页面只输出一次,生产构建静默。输出的只有摘要,标志与寄语属于终端横幅。
