Wevu Registry 模式
CLI 把适用于 Wevu 7 小程序的组件源码复制到项目中。安装后直接从 src/components/ui/* 导入并按业务修改。
一次性接入 Wevu 7 工程
以下全局样式与 Tailwind 配置每个工程只需完成一次,不需要在每个组件页面重复配置。
安装构建与样式依赖
pnpm add wevu clsx @weapp-tailwindcss/merge
pnpm add -D weapp-vite weapp-tailwindcss tailwindcssCLI 会递归复制 Registry 文件并输出 npm 的 Dependencies: 和 Dev dependencies:,但不会修改 package.json 或执行包管理器。每次运行 add 后,都要使用 pnpm add / pnpm add -D 安装输出中尚未存在的全部依赖;不同组件还可能报告 @varo-ui/headless、@varo-ui/weapp 等依赖。
创建 Tailwind 样式入口
在 src/styles.css 中使用与 Varo 小程序 playground 相同的 Tailwind v4 入口:
@layer theme, utilities;
@import 'tailwindcss/theme.css' layer(theme);
@import 'tailwindcss/utilities.css';
@layer base {
button {
line-height: inherit;
}
button::after {
border: 0;
}
}注册托管全局样式
在 vite.config.ts 的 weapp 配置中注册 Tailwind 入口和 Registry 安装的主题文件,并使用托管 Tailwind 配置:
import { resolve } from 'node:path'
import { defineConfig } from 'weapp-vite/config'
const root = import.meta.dirname
export default defineConfig({
weapp: {
srcRoot: 'src',
platform: 'weapp',
styles: [
{ source: 'styles.css', include: 'app.vue' },
{ source: 'styles/varo.css', include: 'app.vue' },
],
tailwindcss: {
appType: 'weapp-vite',
cssEntries: [resolve(root, 'src/styles.css')],
cssOptions: {
cssPreflight: false,
rem2rpx: true,
cssRemoveActivePseudoClass: true,
},
ignoreCallExpressionIdentifiers: ['cn'],
logLevel: 'warn',
},
},
})styles 中的 source 相对于 srcRoot。组件依赖的 themes/base 会把 src/styles/varo.css 安装到业务工程;weapp.styles 统一把两个样式入口注入 app.vue,不要再在各页面或组件中手动重复导入。
原生组件的补充样式
优先使用 Tailwind utilities。关键帧、复杂网格等补充样式使用普通 <style> 和组件专属 class,并保留组件 JSON 中的 styleIsolation: apply-shared。
原生组件不要使用 Vue <style scoped>:当前构建链会生成小程序组件 WXSS 不允许的 [data-v-*] 属性选择器。组件 WXSS 同样不能使用标签、ID 或属性选择器;选中、禁用等视觉状态应通过脚本中预计算的 class 表达,而不是依赖 [data-selected] 等选择器。
仓库的小程序构建会递归检查组件 WXSS 及其样式导入,发现非法选择器时直接失败。这个限制针对组件样式,不要求删除上方应用全局入口中的 button 规则。
安装组件
pnpm dlx @varo-ui/cli add --target weapp button form toast把命令末尾的名称替换为需要的组件。安装 Block 或 Agent UI:
pnpm dlx @varo-ui/cli add --target weapp blocks/profile-edit
pnpm dlx @varo-ui/cli add --target weapp components/agent-uiCLI 默认不覆盖已有文件。确认要替换本地版本时使用 --force:
pnpm dlx @varo-ui/cli add --target weapp --force button使用
<script setup lang="ts">
import { shallowRef } from 'wevu'
import VButton from '@/components/ui/v-button.vue'
const loading = shallowRef(false)
</script>
<template>
<VButton :loading="loading" @click="loading = true">
保存
</VButton>
</template>组件源码、依赖工具和主题文件都位于业务项目中,可以直接修改。