Compare commits

..

No commits in common. "base-uv-ui" and "main" have entirely different histories.

19 changed files with 363 additions and 67 deletions

31
.github/release.yml vendored Normal file
View File

@ -0,0 +1,31 @@
categories:
- title: 🚀 新功能
labels: [feat, feature]
- title: 🛠️ 修复
labels: [fix, bugfix]
- title: 💅 样式
labels: [style]
- title: 📄 文档
labels: [docs]
- title: ⚡️ 性能
labels: [perf]
- title: 🧪 测试
labels: [test]
- title: ♻️ 重构
labels: [refactor]
- title: 📦 构建
labels: [build]
- title: 🚨 补丁
labels: [patch, hotfix]
- title: 🌐 发布
labels: [release, publish]
- title: 🔧 流程
labels: [ci, cd, workflow]
- title: ⚙️ 配置
labels: [config, chore]
- title: 📁 文件
labels: [file]
- title: 🎨 格式化
labels: [format]
- title: 🔀 其他
labels: [other, misc]

80
.github/workflows/auto-merge.yml vendored Normal file
View File

@ -0,0 +1,80 @@
name: Auto Merge Main to Other Branches
on:
push:
branches:
- main
workflow_dispatch: # 手动触发
jobs:
merge-to-i18n:
name: Merge main into i18n
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ secrets.GH_TOKEN_AUTO_MERGE }}
- name: Merge main into i18n
run: |
git config user.name "GitHub Actions"
git config user.email "actions@github.com"
git checkout i18n
git merge main --no-ff -m "Auto merge main into i18n"
git push origin i18n
merge-to-base-sard-ui:
name: Merge main into base-sard-ui
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ secrets.GH_TOKEN_AUTO_MERGE }}
- name: Merge main into base-sard-ui
run: |
git config user.name "GitHub Actions"
git config user.email "actions@github.com"
git checkout base-sard-ui
git merge main --no-ff -m "Auto merge main into base-sard-ui"
git push origin base-sard-ui
merge-to-base-uv-ui:
name: Merge main into base-uv-ui
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ secrets.GH_TOKEN_AUTO_MERGE }}
- name: Merge main into base-uv-ui
run: |
git config user.name "GitHub Actions"
git config user.email "actions@github.com"
git checkout base-uv-ui
git merge main --no-ff -m "Auto merge main into base-uv-ui"
git push origin base-uv-ui
merge-to-base-uview-plus:
name: Merge main into base-uview-plus
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ secrets.GH_TOKEN_AUTO_MERGE }}
- name: Merge main into base-uview-plus
run: |
git config user.name "GitHub Actions"
git config user.email "actions@github.com"
git checkout base-uview-plus
git merge main --no-ff -m "Auto merge main into base-uview-plus"
git push origin base-uview-plus

119
.github/workflows/release-log.yml vendored Normal file
View File

@ -0,0 +1,119 @@
name: Auto Release
on:
push:
tags:
- 'v*'
permissions:
contents: write
pull-requests: read
issues: read
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ secrets.GITHUB_TOKEN }}
- name: Install yq
run: sudo snap install yq
- name: Generate changelog
id: changelog
env:
CONFIG_FILE: .github/release.yml
run: |
# 解析配置文件
declare -A category_map
while IFS=";" read -r title labels; do
for label in $labels; do
category_map[$label]="$title"
done
done < <(yq -o=tsv '.categories[] | [.title, (.labels | join(" "))] | join(";")' $CONFIG_FILE)
# 获取版本范围
mapfile -t tags < <(git tag -l --sort=-version:refname)
current_tag=${tags[0]}
previous_tag=${tags[1]:-}
if [[ -z "$previous_tag" ]]; then
commit_range="$current_tag"
echo "首次发布版本: $current_tag"
else
commit_range="$previous_tag..$current_tag"
echo "版本范围: $commit_range"
fi
# 获取所有符合规范的提交
commits=$(git log --pretty=format:"%s|%h" "$commit_range")
# 生成分类日志
declare -A log_entries
while IFS="|" read -r subject hash; do
# type=$(echo "$subject" | cut -d':' -f1 | tr -d ' ')
type=$(echo "$subject" | sed -E 's/^([[:alnum:]]+)(\(.*\))?:.*/\1/' | tr -d ' ')
found=0
for label in "${!category_map[@]}"; do
if [[ "$type" == "$label" ]]; then
entry="- ${subject} (${hash:0:7})"
log_entries[${category_map[$label]}]+="$entry"$'\n'
found=1
break
fi
done
if [[ $found -eq 0 ]]; then
entry="- ${subject} (${hash:0:7})"
log_entries["其他"]+="$entry"$'\n'
fi
done <<< "$commits"
# 统计提交数量
commit_count=$(git log --oneline "$commit_range" | wc -l)
# 统计受影响的文件数量
file_count=$(git diff --name-only "$commit_range" | wc -l)
# 统计贡献者信息
contributor_stats=$(git shortlog -sn "$commit_range")
contributor_notes=""
while IFS= read -r line; do
commits=$(echo "$line" | awk '{print $1}')
name=$(echo "$line" | awk '{$1=""; print $0}' | sed 's/^ //')
contributor_notes+="- @${name} (${commits} commits)\n"
done <<< "$contributor_stats"
# 构建输出内容
release_notes="## 版本更新日志 ($current_tag)\n\n"
while IFS= read -r category; do
if [[ -n "${log_entries[$category]}" ]]; then
release_notes+="### $category\n${log_entries[$category]}\n"
fi
done < <(yq '.categories[].title' $CONFIG_FILE)
# 构建输出内容
release_notes="## 版本更新日志 ($current_tag)\n\n"
current_date=$(date +"%Y-%m-%d")
# 添加发布日期和下载统计信息
release_notes+=" ### 📅 发布日期: ${current_date}\n"
while IFS= read -r category; do
if [[ -n "${log_entries[$category]}" ]]; then
release_notes+="### $category\n${log_entries[$category]}\n"
fi
done < <(yq '.categories[].title' $CONFIG_FILE)
# 添加统计信息
release_notes+="### 📊 统计信息\n"
release_notes+="- 本次发布包含 ${commit_count} 个提交\n"
release_notes+="- 影响 ${file_count} 个文件\n\n"
# 添加贡献者信息
release_notes+="### 👥 贡献者\n"
release_notes+="感谢这些优秀的贡献者(按提交次数排序):\n"
release_notes+="${contributor_notes}\n"
release_notes+="---\n"
# 写入文件
echo -e "$release_notes" > changelog.md
echo "生成日志内容:"
cat changelog.md
- name: Create Release
uses: ncipollo/release-action@v1
with:
generateReleaseNotes: false
bodyFile: changelog.md
tag: ${{ github.ref_name }}

View File

@ -76,7 +76,6 @@
"lint:fix": "eslint --fix" "lint:fix": "eslint --fix"
}, },
"dependencies": { "dependencies": {
"@climblee/uv-ui": "^1.1.20",
"@dcloudio/uni-app": "3.0.0-4060620250520001", "@dcloudio/uni-app": "3.0.0-4060620250520001",
"@dcloudio/uni-app-harmony": "3.0.0-4060620250520001", "@dcloudio/uni-app-harmony": "3.0.0-4060620250520001",
"@dcloudio/uni-app-plus": "3.0.0-4060620250520001", "@dcloudio/uni-app-plus": "3.0.0-4060620250520001",
@ -100,6 +99,7 @@
"pinia": "2.0.36", "pinia": "2.0.36",
"pinia-plugin-persistedstate": "3.2.1", "pinia-plugin-persistedstate": "3.2.1",
"vue": "^3.4.21", "vue": "^3.4.21",
"wot-design-uni": "^1.9.1",
"z-paging": "2.8.7" "z-paging": "2.8.7"
}, },
"devDependencies": { "devDependencies": {

View File

@ -13,8 +13,7 @@ export default defineUniPages({
autoscan: true, autoscan: true,
custom: { custom: {
'^fg-(.*)': '@/components/fg-$1/fg-$1.vue', '^fg-(.*)': '@/components/fg-$1/fg-$1.vue',
'^uv-(.*)': '@climblee/uv-ui/components/uv-$1/uv-$1.vue', '^wd-(.*)': 'wot-design-uni/components/wd-$1/wd-$1.vue',
// 下面是z-paging 的配置
'^(?!z-paging-refresh|z-paging-load-more)z-paging(.*)': '^(?!z-paging-refresh|z-paging-load-more)z-paging(.*)':
'z-paging/components/z-paging$1/z-paging$1.vue', 'z-paging/components/z-paging$1/z-paging$1.vue',
}, },

21
pnpm-lock.yaml generated
View File

@ -16,9 +16,6 @@ importers:
.: .:
dependencies: dependencies:
'@climblee/uv-ui':
specifier: ^1.1.20
version: 1.1.20
'@dcloudio/uni-app': '@dcloudio/uni-app':
specifier: 3.0.0-4060620250520001 specifier: 3.0.0-4060620250520001
version: 3.0.0-4060620250520001(@dcloudio/types@3.4.14)(postcss@8.4.49)(rollup@4.41.1)(vue@3.5.15(typescript@5.7.2)) version: 3.0.0-4060620250520001(@dcloudio/types@3.4.14)(postcss@8.4.49)(rollup@4.41.1)(vue@3.5.15(typescript@5.7.2))
@ -88,6 +85,9 @@ importers:
vue: vue:
specifier: ^3.4.21 specifier: ^3.4.21
version: 3.5.15(typescript@5.7.2) version: 3.5.15(typescript@5.7.2)
wot-design-uni:
specifier: ^1.9.1
version: 1.9.1(vue@3.5.15(typescript@5.7.2))
z-paging: z-paging:
specifier: 2.8.7 specifier: 2.8.7
version: 2.8.7 version: 2.8.7
@ -935,9 +935,6 @@ packages:
'@clack/prompts@0.11.0': '@clack/prompts@0.11.0':
resolution: {integrity: sha512-pMN5FcrEw9hUkZA4f+zLlzivQSeQf5dRGJjSUbvVYDLvpKCdQx5OaknvKzgbtXOizhP+SJJJjqEbOe55uKKfAw==} resolution: {integrity: sha512-pMN5FcrEw9hUkZA4f+zLlzivQSeQf5dRGJjSUbvVYDLvpKCdQx5OaknvKzgbtXOizhP+SJJJjqEbOe55uKKfAw==}
'@climblee/uv-ui@1.1.20':
resolution: {integrity: sha512-jkyesHJsPJkF4Nap9ZmG1/ibKlxXA5M8+ntqKXwwloIsYSYL5SOKb0gyPj17aBOU1PkJpmeiZ8PwnTolhK2/HA==}
'@commitlint/cli@19.8.1': '@commitlint/cli@19.8.1':
resolution: {integrity: sha512-LXUdNIkspyxrlV6VDHWBmCZRtkEVRpBKxi2Gtw3J54cGWhLCTouVD/Q6ZSaSvd2YaDObWK8mDjrz3TIKtaQMAA==} resolution: {integrity: sha512-LXUdNIkspyxrlV6VDHWBmCZRtkEVRpBKxi2Gtw3J54cGWhLCTouVD/Q6ZSaSvd2YaDObWK8mDjrz3TIKtaQMAA==}
engines: {node: '>=v18'} engines: {node: '>=v18'}
@ -6280,6 +6277,12 @@ packages:
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
wot-design-uni@1.9.1:
resolution: {integrity: sha512-bZBt6xt5HfvmHBm76BZWBrvthHKeK7cbR//bbmv2ICjPRLXvD9KKHGZDZrq6C/j+DXHzA4UbcGer3iE8XcuVkw==}
engines: {HBuilderX: ^3.8.7}
peerDependencies:
vue: '>=3.2.47'
wrap-ansi@7.0.0: wrap-ansi@7.0.0:
resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
engines: {node: '>=10'} engines: {node: '>=10'}
@ -7320,8 +7323,6 @@ snapshots:
picocolors: 1.1.1 picocolors: 1.1.1
sisteransi: 1.0.5 sisteransi: 1.0.5
'@climblee/uv-ui@1.1.20': {}
'@commitlint/cli@19.8.1(@types/node@20.17.9)(typescript@5.7.2)': '@commitlint/cli@19.8.1(@types/node@20.17.9)(typescript@5.7.2)':
dependencies: dependencies:
'@commitlint/format': 19.8.1 '@commitlint/format': 19.8.1
@ -14137,6 +14138,10 @@ snapshots:
word-wrap@1.2.5: {} word-wrap@1.2.5: {}
wot-design-uni@1.9.1(vue@3.5.15(typescript@5.7.2)):
dependencies:
vue: 3.5.15(typescript@5.7.2)
wrap-ansi@7.0.0: wrap-ansi@7.0.0:
dependencies: dependencies:
ansi-styles: 4.3.0 ansi-styles: 4.3.0

View File

@ -17,7 +17,6 @@ onHide(() => {
</script> </script>
<style lang="scss"> <style lang="scss">
/* stylelint-disable selector-type-no-unknown */
button::after { button::after {
border: none; border: none;
} }

View File

@ -0,0 +1,58 @@
<script lang="ts" setup>
withDefaults(
defineProps<{
leftText?: string
rightText?: string
leftArrow?: boolean
bordered?: boolean
fixed?: boolean
placeholder?: boolean
zIndex?: number
safeAreaInsetTop?: boolean
leftDisabled?: boolean
rightDisabled?: boolean
}>(),
{
leftText: '返回',
rightText: '',
leftArrow: true,
bordered: true,
fixed: false,
placeholder: true,
zIndex: 1,
safeAreaInsetTop: true,
leftDisabled: false,
rightDisabled: false,
},
)
function handleClickLeft() {
uni.navigateBack({
fail() {
uni.reLaunch({
url: '/pages/index/index',
})
},
})
}
</script>
<template>
<wd-navbar
:left-text="leftText"
:right-text="rightText"
:left-arrow="leftArrow"
:bordered="bordered"
:fixed="fixed"
:placeholder="placeholder"
:z-index="zIndex"
:safe-area-inset-top="safeAreaInsetTop"
:left-disabled="leftDisabled"
:right-disabled="rightDisabled"
@click-left="handleClickLeft"
>
<template #title>
<slot />
</template>
</wd-navbar>
</template>

View File

@ -1,7 +1,17 @@
<script lang="ts" setup></script> <script lang="ts" setup>
import type { ConfigProviderThemeVars } from 'wot-design-uni'
const themeVars: ConfigProviderThemeVars = {
// colorTheme: 'red',
// buttonPrimaryBgColor: '#07c160',
// buttonPrimaryColor: '#07c160',
}
</script>
<template> <template>
<div> <wd-config-provider :theme-vars="themeVars">
<slot /> <slot />
</div> <wd-toast />
<wd-message-box />
</wd-config-provider>
</template> </template>

View File

@ -1,7 +1,17 @@
<script lang="ts" setup></script> <script lang="ts" setup>
import type { ConfigProviderThemeVars } from 'wot-design-uni'
const themeVars: ConfigProviderThemeVars = {
// colorTheme: 'red',
// buttonPrimaryBgColor: '#07c160',
// buttonPrimaryColor: '#07c160',
}
</script>
<template> <template>
<div> <wd-config-provider :theme-vars="themeVars">
<slot /> <slot />
</div> <wd-toast />
<wd-message-box />
</wd-config-provider>
</template> </template>

View File

@ -7,9 +7,9 @@ import { tabbarList as _tabBarList, cacheTabbarEnable, selectedTabbarStrategy }
const customTabbarEnable = selectedTabbarStrategy === 1 || selectedTabbarStrategy === 2 const customTabbarEnable = selectedTabbarStrategy === 1 || selectedTabbarStrategy === 2
/** tabbarList 里面的 path 从 pages.config.ts 得到 */ /** tabbarList 里面的 path 从 pages.config.ts 得到 */
const tabbarList = _tabBarList.map(item => ({ ...item, path: `/${item.pagePath}` })) const tabbarList = _tabBarList.map(item => ({ ...item, path: `/${item.pagePath}` }))
function selectTabBar(name: number) { function selectTabBar({ value: index }: { value: number }) {
const url = tabbarList[name].path const url = tabbarList[index].path
tabbarStore.setCurIdx(name) tabbarStore.setCurIdx(index)
if (cacheTabbarEnable) { if (cacheTabbarEnable) {
uni.switchTab({ url }) uni.switchTab({ url })
} }
@ -34,11 +34,9 @@ onLoad(() => {
</script> </script>
<template> <template>
<uv-tabbar <wd-tabbar
v-if="customTabbarEnable" v-if="customTabbarEnable"
:value="tabbarStore.curIdx" v-model="tabbarStore.curIdx"
active-color="#d81e06"
inactive-color="#7d7e80"
bordered bordered
safeareainsetbottom safeareainsetbottom
placeholder placeholder
@ -46,40 +44,24 @@ onLoad(() => {
@change="selectTabBar" @change="selectTabBar"
> >
<block v-for="(item, idx) in tabbarList" :key="item.path"> <block v-for="(item, idx) in tabbarList" :key="item.path">
<uv-tabbar-item <wd-tabbar-item v-if="item.iconType === 'uiLib'" :title="item.text" :icon="item.icon" />
v-if="item.iconType === 'uiLib'" <wd-tabbar-item
:text="item.text"
:icon="item.icon"
:name="idx"
/>
<uv-tabbar-item
v-else-if="item.iconType === 'unocss' || item.iconType === 'iconfont'" v-else-if="item.iconType === 'unocss' || item.iconType === 'iconfont'"
:text="item.text" :title="item.text"
:name="idx"
> >
<template #active-icon> <template #icon>
<view <view
h-40rpx h-40rpx
w-40rpx w-40rpx
class="text-[#d81e06]"
:class="[item.icon, idx === tabbarStore.curIdx ? 'is-active' : 'is-inactive']" :class="[item.icon, idx === tabbarStore.curIdx ? 'is-active' : 'is-inactive']"
/> />
</template> </template>
<template #inactive-icon> </wd-tabbar-item>
<view <wd-tabbar-item v-else-if="item.iconType === 'local'" :title="item.text">
h-40rpx
w-40rpx
class="text-[#7d7e80]"
:class="[item.icon, idx === tabbarStore.curIdx ? 'is-active' : 'is-inactive']"
/>
</template>
</uv-tabbar-item>
<uv-tabbar-item v-else-if="item.iconType === 'local'" :text="item.text" :name="idx">
<template #icon> <template #icon>
<image :src="item.icon" h-40rpx w-40rpx /> <image :src="item.icon" h-40rpx w-40rpx />
</template> </template>
</uv-tabbar-item> </wd-tabbar-item>
</block> </block>
</uv-tabbar> </wd-tabbar>
</template> </template>

View File

@ -1,10 +1,19 @@
<script lang="ts" setup> <script lang="ts" setup>
import type { ConfigProviderThemeVars } from 'wot-design-uni'
import FgTabbar from './fg-tabbar/fg-tabbar.vue' import FgTabbar from './fg-tabbar/fg-tabbar.vue'
const themeVars: ConfigProviderThemeVars = {
// colorTheme: 'red',
// buttonPrimaryBgColor: '#07c160',
// buttonPrimaryColor: '#07c160',
}
</script> </script>
<template> <template>
<view> <wd-config-provider :theme-vars="themeVars">
<slot /> <slot />
<FgTabbar /> <FgTabbar />
</view> <wd-toast />
<wd-message-box />
</wd-config-provider>
</template> </template>

View File

@ -10,7 +10,7 @@
"autoscan": true, "autoscan": true,
"custom": { "custom": {
"^fg-(.*)": "@/components/fg-$1/fg-$1.vue", "^fg-(.*)": "@/components/fg-$1/fg-$1.vue",
"^uv-(.*)": "@climblee/uv-ui/components/uv-$1/uv-$1.vue", "^wd-(.*)": "wot-design-uni/components/wd-$1/wd-$1.vue",
"^(?!z-paging-refresh|z-paging-load-more)z-paging(.*)": "z-paging/components/z-paging$1/z-paging$1.vue" "^(?!z-paging-refresh|z-paging-load-more)z-paging(.*)": "z-paging/components/z-paging$1/z-paging$1.vue"
} }
}, },

View File

@ -61,9 +61,9 @@ function reset() {
<!-- #endif --> <!-- #endif -->
<!-- http://localhost:9000/#/pages/index/request --> <!-- http://localhost:9000/#/pages/index/request -->
<uv-button class="my-6" type="primary" @click="run"> <wd-button class="my-6" @click="run">
发送请求 发送请求
</uv-button> </wd-button>
<view class="h-16"> <view class="h-16">
<view v-if="loading"> <view v-if="loading">
loading... loading...
@ -77,8 +77,8 @@ function reset() {
</view> </view>
</block> </block>
</view> </view>
<uv-button type="warning" class="my-6" :disabled="!data" @click="reset"> <wd-button type="error" class="my-6" :disabled="!data" @click="reset">
重置数据 重置数据
</uv-button> </wd-button>
</view> </view>
</template> </template>

View File

@ -13,9 +13,9 @@ const { loading, data, run } = useUpload()
<template> <template>
<view class="p-4 text-center"> <view class="p-4 text-center">
<uv-button type="primary" @click="run"> <wd-button @click="run">
选择图片并上传 选择图片并上传
</uv-button> </wd-button>
<view v-if="loading" class="h-10 text-blue"> <view v-if="loading" class="h-10 text-blue">
上传... 上传...
</view> </view>

View File

@ -56,7 +56,7 @@ console.log('index')
<view class="mt-10"> <view class="mt-10">
<image src="/static/logo.svg" alt="" class="mx-auto block h-28 w-28" /> <image src="/static/logo.svg" alt="" class="mx-auto block h-28 w-28" />
</view> </view>
<view class="main-title-color mt-4 text-center text-4xl"> <view class="mt-4 text-center text-4xl text-[#d14328]">
unibest unibest
</view> </view>
<view class="mb-8 mt-2 text-center text-2xl"> <view class="mb-8 mt-2 text-center text-2xl">
@ -88,7 +88,7 @@ console.log('index')
<view class="mt-4 text-center"> <view class="mt-4 text-center">
模板分支是 模板分支是
<text class="text-green-500"> <text class="text-green-500">
base-uv-ui base
</text> </text>
</view> </view>
</view> </view>

View File

@ -75,5 +75,3 @@ $uni-color-subtitle: #555; // 二级标题颜色
$uni-font-size-subtitle: 18px; $uni-font-size-subtitle: 18px;
$uni-color-paragraph: #3f536e; // 文章段落颜色 $uni-color-paragraph: #3f536e; // 文章段落颜色
$uni-font-size-paragraph: 15px; $uni-font-size-paragraph: 15px;
@import '@climblee/uv-ui/theme.scss';

View File

@ -14,8 +14,7 @@
"@dcloudio/types", "@dcloudio/types",
"@uni-helper/uni-types", "@uni-helper/uni-types",
"@types/wechat-miniprogram", "@types/wechat-miniprogram",
"@ttou/uv-typings/shim", "wot-design-uni/global.d.ts",
"@ttou/uv-typings/v2",
"z-paging/types", "z-paging/types",
"./src/typings.d.ts" "./src/typings.d.ts"
], ],

View File

@ -182,8 +182,5 @@ export default async ({ command, mode }) => {
}, },
}, },
}, },
optimizeDeps: {
exclude: ['sard-uniapp'],
},
}) })
} }