Skip to content

组件库互斥原则

TechUI 遵循严格的“单核心原则 (Single Core Principle)”:在一个工程项目中,严禁同时引入或初始化多个 TechUI 组件库。

这意味着您不能在同一个项目中同时安装 @techui/scifi@techui/base,或者试图混合使用 @techui/admin@techui/scifi。TechUI 的架构设计要求项目必须保持单一依赖源

技术约束

这种互斥性并非人为设限,而是由 TechUI 的底层架构决定的。强行混用会导致以下严重的运行时冲突:

🧩 Wasm 单例冲突

TechUI 的所有组件库(Scifi/Base/Admin/Prime)在底层均共享同一套 Rust Wasm 运行时环境。

  • 守卫指纹:Wasm 守卫在初始化时会锁定当前的运行环境指纹。若同时加载两个 Wasm 模块,会导致不可预知的错误问题。
  • 全局钩子:多个核心库同时尝试挂载 window 全局对象或劫持原生 API,会导致不可预知的行为。

🎨 样式与命名空间污染

  • CSS 变量覆写:所有组件库均通过 :root 定义 CSS 变量(如 --font-weaker)。
  • Vue 上下文冲突:在 app.use() 注册阶段,不同库可能会注册相同名称的全局组件(如 <TuiButton>)。

产品定位与选型

TechUI 通过产品线的划分来满足不同场景的需求,Prime (旗舰版) 的存在正是为了解决“既要又要”的问题。

  • 专精型 (Specialized)

    • Scifi: 专注于科幻视觉与动态 SVG 路径。
    • Base: 专注于基础图表与数据展示。
    • Admin: 专注于后台业务逻辑与表单。
    • 它们被设计为彼此隔离的“偏科生”,适用于纯粹的单一场景。
  • 全能型 (All-in-One)

    • Prime: 是唯一被允许的“全能生”。

决策指南

如果您在选型时感到困惑,请参考以下决策矩阵:

您的需求推荐方案错误做法
仅需要炫酷的大屏背景@techui/scifi-
仅需要做简单的数据报表@techui/base-
既需要炫酷背景,又需要丰富图表@techui/prime❌ 同时安装 Scifi + Base
项目初期用 Base,后期想加科幻效果升级为 @techui/prime❌ 在 Base 基础上追加 Scifi

依赖管理警告

package.json 中,请确保您的 dependencies 仅包含一个 TechUI 核心库。

❌ 严禁操作:多库共存

虽然 npm install 可能不会报错,但在项目运行时会导致浏览器崩溃或熔断。

javascript
// package.json
{
  "dependencies": {
    "vue": "^3.0.0",
    "@techui/scifi": "^1.0.0",  // <--- 冲突源 1
    "@techui/base": "^1.0.0"    // <--- 冲突源 2 (禁止与 Scifi 共存)
  }
}

✅ 正确操作:使用 Prime

如果您需要两者的功能,Prime 是唯一的解决方案

javascript
// main.ts
import { createApp } from 'vue';
// 仅引入 Prime,即可获得 Scifi 的视觉与 Base 的图表
import PrimeInit from "@techui/prime"; 
import "@techui/prime/dist/style.css";

const app = createApp(App);
app.use(PrimeInit, { /* config */ });