Skip to content

开发组件

生成组件模板

通过执行gen脚本可以生成组件模板。

bash
pnpm gen <component-name>

提示

Windows系统无法直接执行.sh脚本,可以直接使用git bash执行或者安装Windows Subsystem for Linux (WSL)。

命令执行成功后将生成相应的模板文件。

txt
.
├─ packages
│  ├─ components  // 组件库
│  │  └─ <component-name>  // 组件目录 // [!code ++]
│  │     ├─ src   // 源代码 // [!code ++]
│  │     │   ├─ <component-name>.ts  // 类型定义 // [!code ++]
│  │     │   └─ <component-name>.vue // 组件文件 // [!code ++]
│  │     ├─ style // 样式文件 // [!code ++]
│  │     │   ├─ css.ts   // css样式导入 // [!code ++]
│  │     │   └─ index.ts // scss样式导入 // [!code ++]
│  │     └─ index.ts  // 入口文件 // [!code ++]
│  └─ theme-chalk // 样式库
│     └─ src   // 源代码
│        └─ <component-name>.scss   // 组件样式 // [!code ++]
└─ others  // 其他文件...

导出组件

组件开发完成后需要在packages/components/index.tspackages/liv-web/components.ts文件中统一导出组件。

packages/components/index.ts文件中添加以下代码:

ts
// others components ...
export * from './component-name'; 

packages/liv-web/components.ts文件中添加以下代码:

ts
// others components ...
import { LivComponentName } from '@liv-web/components/component-name'; 

import type { Plugin } from 'vue';

export default [
  // others components ...
  LivComponentName, 
] as Plugin[];

导出样式

为了在使用完整引入时提供全量样式文件,组件的样式需要在packages/theme-chalk/src/index.scss文件中统一导出。

scss
// others scss ...
@use './component-name.scss'; 

全局类型声明

为了在使用完整引入时提供完整的类型支持,组件需要在/typing/global.d.ts文件进行全局类型声明。

ts
declare module 'vue' {
  // GlobalComponents for Volar
  export interface GlobalComponents {
    // others components ...
    LivComponentName: (typeof import('liv-web'))['LivComponentName']; 
  }
}

export {};