开始使用
安装
本 monorepo 通过 workspace 直连(@xwink/ui: workspace:*),改组件后 HMR 即时生效。仓外项目从私有 CNB 制品库安装同一个包名,并固定到经过远端矩阵验收的精确 beta 版本。
// apps/* 的 package.json
{ "dependencies": { "@xwink/ui": "workspace:*" } }
三件套接入
@xwink/ui 在 workspace 与 tgz 中都是源码依赖,.vue / .ts 由宿主编译。宿主要做的是一个模块(组件编译 + X* 全局注册)+ 两段 CSS(token 生效 + 原子类生成):
1. @xwink/ui/nuxt 模块
在 modules 里加 '@xwink/ui/nuxt',模块自动完成两件事:
- X 组件全局注册*:模板直接写
<XButton>/<XTable>,无需逐文件 import——漏 import 会让 Vue 把组件当原生自定义元素渲染成小写空壳(如<xinput>),全局注册后这类静默故障从机制上消失; build.transpile自动补上:源码 SFC 不能进 esbuild 的依赖预构建(不认.vue直接炸),模块替你交给主构建管道。
// nuxt.config.ts
export default defineNuxtConfig({
modules: ['@xwink/ui/nuxt'],
})
模块不接管 tokens.css 与 tailwind.css 的导入顺序(见下两节)——宿主要按「import 之后覆写品牌色」的顺序控制,模块注入会失去这层可控性。
2. tokens.css import
组件只消费 --ui-* 语义 token,默认值集中在包的 tokens.css。默认已经使用 xwink.fun 的琥珀铜品牌;宿主只有在确有独立品牌时才在 app 级入口覆写(写在 import 之后,靠顺序取胜,不用 !important):
/* app/assets/css/main.css */
@import 'tailwindcss';
@import '@xwink/ui/tokens.css';
@import '@xwink/ui/tailwind.css';
/* 独立品牌宿主才覆写主题色与次级色;强调渐变由两者自动生成 */
:root {
--ui-primary: #059669;
--ui-primary-fg: #ffffff;
--ui-secondary: #047857;
--ui-secondary-fg: #ffffff;
}
3. tailwind.css 扫描包源码
组件样式是 Tailwind 原子类。@xwink/ui/tailwind.css 内部以 @source "./" 扫描包源码;路径相对包自身解析,因此 workspace 和 tgz 无需两套宿主路径:
@import '@xwink/ui/tailwind.css';
深色模式
组件库通过 token 适配明暗,组件代码零分支:html 上的 data-theme="dark" 启用深色档(tokens.css 的 [data-theme="dark"] 块)。
Nuxt 宿主启用 @xwink/ui/nuxt 后不用自己写这个属性:模块按全站共享的主题 Cookie 定档(默认跟随系统),首帧、SSR 与切换都已接好,详见 useTheme。不要在 htmlAttrs 里写死档位,那会和用户偏好打架。
本站在右上角「调试面板」可实时切换四维适配(明暗 / 尺寸 / 对比度 / 主题色),所见即宿主可配置的全部维度。