create-young-proj 1.2.1 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.md +61 -0
- package/README.md +6 -1
- package/dist/index.mjs +12 -12
- package/package.json +1 -1
- package/src/index.ts +6 -1
- package/template-nuxt-admin/env.d.ts +19 -1
- package/template-nuxt-admin/nuxt.config.ts +4 -2
- package/template-nuxt-admin/server/plugins/env.ts +0 -1
- package/template-nuxt-website/README.md +4 -0
- package/template-nuxt-website/composables/utils.ts +0 -4
- package/template-nuxt-website/env.d.ts +18 -1
- package/template-nuxt-website/nuxt.config.ts +3 -2
- package/template-nuxt-website/package.json +4 -5
- package/template-nuxt-website/server/api/get_footer_info.get.ts +3 -3
- package/template-nuxt-website/server/api/get_gray_status.get.ts +1 -0
- package/template-nuxt-website/server/api/get_head_nav.get.ts +1 -1
- package/template-nuxt-website/server/api/get_home_banner.get.ts +2 -2
- package/template-nuxt-website/server/routes/get/env.ts +13 -0
- package/template-nuxt-website/yarn.lock +1173 -1599
- package/template-uni-app/.vscode/vue-html.code-snippets +2 -7
- package/template-uni-app/README.md +2 -0
- package/template-uni-app/_env +1 -1
- package/template-uni-app/auto-imports.d.ts +718 -1
- package/template-uni-app/custom-plugins/multiconf.ts +13 -2
- package/template-uni-app/eslint.config.js +3 -1
- package/template-uni-app/package.json +11 -9
- package/template-uni-app/pnpm-lock.yaml +531 -866
- package/template-uni-app/src/manifest.json +1 -1
- package/template-uni-app/src/pages/index.vue +12 -9
- package/template-uni-app/src/pages/my.vue +6 -9
- package/template-uni-app/src/pages.json +1 -1
- package/template-uni-app/uni-pages.d.ts +24 -0
- package/template-uni-app/vite.config.ts +6 -3
- package/template-vitepress/.vitepress/components/HomePage.vue +54 -0
- package/template-vitepress/.vitepress/components/TodoItem.vue +16 -0
- package/template-vitepress/.vitepress/components.d.ts +13 -0
- package/template-vitepress/.vitepress/config.mts +159 -0
- package/template-vitepress/.vitepress/theme/index.ts +26 -0
- package/template-vitepress/.vitepress/theme/style.css +139 -0
- package/template-vitepress/Dockerfile +41 -0
- package/template-vitepress/README.md +102 -0
- package/template-vitepress/_gitignore +6 -0
- package/template-vitepress/_npmrc +2 -0
- package/template-vitepress/_nvmrc +1 -0
- package/template-vitepress/boot.mjs +17 -0
- package/template-vitepress/index.md +53 -0
- package/template-vitepress/nitro.config.ts +19 -0
- package/template-vitepress/package.json +26 -0
- package/template-vitepress/plugins/init.ts +204 -0
- package/template-vitepress/tsconfig.json +3 -0
- package/template-vitepress/vite.config.ts +66 -0
- package/template-uni-app/.eslintignore +0 -1
- package/template-uni-app/.eslintrc +0 -16
@@ -0,0 +1,102 @@
|
|
1
|
+
# template-vitepress
|
2
|
+
|
3
|
+
[![](https://img.shields.io/badge/Author-BluesYoung--web-blue)](https://gitee.com/BluesYoung-web)
|
4
|
+
|
5
|
+
## 本地运行
|
6
|
+
|
7
|
+
::: code-group
|
8
|
+
```bash [yarn]
|
9
|
+
# 装依赖
|
10
|
+
yarn
|
11
|
+
# 运行
|
12
|
+
yarn dev
|
13
|
+
```
|
14
|
+
```bash [pnpm]
|
15
|
+
# 装依赖
|
16
|
+
pnpm i
|
17
|
+
# 运行
|
18
|
+
pnpm dev
|
19
|
+
```
|
20
|
+
```bash [bun]
|
21
|
+
# 装依赖
|
22
|
+
bun i
|
23
|
+
# 运行
|
24
|
+
bun dev
|
25
|
+
```
|
26
|
+
```bash [npm]
|
27
|
+
# 装依赖
|
28
|
+
npm i
|
29
|
+
# 运行
|
30
|
+
npm run dev
|
31
|
+
```
|
32
|
+
:::
|
33
|
+
|
34
|
+
## 到手之后需要自行调整的内容
|
35
|
+
|
36
|
+
### `.vitepress/config.mts`
|
37
|
+
|
38
|
+
<TodoItem>seo 相关<code ml-1>title, description</code></TodoItem>
|
39
|
+
|
40
|
+
:::danger
|
41
|
+
<TodoItem>部署相关<code ml-1>base</code></TodoItem>
|
42
|
+
|
43
|
+
- 根路径部署就删掉,否则为部署的路径,**必须以 `/` 结尾**
|
44
|
+
|
45
|
+
- [官方文档](https://vitepress.dev/reference/site-config#base)
|
46
|
+
:::
|
47
|
+
|
48
|
+
<TodoItem><a href="https://vitepress.dev/reference/default-theme-nav" target="_blank">顶部导航</a> <code ml-1>themeConfig -> nav</code></TodoItem>
|
49
|
+
|
50
|
+
<TodoItem><a href="https://vitepress.dev/reference/default-theme-sidebar" target="_blank">侧边栏导航</a> <code ml-1>themeConfig -> sidebar</code></TodoItem>
|
51
|
+
|
52
|
+
<TodoItem>替换仓库地址 <code ml-1>themeConfig -> socialLinks -> link</code></TodoItem>
|
53
|
+
|
54
|
+
<TodoItem>替换仓库地址 <code ml-1>themeConfig -> editLink -> pattern</code></TodoItem>
|
55
|
+
|
56
|
+
### `index.md`
|
57
|
+
|
58
|
+
<TodoItem>标题及描述 <code ml-1>hero -> [name, text, tagline]</code></TodoItem>
|
59
|
+
|
60
|
+
<TodoItem>快捷导航 <code ml-1>hero -> actions</code></TodoItem>
|
61
|
+
|
62
|
+
<TodoItem>特性介绍 <code ml-1>features</code></TodoItem>
|
63
|
+
|
64
|
+
### 首页贡献者
|
65
|
+
|
66
|
+
`.vitepress/components/HomePage.vue -> teamMembers` 按需修改
|
67
|
+
|
68
|
+
:::info
|
69
|
+
如果不需要展示,将 `.vitepress/theme/index.ts -> 'home-features-after'` 这一行注释即可
|
70
|
+
:::
|
71
|
+
|
72
|
+
## 文档书写
|
73
|
+
|
74
|
+
### 简介
|
75
|
+
|
76
|
+
标题:`使用 # 符号表示标题,数量代表标题级别。例如:# 一级标题、## 二级标题`
|
77
|
+
|
78
|
+
段落和换行:`段落之间使用空行分隔,要插入换行符,可以在行末添加两个空格`
|
79
|
+
|
80
|
+
强调:`使用 * 或 _ 包围文本来斜体显示,使用两个 * 或 _ 包围文本来加粗显示。例如:*斜体文本*、**加粗文本**`
|
81
|
+
|
82
|
+
列表:`使用 *、+ 或 - 开头创建无序列表,使用数字后跟句点创建有序列表。嵌套列表时缩进四个空格或一个制表符`
|
83
|
+
|
84
|
+
链接:`使用 [显示文本](链接地址) 的格式创建链接。例如:[OpenAI](https://openai.com)`
|
85
|
+
|
86
|
+
图片:`使用 ![替代文本](图片链接地址) 的格式插入图片。例如:![Logo](https://example.com/logo.png)`
|
87
|
+
|
88
|
+
引用块:`使用 > 表示引用块。可以嵌套使用多个 > 表示多层引用`
|
89
|
+
|
90
|
+
代码块:`使用三个反引号 ```` 或四个空格缩进来创建代码块。可以指定语言以进行语法高亮`
|
91
|
+
|
92
|
+
水平线:`使用三个或更多连续的 -、* 或 _ 创建水平线分隔线`
|
93
|
+
|
94
|
+
转义字符:`在特殊字符前添加反斜杠 \ 可以转义字符的原始含义`
|
95
|
+
|
96
|
+
### 外部教程
|
97
|
+
|
98
|
+
[vitepress 扩展语法](https://vitepress.dev/guide/markdown)
|
99
|
+
|
100
|
+
[基础语法](https://www.markdownguide.org/basic-syntax/)
|
101
|
+
|
102
|
+
[中文技术文档的写作规范——阮一峰](https://github.com/ruanyf/document-style-guide)
|
@@ -0,0 +1 @@
|
|
1
|
+
20.9.0
|
@@ -0,0 +1,17 @@
|
|
1
|
+
/*
|
2
|
+
* @Author: zhangyang
|
3
|
+
* @Date: 2022-09-16 11:48:05
|
4
|
+
* @LastEditTime: 2023-11-09 11:59:07
|
5
|
+
* @Description:
|
6
|
+
*/
|
7
|
+
(async () => {
|
8
|
+
const env = process.env.DEPLOY_ENV || 'dev';
|
9
|
+
const listenPort = process.env.LISTEN_PORT || 3333;
|
10
|
+
console.log('当前环境:', env);
|
11
|
+
console.log('服务监听端口:', listenPort);
|
12
|
+
|
13
|
+
process.env.NITRO_PORT = listenPort;
|
14
|
+
|
15
|
+
await import('./.output/server/index.mjs');
|
16
|
+
})();
|
17
|
+
|
@@ -0,0 +1,53 @@
|
|
1
|
+
---
|
2
|
+
# https://vitepress.dev/reference/default-theme-home-page
|
3
|
+
layout: home
|
4
|
+
|
5
|
+
hero:
|
6
|
+
name: 前端知识库
|
7
|
+
text: 知识共建,共创未来
|
8
|
+
tagline: 多种实用工具,满足不同需求
|
9
|
+
image:
|
10
|
+
src: https://api.iconify.design/noto:rocket.svg?color=%2312b2e7&width=320
|
11
|
+
actions:
|
12
|
+
- theme: brand
|
13
|
+
text: 快速开始
|
14
|
+
link: /newer
|
15
|
+
- theme: alt
|
16
|
+
text: 前端规范
|
17
|
+
link: /standards
|
18
|
+
- theme: alt
|
19
|
+
text: 常见问题及解决方案
|
20
|
+
link: /problems
|
21
|
+
|
22
|
+
features:
|
23
|
+
- title: '@bluesyoung/ui-vue3-element-plus'
|
24
|
+
icon: <span class="i-ep-element-plus text-[#409eff]"></span>
|
25
|
+
details: 基于 element-plus 二次封装的常用组件库
|
26
|
+
link: /libs/public/ui-vue3-element-plus
|
27
|
+
|
28
|
+
- title: '@bluesyoung/http'
|
29
|
+
icon: <span class="i-logos-lighttpd"></span>
|
30
|
+
details: 基于 axios 封装的 http 请求库, 拥有完善的 TS 类型提示, 支持 web/微信小程序
|
31
|
+
link: /libs/public/http
|
32
|
+
|
33
|
+
- title: '@bluesyoung/utils'
|
34
|
+
icon: <span class="i-tabler-tools text-[#409eff]"></span>
|
35
|
+
details: 常用工具函数
|
36
|
+
link: https://gitee.com/-/ide/project/BluesYoung-web/young/edit/master/-/packages/utils/dist/index.d.ts
|
37
|
+
|
38
|
+
- title: '@bluesyoung/logger'
|
39
|
+
icon: <span class="i-vscode-icons-file-type-log"></span>
|
40
|
+
details: 基于 consola 封装的日志工具, 默认格式化为容器部署要求的格式, 并保留了扩充能力
|
41
|
+
link: /libs/public/logger
|
42
|
+
|
43
|
+
- title: '@bluesyoung/rpc'
|
44
|
+
icon: <span class="i-simple-icons-trpc text-[#409eff]"></span>
|
45
|
+
details: 页面与其嵌套的 iframe 或由其打开的子页面之间进行通信
|
46
|
+
link: /libs/public/rpc
|
47
|
+
|
48
|
+
- title: '@bluesyoung/ui-vue3'
|
49
|
+
icon: <span class="i-logos-vue"></span>
|
50
|
+
details: 基于 vue3 + @vueuse/core 封装的组件,无额外的依赖
|
51
|
+
link: /libs/public/ui-vue3
|
52
|
+
---
|
53
|
+
|
@@ -0,0 +1,19 @@
|
|
1
|
+
/*
|
2
|
+
* @Author: zhangyang
|
3
|
+
* @Date: 2022-12-28 11:59:56
|
4
|
+
* @LastEditTime: 2023-11-14 09:18:38
|
5
|
+
* @Description:
|
6
|
+
*/
|
7
|
+
export default defineNitroConfig({
|
8
|
+
/**
|
9
|
+
* 托管前端静态资源
|
10
|
+
*/
|
11
|
+
serveStatic: 'node',
|
12
|
+
publicAssets: [
|
13
|
+
{
|
14
|
+
dir: '.vitepress/dist',
|
15
|
+
},
|
16
|
+
],
|
17
|
+
preset: 'bun'
|
18
|
+
});
|
19
|
+
|
@@ -0,0 +1,26 @@
|
|
1
|
+
{
|
2
|
+
"scripts": {
|
3
|
+
"dev": "vitepress dev",
|
4
|
+
"docs:dev": "vitepress dev",
|
5
|
+
"docs:build": "vitepress build",
|
6
|
+
"docs:preview": "vitepress preview",
|
7
|
+
"build": "vitepress build && nitropack build",
|
8
|
+
"postinstall": "nitropack prepare"
|
9
|
+
},
|
10
|
+
"devDependencies": {
|
11
|
+
"@iconify/json": "^2.2.139",
|
12
|
+
"@types/md5": "^2.3.5",
|
13
|
+
"@types/node": "20",
|
14
|
+
"nitropack": "^2.7.2",
|
15
|
+
"pathe": "^1.1.1",
|
16
|
+
"unocss": "^0.57.2",
|
17
|
+
"unplugin-vue-components": "^0.25.2",
|
18
|
+
"vitepress": "^1.0.0-rc.25",
|
19
|
+
"vue": "^3.3.8"
|
20
|
+
},
|
21
|
+
"dependencies": {
|
22
|
+
"c12": "^1.5.1",
|
23
|
+
"md5": "^2.3.0"
|
24
|
+
},
|
25
|
+
"version": "1.0.0"
|
26
|
+
}
|
@@ -0,0 +1,204 @@
|
|
1
|
+
/*
|
2
|
+
* @Author: zhangyang
|
3
|
+
* @Date: 2023-11-10 18:02:07
|
4
|
+
* @LastEditTime: 2023-11-27 15:01:31
|
5
|
+
* @Description:
|
6
|
+
*/
|
7
|
+
import { resolve } from 'node:path'
|
8
|
+
import { loadConfig } from 'c12'
|
9
|
+
import md5 from 'md5'
|
10
|
+
|
11
|
+
/**
|
12
|
+
* 签名
|
13
|
+
* @param params 参与签名的参数
|
14
|
+
* @param token 秘钥
|
15
|
+
*/
|
16
|
+
export function signFn(params: Record<string, any>, token: string) {
|
17
|
+
const asciiSortedIndexArr = Object.keys(params).sort()
|
18
|
+
let str = ''
|
19
|
+
const obj: Record<string, any> = {}
|
20
|
+
if (asciiSortedIndexArr.length > 0) {
|
21
|
+
for (const key of asciiSortedIndexArr) {
|
22
|
+
const v = params[key]
|
23
|
+
if (v !== null && v !== '') {
|
24
|
+
str += `${key}=${encodeURIComponent(v)}&`
|
25
|
+
obj[key] = v
|
26
|
+
}
|
27
|
+
}
|
28
|
+
}
|
29
|
+
str += `token=${token}`
|
30
|
+
return {
|
31
|
+
sign: md5(str).toUpperCase(),
|
32
|
+
rawValue: obj,
|
33
|
+
}
|
34
|
+
}
|
35
|
+
|
36
|
+
/**
|
37
|
+
* 服务上报
|
38
|
+
*/
|
39
|
+
export async function useServerReport(port: number) {
|
40
|
+
enum ReportURL {
|
41
|
+
上线 = '/register/login',
|
42
|
+
心跳 = '/register/heart',
|
43
|
+
}
|
44
|
+
|
45
|
+
const commonReq = async <T>(url: string, data: Record<string, any>, token: string) => {
|
46
|
+
const api_server_url
|
47
|
+
= process.env.NUXT_PUBLIC_API_SERVER || `http://${process.env.APIGATEHOST}`
|
48
|
+
const { sign, rawValue } = signFn(data, token)
|
49
|
+
|
50
|
+
console.log('🚀 ~ file: env.ts:41 ~ commonReq ~ api_server_url:', api_server_url, rawValue)
|
51
|
+
|
52
|
+
const headers = {
|
53
|
+
'Authorization': `Bearer ${token}`,
|
54
|
+
'content-type': 'application/json; charset=utf-8;',
|
55
|
+
'time': `${Math.floor(Date.now() / 1000)}`,
|
56
|
+
sign,
|
57
|
+
}
|
58
|
+
|
59
|
+
return $fetch<T>(`${api_server_url}${url}`, {
|
60
|
+
method: 'post',
|
61
|
+
headers,
|
62
|
+
body: JSON.stringify(rawValue),
|
63
|
+
})
|
64
|
+
}
|
65
|
+
|
66
|
+
/**
|
67
|
+
* auth token
|
68
|
+
*/
|
69
|
+
let token: string
|
70
|
+
|
71
|
+
/**
|
72
|
+
* 登录/获取 token
|
73
|
+
*/
|
74
|
+
const login = async () => {
|
75
|
+
const data = {
|
76
|
+
serverId: process.env.APP_SERVER_ID,
|
77
|
+
serverName: process.env.APP_SERVER_NAME,
|
78
|
+
}
|
79
|
+
|
80
|
+
const { data: _data } = await commonReq<{
|
81
|
+
code: number
|
82
|
+
message: string
|
83
|
+
data: { token: string }
|
84
|
+
}>('/account/v1/internal/service/get_token', data, process.env.APP_SERVER_SECERET as string)
|
85
|
+
|
86
|
+
console.log('🚀 ~ file: env.ts:73 ~ login ~ _data:', _data)
|
87
|
+
|
88
|
+
const { token } = _data
|
89
|
+
console.log('login success, token: ', token, '\ntime: ', new Date().toLocaleString())
|
90
|
+
return token
|
91
|
+
}
|
92
|
+
|
93
|
+
/**
|
94
|
+
* 获取 auth token
|
95
|
+
*/
|
96
|
+
const getToken = async () => {
|
97
|
+
if (!token) {
|
98
|
+
token = await login()
|
99
|
+
setInterval(() => {
|
100
|
+
// 每 23 小时刷一次 token
|
101
|
+
token = ''
|
102
|
+
}, 1000 * 3600 * 23)
|
103
|
+
}
|
104
|
+
return token
|
105
|
+
}
|
106
|
+
|
107
|
+
/**
|
108
|
+
* 服务上线
|
109
|
+
*/
|
110
|
+
const report = async (url: ReportURL) => {
|
111
|
+
const token = await getToken()
|
112
|
+
try {
|
113
|
+
const res = await commonReq<{
|
114
|
+
host: string
|
115
|
+
port: string | number
|
116
|
+
weight: number
|
117
|
+
expire: number
|
118
|
+
}>(url, { port }, token)
|
119
|
+
|
120
|
+
console.log('请求成功:', url, new Date().toLocaleString())
|
121
|
+
return res
|
122
|
+
}
|
123
|
+
catch (error) {
|
124
|
+
console.error('请求失败:', url, error)
|
125
|
+
}
|
126
|
+
}
|
127
|
+
|
128
|
+
console.log('------------------------服务登录------------------------')
|
129
|
+
await login()
|
130
|
+
console.log('--------------------------------------------------------')
|
131
|
+
|
132
|
+
console.log('------------------------服务上线------------------------')
|
133
|
+
const info1 = await report(ReportURL.上线)
|
134
|
+
console.log('🚀 ~ file: init.ts:156 ~ defineNitroPlugin ~ info', info1)
|
135
|
+
console.log('--------------------------------------------------------')
|
136
|
+
|
137
|
+
console.log('------------------------服务心跳上报----------------------')
|
138
|
+
const info2 = await report(ReportURL.心跳)
|
139
|
+
console.log('🚀 ~ file: init.ts:163 ~ setInterval ~ info', info2)
|
140
|
+
console.log('----------------------------------------------------------')
|
141
|
+
setInterval(async () => {
|
142
|
+
console.log('------------------------服务心跳上报----------------------')
|
143
|
+
const info = await report(ReportURL.心跳)
|
144
|
+
console.log('🚀 ~ file: init.ts:163 ~ setInterval ~ info', info)
|
145
|
+
console.log('----------------------------------------------------------')
|
146
|
+
}, 1e4)
|
147
|
+
}
|
148
|
+
|
149
|
+
export default defineNitroPlugin(async (nitroApp) => {
|
150
|
+
const env = (process.env.DEPLOY_ENV as 'dev' | 'test' | 'online') || 'dev'
|
151
|
+
const { config } = await loadConfig<Record<string, any>>({
|
152
|
+
name: env,
|
153
|
+
cwd: resolve(process.cwd(), 'config'),
|
154
|
+
defaultConfig: {
|
155
|
+
// 此处可以放置通用的环境变量
|
156
|
+
// 由于频繁修改 package.json 会浪费 docker 性能,故将版本信息放于此处
|
157
|
+
// 优先读取环境变量中的版本信息(自己打的 Tag)
|
158
|
+
NUXT_PUBLIC_CURRENT_VERSION: process.env.PROJECT_VERSION || 'v0.0.1',
|
159
|
+
|
160
|
+
// 服务秘钥,不对前端开放
|
161
|
+
APP_SERVER_SECERET: '我是秘钥',
|
162
|
+
APP_SERVER_NAME: '我是服务名称',
|
163
|
+
APP_SERVER_ID: '我是服务id',
|
164
|
+
},
|
165
|
+
})
|
166
|
+
|
167
|
+
for (const key in config) {
|
168
|
+
if (process.env[key]) {
|
169
|
+
console.log(
|
170
|
+
'系统环境变量优先: ',
|
171
|
+
key,
|
172
|
+
' = ',
|
173
|
+
process.env[key],
|
174
|
+
' -> ',
|
175
|
+
config[key],
|
176
|
+
' -> ',
|
177
|
+
'覆盖',
|
178
|
+
)
|
179
|
+
config[key] = process.env[key]
|
180
|
+
}
|
181
|
+
else {
|
182
|
+
process.env[key] = config[key]
|
183
|
+
}
|
184
|
+
if (!(key.indexOf('NUXT_PUBLIC_') === 0))
|
185
|
+
delete config[key]
|
186
|
+
}
|
187
|
+
|
188
|
+
console.log('------------------------读取配置文件------------------------')
|
189
|
+
console.log(config)
|
190
|
+
console.log('-------------------------------------------------------------')
|
191
|
+
|
192
|
+
nitroApp.hooks.hook('request', (event) => {
|
193
|
+
const headers = event.node.req.headers
|
194
|
+
const path = event.node.req.url
|
195
|
+
console.log('path', path, 'ua', headers['user-agent'], 'x-forwarded-for', headers['x-forwarded-for'], 'x-real-ip', headers['x-real-ip'])
|
196
|
+
})
|
197
|
+
|
198
|
+
// 本地开发,不上报
|
199
|
+
if (process.env.NODE_ENV === 'development')
|
200
|
+
return
|
201
|
+
|
202
|
+
const port = process.env.LISTEN_PORT || 3333
|
203
|
+
useServerReport(+port)
|
204
|
+
})
|
@@ -0,0 +1,66 @@
|
|
1
|
+
/*
|
2
|
+
* @Author: zhangyang
|
3
|
+
* @Date: 2023-11-08 16:35:24
|
4
|
+
* @LastEditTime: 2023-11-08 16:37:49
|
5
|
+
* @Description:
|
6
|
+
*/
|
7
|
+
import fs from 'node:fs'
|
8
|
+
import type { Plugin } from 'vite'
|
9
|
+
import { defineConfig } from 'vite'
|
10
|
+
import Components from 'unplugin-vue-components/vite'
|
11
|
+
import Unocss from 'unocss/vite'
|
12
|
+
import { presetAttributify, presetIcons, presetUno } from 'unocss'
|
13
|
+
import { resolve } from 'pathe'
|
14
|
+
|
15
|
+
export default defineConfig({
|
16
|
+
optimizeDeps: {
|
17
|
+
// vitepress is aliased with replacement `join(DIST_CLIENT_PATH, '/index')`
|
18
|
+
// This needs to be excluded from optimization
|
19
|
+
exclude: ['@vueuse/core', 'vitepress'],
|
20
|
+
},
|
21
|
+
server: {
|
22
|
+
host: true,
|
23
|
+
hmr: {
|
24
|
+
overlay: false,
|
25
|
+
},
|
26
|
+
},
|
27
|
+
plugins: [
|
28
|
+
Components({
|
29
|
+
include: [/\.vue/, /\.md/],
|
30
|
+
dirs: '.vitepress/components',
|
31
|
+
dts: '.vitepress/components.d.ts',
|
32
|
+
}) as Plugin,
|
33
|
+
Unocss({
|
34
|
+
shortcuts: [
|
35
|
+
['btn', 'px-4 py-1 rounded inline-flex justify-center gap-2 text-white leading-30px children:mya !no-underline cursor-pointer disabled:cursor-default disabled:bg-gray-600 disabled:opacity-50'],
|
36
|
+
],
|
37
|
+
presets: [
|
38
|
+
presetUno({
|
39
|
+
dark: 'media',
|
40
|
+
}),
|
41
|
+
presetAttributify(),
|
42
|
+
presetIcons({
|
43
|
+
scale: 1.2,
|
44
|
+
}),
|
45
|
+
],
|
46
|
+
}),
|
47
|
+
IncludesPlugin(),
|
48
|
+
],
|
49
|
+
})
|
50
|
+
|
51
|
+
function IncludesPlugin(): Plugin {
|
52
|
+
return {
|
53
|
+
name: 'include-plugin',
|
54
|
+
enforce: 'pre',
|
55
|
+
transform(code, id) {
|
56
|
+
let changed = false
|
57
|
+
code = code.replace(/\[@@include\]\((.*?)\)/, (_, url) => {
|
58
|
+
changed = true
|
59
|
+
const full = resolve(id, url)
|
60
|
+
return fs.readFileSync(full, 'utf-8')
|
61
|
+
})
|
62
|
+
if (changed)
|
63
|
+
return code
|
64
|
+
},
|
65
|
+
}
|
66
|
+
}
|
@@ -1 +0,0 @@
|
|
1
|
-
src/uni_modules
|
@@ -1,16 +0,0 @@
|
|
1
|
-
{
|
2
|
-
"root": true,
|
3
|
-
"extends": "@antfu",
|
4
|
-
"rules": {
|
5
|
-
"@typescript-eslint/no-use-before-define": "off",
|
6
|
-
"no-console": "off",
|
7
|
-
"n/prefer-global/process": "off",
|
8
|
-
"unused-imports/no-unused-vars": "off",
|
9
|
-
"@typescript-eslint/ban-types": "off",
|
10
|
-
"vue/valid-v-model": "off",
|
11
|
-
"@typescript-eslint/ban-ts-comment": "off",
|
12
|
-
"no-throw-literal": "off",
|
13
|
-
"prefer-promise-reject-errors": "off",
|
14
|
-
"no-async-promise-executor": "off"
|
15
|
-
}
|
16
|
-
}
|