diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000000000000000000000000000000000000..da0310f513b62de04d1c71b03cee1dc0b1accc24 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,13 @@ +# editorconfig.org +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000000000000000000000000000000000000..3e8240a73c7f3b2ac96737489be63cc1e1131ab2 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,14 @@ +module.exports = { + extends: ['@mysteel', 'prettier'], + plugins: ['prettier'], + rules: { + 'prettier/prettier': [ + 'error', + { + endOfLine: 'auto', + }, + ], + 'no-undef': 'off', + 'no-console': 'off', + }, +} diff --git a/.gitignore b/.gitignore index 5d947ca8879f8a9072fe485c566204e3c2929e80..4fbaf643f76b0ef8f2906b5e8f8a41ad9382fb9c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,18 +1,30 @@ -# Build and Release Folders -bin-debug/ -bin-release/ -[Oo]bj/ -[Bb]in/ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* -# Other files and folders -.settings/ +node_modules +.DS_Store +dist +dist-ssr +coverage +*.local -# Executables -*.swf -*.air -*.ipa -*.apk +/cypress/videos/ +/cypress/screenshots/ +src/auto-imports.d.ts +src/components.d.ts -# Project files, i.e. `.project`, `.actionScriptProperties` and `.flexProperties` -# should NOT be excluded as they contain compiler settings and other important -# information for Eclipse / Flash Builder. +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/.husky/commit-msg b/.husky/commit-msg new file mode 100644 index 0000000000000000000000000000000000000000..e810522282d3edab703ac550a8dbcd48c7f435b7 --- /dev/null +++ b/.husky/commit-msg @@ -0,0 +1,4 @@ +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" + +npx --no -- commitlint --edit $1 diff --git a/.prettierrc.js b/.prettierrc.js new file mode 100644 index 0000000000000000000000000000000000000000..e33972274adbf6f88dffef5d095f32232817f7b6 --- /dev/null +++ b/.prettierrc.js @@ -0,0 +1,8 @@ +module.exports = { + printWidth: 80, // 一行的字符数,如果超过会进行换行,默认为80 + tabWidth: 2, // 一个 tab 代表几个空格数,默认为 2 个 + useTabs: false, //是否使用 tab 进行缩进,默认为false,表示用空格进行缩减 + singleQuote: true, // 字符串是否使用单引号,默认为 false,使用双引号 + semi: false, // 行尾是否使用分号,默认为true + bracketSpacing: true, // 对象大括号直接是否有空格,默认为 true,效果:{ a: 1 } +} diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000000000000000000000000000000000000..c0a6e5a48110e472b09d68afa2a030af6ab3208b --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["Vue.volar", "Vue.vscode-typescript-vue-plugin"] +} diff --git a/README.md b/README.md new file mode 100644 index 0000000000000000000000000000000000000000..563d4ca4e257d6735ed564b1f9df7005815cc9bf --- /dev/null +++ b/README.md @@ -0,0 +1,35 @@ +# vue-tempalte-3 + +This template should help get you started developing with Vue 3 in Vite. + +## Recommended IDE Setup + +[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin). + +## Customize configuration + +See [Vite Configuration Reference](https://vitejs.dev/config/). + +## Project Setup + +```sh +npm install +``` + +### Compile and Hot-Reload for Development + +```sh +npm run dev +``` + +### Compile and Minify for Production + +```sh +npm run build +``` + +### Run Unit Tests with [Vitest](https://vitest.dev/) + +```sh +npm run test:unit +``` diff --git a/commitlint.config.js b/commitlint.config.js new file mode 100644 index 0000000000000000000000000000000000000000..6e2f89873094e1336784225718b08b8c9829bece Binary files /dev/null and b/commitlint.config.js differ diff --git a/index.html b/index.html new file mode 100644 index 0000000000000000000000000000000000000000..030a6ff51bfc6f6adcc472f6d8c02db92ce947a8 --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite App + + +
+ + + diff --git a/jsdoc.json b/jsdoc.json new file mode 100644 index 0000000000000000000000000000000000000000..6fb1c74d5996db893d84988eec5a46df393cd4b6 --- /dev/null +++ b/jsdoc.json @@ -0,0 +1,16 @@ +{ + "plugins": [ + "node_modules/jsdoc-vuejs" + ], + "source": { + "include": [ "src/" ], + "exclude": [ "src/assets" ], + "includePattern": "\\.(vue|js)$" + }, + "opts": { + "template": "node_modules/minami", + "encoding": "utf8", + "destination": "./docs/", + "recurse": true + } +} diff --git a/mock/index.js b/mock/index.js new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/package.json b/package.json new file mode 100644 index 0000000000000000000000000000000000000000..e75d5dbaa2ff45adf3eb07ad458d3b93ee4fd8e1 --- /dev/null +++ b/package.json @@ -0,0 +1,48 @@ +{ + "name": "vue-tempalte-3", + "version": "0.0.0", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview --port 4173", + "test:unit": "vitest --environment jsdom", + "lint:js": "eslint --ext \".js,.vue\" .", + "lint:prettier": "prettier --check .", + "lint": "yarn lint:js && yarn lint:prettier", + "lintfix": "prettier --write --list-different . && yarn lint:js --fix", + "docs": "jsdoc -c jsdoc.json" + }, + "husky": { + "hooks": { + "commit-msg": "commitlint -E HUSKY_GIT_PARAMS" + } + }, + "dependencies": { + "axios": "^0.27.2", + "lodash": "^4.17.21", + "pinia": "^2.0.17", + "vue": "^3.2.37", + "vue-router": "^4.1.3" + }, + "devDependencies": { + "@commitlint/cli": "^17.1.2", + "@commitlint/config-conventional": "^17.1.0", + "@vitejs/plugin-vue": "^3.0.1", + "@vue/compiler-sfc": "^3.2.38", + "@vue/test-utils": "^2.0.2", + "eslint": "^8.23.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-vue": "^9.4.0", + "husky": "^8.0.1", + "jsdoc": "^3.6.11", + "jsdoc-vuejs": "^4.0.0", + "jsdom": "^20.0.0", + "minami": "^1.2.3", + "prettier": "^2.7.1", + "unplugin-auto-import": "^0.11.2", + "unplugin-vue-components": "^0.22.4", + "vite": "^3.0.4", + "vitest": "^0.21.0" + } +} diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..df36fcfb72584e00488330b560ebcf34a41c64c2 Binary files /dev/null and b/public/favicon.ico differ diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000000000000000000000000000000000000..e864195002371619c22d0454351235745b2a4f3f --- /dev/null +++ b/src/App.vue @@ -0,0 +1,85 @@ + + + + + diff --git a/src/api/index.js b/src/api/index.js new file mode 100644 index 0000000000000000000000000000000000000000..e34b770657beff3962de6c8bb24bf79278eb97bf --- /dev/null +++ b/src/api/index.js @@ -0,0 +1,27 @@ +import axios from 'axios' + +const service = axios.create({ + baseURL: process.env.VUE_APP_BASE_API, + headers: {}, + timeout: 120000 // request timeout +}) + +// 请求拦截 +service.interceptors.request.use( + config => config, + error => { + // do something with request error + console.log(error) // for debug + return Promise.reject(error) + } +) + +// 响应拦截 +service.interceptors.response.use( + response => response, + error => { + return Promise.reject(error) + } +) + +export default service diff --git a/src/assets/logo.svg b/src/assets/logo.svg new file mode 100644 index 0000000000000000000000000000000000000000..bc826fed80ad0c846e5ca25978776f555f4a2370 --- /dev/null +++ b/src/assets/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/HelloWorld.vue b/src/components/HelloWorld.vue new file mode 100644 index 0000000000000000000000000000000000000000..1b8faac1521345513353e96050dd24d94610d432 --- /dev/null +++ b/src/components/HelloWorld.vue @@ -0,0 +1,43 @@ + + + + + diff --git a/src/components/TheWelcome.vue b/src/components/TheWelcome.vue new file mode 100644 index 0000000000000000000000000000000000000000..d3d2e7acc8a9deeb26e48169ee3cbc64d2b54f2f --- /dev/null +++ b/src/components/TheWelcome.vue @@ -0,0 +1,84 @@ + + + diff --git a/src/components/WelcomeItem.vue b/src/components/WelcomeItem.vue new file mode 100644 index 0000000000000000000000000000000000000000..ba0def33c0e523d8c82426d76d76c39b482b21e0 --- /dev/null +++ b/src/components/WelcomeItem.vue @@ -0,0 +1,86 @@ + + + diff --git a/src/components/icons/IconCommunity.vue b/src/components/icons/IconCommunity.vue new file mode 100644 index 0000000000000000000000000000000000000000..2dc8b055253af30fb797037e2fe260505f0cf711 --- /dev/null +++ b/src/components/icons/IconCommunity.vue @@ -0,0 +1,7 @@ + diff --git a/src/components/icons/IconDocumentation.vue b/src/components/icons/IconDocumentation.vue new file mode 100644 index 0000000000000000000000000000000000000000..6d4791cfbcf2782b3e5ffbabd042d4c47b2fbbed --- /dev/null +++ b/src/components/icons/IconDocumentation.vue @@ -0,0 +1,7 @@ + diff --git a/src/components/icons/IconEcosystem.vue b/src/components/icons/IconEcosystem.vue new file mode 100644 index 0000000000000000000000000000000000000000..c3a4f078c0bd340a33c61ea9ecd8a755d03571ed --- /dev/null +++ b/src/components/icons/IconEcosystem.vue @@ -0,0 +1,7 @@ + diff --git a/src/components/icons/IconSupport.vue b/src/components/icons/IconSupport.vue new file mode 100644 index 0000000000000000000000000000000000000000..7db961e4d457094e582e8a5eb349a62222a5f79c --- /dev/null +++ b/src/components/icons/IconSupport.vue @@ -0,0 +1,12 @@ + diff --git a/src/components/icons/IconTooling.vue b/src/components/icons/IconTooling.vue new file mode 100644 index 0000000000000000000000000000000000000000..660598d7c76644ffe126a1a1feb1606650bfb937 --- /dev/null +++ b/src/components/icons/IconTooling.vue @@ -0,0 +1,19 @@ + + diff --git a/src/config/index.js b/src/config/index.js new file mode 100644 index 0000000000000000000000000000000000000000..2f678b6c625e6b2476a89ce1d795bdb477ad3f0d --- /dev/null +++ b/src/config/index.js @@ -0,0 +1,3 @@ +/** + * 配置信息 + */ \ No newline at end of file diff --git a/src/constants/index.js b/src/constants/index.js new file mode 100644 index 0000000000000000000000000000000000000000..ad83531fbb32a4a14f878690ad0bcdf0c073337d --- /dev/null +++ b/src/constants/index.js @@ -0,0 +1,3 @@ +/** + * 常量信息, 全局常量等 + */ \ No newline at end of file diff --git a/src/directives/index.js b/src/directives/index.js new file mode 100644 index 0000000000000000000000000000000000000000..9490f0de5e56c5f6d0a40c64c8f7d8675198fbc1 --- /dev/null +++ b/src/directives/index.js @@ -0,0 +1,3 @@ +/** + * 自定义指令 + */ \ No newline at end of file diff --git a/src/enums/demo.js b/src/enums/demo.js new file mode 100644 index 0000000000000000000000000000000000000000..6b6c17929c0f1657ff5bd078a968a304237a560c --- /dev/null +++ b/src/enums/demo.js @@ -0,0 +1,7 @@ +import createEnum from './index' + +export const DEMO = createEnum({ + ALL: ['0', 'all'], + MAIN_STORE: ['1', 'main'], + PUBLISH_TIME: ['2', 'time'], +}) diff --git a/src/enums/index.js b/src/enums/index.js new file mode 100644 index 0000000000000000000000000000000000000000..b407a0125428c35a6577be2f3d5413d707feefb7 --- /dev/null +++ b/src/enums/index.js @@ -0,0 +1,39 @@ +/** + * 项目所有Enum + */ +/** + * 枚举定义工具 + * 示例: + * const STATUS = createEnum({ + * ACTIVE: [1, 'active'], + * INACTIVE: [2, 'inactive'] + * }) + * 通过枚举值列表:STATUS.list + * 获取枚举值:STATUS.ACTIVE + * 获取枚举描述:STATUS.getDesc('ACTIVE') + * 通过枚举值获取描述:STATUS.getDescFromValue(STATUS.INACTIVE) + */ +export default function createEnum(definition) { + const strToValueMap = {} + const numToDescMap = {} + const list = [] + const listNotEmpty = [] + for (const enumName of Object.keys(definition)) { + const [value, desc] = definition[enumName] + strToValueMap[enumName] = value + numToDescMap[value] = desc + list.push({ label: desc, value }) + } + listNotEmpty.push(...list.filter((item) => item.value !== '')) + return Object.freeze({ + list, + listNotEmpty, + ...strToValueMap, + getDesc(enumName) { + return (definition[enumName] && definition[enumName][1]) || '' + }, + getDescFromValue(value) { + return numToDescMap[value] || '' + }, + }) +} diff --git a/src/hooks/useDemo.js b/src/hooks/useDemo.js new file mode 100644 index 0000000000000000000000000000000000000000..0d7d800adc7928403b3db5325f07886fc0690c55 --- /dev/null +++ b/src/hooks/useDemo.js @@ -0,0 +1,9 @@ +/** + * 项目所有单独功能的hooks + */ +export const useDemo = () => { + const demoList = reactive([]) + return { + demoList + } +} diff --git a/src/layout/layout.vue b/src/layout/layout.vue new file mode 100644 index 0000000000000000000000000000000000000000..bfe617fa53e9eee94d317f1efa6a09d7414f5cb0 --- /dev/null +++ b/src/layout/layout.vue @@ -0,0 +1,13 @@ + + + + + \ No newline at end of file diff --git a/src/lib/index.js b/src/lib/index.js new file mode 100644 index 0000000000000000000000000000000000000000..cc21f1e09627fdb5a45f4086f2751740910f40cf --- /dev/null +++ b/src/lib/index.js @@ -0,0 +1,3 @@ +/** + * 外部引用的插件存放及修改文件 + */ \ No newline at end of file diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000000000000000000000000000000000000..289e4fd8687172ace84d3c0a6c5b762749f202ed --- /dev/null +++ b/src/main.js @@ -0,0 +1,14 @@ +import { createApp } from 'vue' +import { createPinia } from 'pinia' + +import App from './App.vue' +import router from './router' + +import './themes/index.css' + +const app = createApp(App) + +app.use(createPinia()) +app.use(router) + +app.mount('#app') diff --git a/src/plugins/index.js b/src/plugins/index.js new file mode 100644 index 0000000000000000000000000000000000000000..7dba22d4135603dde9d9b27d1c860ee427c17518 --- /dev/null +++ b/src/plugins/index.js @@ -0,0 +1,6 @@ +/** + * 插件,全局使用 + */ +import _ from 'lodash' + +_.cloneDeep() diff --git a/src/router/index.js b/src/router/index.js new file mode 100644 index 0000000000000000000000000000000000000000..7a17609ac8b3796522fcc210117fe2a681890eb2 --- /dev/null +++ b/src/router/index.js @@ -0,0 +1,17 @@ +import { createRouter, createWebHashHistory } from 'vue-router' +import HomeView from '../views/HomeView.vue' +import { demoRoutes } from './modules/demo' + +const router = createRouter({ + history: createWebHashHistory(import.meta.env.BASE_URL), + routes: [ + { + path: '/', + name: 'home', + component: HomeView + }, + ...demoRoutes + ] +}) + +export default router diff --git a/src/router/modules/demo.js b/src/router/modules/demo.js new file mode 100644 index 0000000000000000000000000000000000000000..96846a13ec99671c50eabb03b037fbca2bd8be69 --- /dev/null +++ b/src/router/modules/demo.js @@ -0,0 +1,9 @@ +const AboutView = () => import('@/views/AboutView') + +export const demoRoutes = [ + { + path: '/about', + name: 'about', + component: AboutView + } +] diff --git a/src/store/index.js b/src/store/index.js new file mode 100644 index 0000000000000000000000000000000000000000..5bde6dbba1304153f431227576f5d0f99d14326b --- /dev/null +++ b/src/store/index.js @@ -0,0 +1,9 @@ +import { createPinia } from 'pinia' + +const store = createPinia() + +export function setupStore(app) { + app.use(store) +} + +export { store } diff --git a/src/store/modules/counter.js b/src/store/modules/counter.js new file mode 100644 index 0000000000000000000000000000000000000000..41a96356b70ae3c655ef0c0cf3c8dcefe740ba71 --- /dev/null +++ b/src/store/modules/counter.js @@ -0,0 +1,15 @@ +import { defineStore } from 'pinia' + +export const useCounterStore = defineStore('counter',{ + state: () => ({ + counter: 0 + }), + getters: { + doubleCount: (state) => state.counter * 2 + }, + actions: { + increment() { + this.counter++ + } + } +}) diff --git a/src/styles/index.css b/src/styles/index.css new file mode 100644 index 0000000000000000000000000000000000000000..47c21fb225e00a572689cc6b38e9406503bb36c2 --- /dev/null +++ b/src/styles/index.css @@ -0,0 +1,3 @@ +/** +公共样式 + */ \ No newline at end of file diff --git a/src/themes/base.css b/src/themes/base.css new file mode 100644 index 0000000000000000000000000000000000000000..7cad7ad711a20d6239f99e41c79ada35808fc0f3 --- /dev/null +++ b/src/themes/base.css @@ -0,0 +1,74 @@ +/* color palette from */ +:root { + --vt-c-white: #ffffff; + --vt-c-white-soft: #f8f8f8; + --vt-c-white-mute: #f2f2f2; + + --vt-c-black: #181818; + --vt-c-black-soft: #222222; + --vt-c-black-mute: #282828; + + --vt-c-indigo: #2c3e50; + + --vt-c-divider-light-1: rgba(60, 60, 60, 0.29); + --vt-c-divider-light-2: rgba(60, 60, 60, 0.12); + --vt-c-divider-dark-1: rgba(84, 84, 84, 0.65); + --vt-c-divider-dark-2: rgba(84, 84, 84, 0.48); + + --vt-c-text-light-1: var(--vt-c-indigo); + --vt-c-text-light-2: rgba(60, 60, 60, 0.66); + --vt-c-text-dark-1: var(--vt-c-white); + --vt-c-text-dark-2: rgba(235, 235, 235, 0.64); +} + +/* semantic color variables for this project */ +:root { + --color-background: var(--vt-c-white); + --color-background-soft: var(--vt-c-white-soft); + --color-background-mute: var(--vt-c-white-mute); + + --color-border: var(--vt-c-divider-light-2); + --color-border-hover: var(--vt-c-divider-light-1); + + --color-heading: var(--vt-c-text-light-1); + --color-text: var(--vt-c-text-light-1); + + --section-gap: 160px; +} + +@media (prefers-color-scheme: dark) { + :root { + --color-background: var(--vt-c-black); + --color-background-soft: var(--vt-c-black-soft); + --color-background-mute: var(--vt-c-black-mute); + + --color-border: var(--vt-c-divider-dark-2); + --color-border-hover: var(--vt-c-divider-dark-1); + + --color-heading: var(--vt-c-text-dark-1); + --color-text: var(--vt-c-text-dark-2); + } +} + +*, +*::before, +*::after { + box-sizing: border-box; + margin: 0; + position: relative; + font-weight: normal; +} + +body { + min-height: 100vh; + color: var(--color-text); + background: var(--color-background); + transition: color 0.5s, background-color 0.5s; + line-height: 1.6; + font-family: Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, + Cantarell, 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif; + font-size: 15px; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} diff --git a/src/themes/index.css b/src/themes/index.css new file mode 100644 index 0000000000000000000000000000000000000000..f50463b9cd53dca6ec8324e0c9431ddf20626b62 --- /dev/null +++ b/src/themes/index.css @@ -0,0 +1,40 @@ +/** +自定义样式主题 + */ +/* color palette from */ +@import "./base.css"; + +#app { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + + font-weight: normal; +} + +a, +.green { + text-decoration: none; + color: hsla(160, 100%, 37%, 1); + transition: 0.4s; +} + +@media (hover: hover) { + a:hover { + background-color: hsla(160, 100%, 37%, 0.2); + } +} + +@media (min-width: 1024px) { + body { + display: flex; + place-items: center; + } + + #app { + display: grid; + grid-template-columns: 1fr 1fr; + padding: 0 2rem; + } +} + diff --git a/src/utils/index.js b/src/utils/index.js new file mode 100644 index 0000000000000000000000000000000000000000..db1affec0ab98aa50b51d6a07d7b6296e0fffa02 --- /dev/null +++ b/src/utils/index.js @@ -0,0 +1,3 @@ +/** + * 存放如公共的工具类函数js + */ \ No newline at end of file diff --git a/src/views/AboutView.vue b/src/views/AboutView.vue new file mode 100644 index 0000000000000000000000000000000000000000..756ad2a17909837834858538422308120cf09dab --- /dev/null +++ b/src/views/AboutView.vue @@ -0,0 +1,15 @@ + + + diff --git a/src/views/HomeView.vue b/src/views/HomeView.vue new file mode 100644 index 0000000000000000000000000000000000000000..225d93a9f55aaa8d79b7f1487e636afc2898dd5a --- /dev/null +++ b/src/views/HomeView.vue @@ -0,0 +1,9 @@ + + + diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000000000000000000000000000000000000..782cf486df493f1447a0ca5bc182b4efb698a35a --- /dev/null +++ b/vite.config.js @@ -0,0 +1,50 @@ +import { fileURLToPath, URL } from 'node:url' + +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' +import Components from 'unplugin-vue-components/vite' +import AutoImport from 'unplugin-auto-import/vite' + + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [ + vue(), + Components({ + dirs: ['src/components'], + extension: ['vue', 'jsx'], + include: [/\.vue$/, /\.vue\?vue/, /\.jsx$/], + exclude: [ + /[\\/]node_modules[\\/]/, + /[\\/]\.git[\\/]/, + /[\\/]\.nuxt[\\/]/, + ], + deep: true, + dts: 'src/components.d.ts', + }), + AutoImport({ + include: [ + /\.[tj]sx?$/, // .ts, .tsx, .js, .jsx + /\.vue$/, + /\.vue\?vue/, // .vue + /\.md$/, // .md + ], + imports: ['vue'], + dirs: [ + './src/hooks', + './src/store/modules', + './src/utils', + './src/enum', + './src/api/modules', + // ... + ], + dts: './src/auto-imports.d.ts', + vueTemplate: true, + }), + ], + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)) + } + }, +})