From a6dbb473244c774a64e9b5842ce034e0f30ce802 Mon Sep 17 00:00:00 2001 From: yuntian001 Date: Mon, 7 Nov 2022 14:12:44 +0800 Subject: [PATCH 01/11] =?UTF-8?q?feat:=20=E6=8E=A5=E5=8F=A3=E8=AF=B7?= =?UTF-8?q?=E6=B1=82=E5=85=AC=E5=85=B1=E6=8F=90=E7=A4=BA=E5=8A=A0=E4=B8=8A?= =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/locales/lang/en/default.json | 5 ++++- src/utils/request.ts | 10 +++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/locales/lang/en/default.json b/src/locales/lang/en/default.json index 0dda75ac..99a74b46 100644 --- a/src/locales/lang/en/default.json +++ b/src/locales/lang/en/default.json @@ -42,5 +42,8 @@ "并": "And", "退出登录": "Logout", "页面不见了": "The page is gone", - "去": "Go" + "去": "Go", + "操作失败,请稍后重试":"Operation failed, please try again later", + "返回值解析失败":"Failed to parse the return value", + "请求异常,请联系管理员":"The request is abnormal, Please contact the administrator" } diff --git a/src/utils/request.ts b/src/utils/request.ts index 6ecb6395..5e663f64 100644 --- a/src/utils/request.ts +++ b/src/utils/request.ts @@ -1,10 +1,10 @@ import { closeLoading, loading } from '@/utils/loading'; -import { useUserStore } from '@/store'; +import { useUserStore,useGlobalStore } from '@/store'; import axios, { AxiosRequestConfig } from 'axios'; import { ElMessage } from 'element-plus'; import log from './log'; import { useRequest, Options, setGlobalOptions } from 'vue-request'; - +const t = (...args:[string|number])=>useGlobalStore().i18n.t(...args); const service = axios.create({ baseURL: '/', // url = base url + request url timeout: 10000, // request timeout @@ -25,7 +25,7 @@ service.interceptors.request.use( (error) => { // 对请求错误做些什么 log.error(error); // for debug - throw Error('请求异常,请联系管理员'); // 改写错误信息 + throw Error(t('请求异常,请联系管理员')); // 改写错误信息 }, ); service.interceptors.response.use( @@ -38,7 +38,7 @@ service.interceptors.response.use( // 超出 2xx 范围的状态码都会触发该函数。 // 对响应错误做点什么 log.error(error); // for debug - throw Error('操作失败,请稍后重试'); + throw Error(t('操作失败,请稍后重试')); }, ); @@ -81,7 +81,7 @@ function request( !options?.noLoading && loading(); const { data: res } = await service(await axiosConfig(...args)); if (!res || res.code === undefined) { - throw Error('返回值解析失败'); + throw Error(t('返回值解析失败')); } // 401:认证失败 if (res.code === '401') { From f3499d4236b7dfceae35de4607fb22a7a0edf5cc Mon Sep 17 00:00:00 2001 From: yuntian001 Date: Mon, 7 Nov 2022 23:31:56 +0800 Subject: [PATCH 02/11] =?UTF-8?q?feat:=20=E8=AF=B7=E6=B1=82=E7=A4=BA?= =?UTF-8?q?=E4=BE=8B=E5=8A=A0=E4=B8=8A=E8=87=AA=E5=8A=A8=E8=AF=B7=E6=B1=82?= =?UTF-8?q?=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mock/apiDemo/example.ts | 2 +- src/api/example.ts | 19 ++++++++++--------- src/utils/request.ts | 21 +++++++++++---------- src/views/example/request.vue | 5 ++--- 4 files changed, 24 insertions(+), 23 deletions(-) diff --git a/mock/apiDemo/example.ts b/mock/apiDemo/example.ts index 2a44b8fa..1ff54a1f 100644 --- a/mock/apiDemo/example.ts +++ b/mock/apiDemo/example.ts @@ -24,7 +24,7 @@ export default [ total: 30, list, }, - '登录成功', + '操作成功', ); }, }, diff --git a/src/api/example.ts b/src/api/example.ts index 799b6313..160639a4 100644 --- a/src/api/example.ts +++ b/src/api/example.ts @@ -1,5 +1,4 @@ -import request from '@/utils/request'; - +import { request, RequestOptions } from '@/utils/request'; const enum Api { LIST = '/api/list', INFO = '/api/list/info/', @@ -14,14 +13,16 @@ export interface ListResult { total: number; list: string[]; } -export function listApi() { - return request((params) => ({ - url: Api.LIST, - method: 'get', - params, - })); +export function listApi(options: RequestOptions) { + return request( + (params) => ({ + url: Api.LIST, + method: 'get', + params, + }), + options, + ); } - export function infoApi() { return request((id) => ({ url: Api.INFO + id, diff --git a/src/utils/request.ts b/src/utils/request.ts index 5e663f64..b5c2d7d0 100644 --- a/src/utils/request.ts +++ b/src/utils/request.ts @@ -1,10 +1,10 @@ import { closeLoading, loading } from '@/utils/loading'; -import { useUserStore,useGlobalStore } from '@/store'; +import { useUserStore, useGlobalStore } from '@/store'; import axios, { AxiosRequestConfig } from 'axios'; import { ElMessage } from 'element-plus'; import log from './log'; import { useRequest, Options, setGlobalOptions } from 'vue-request'; -const t = (...args:[string|number])=>useGlobalStore().i18n.t(...args); +const t = (...args: [string | number]) => useGlobalStore().i18n.t(...args); const service = axios.create({ baseURL: '/', // url = base url + request url timeout: 10000, // request timeout @@ -42,7 +42,7 @@ service.interceptors.response.use( }, ); -type RequestOptions = { +export type RequestOptions = { needAll?: boolean; // 需要所有的格式,而不仅仅是data noLoading?: boolean; // 不需要加载特效 noError?: boolean; // 不需要错误提示 @@ -55,12 +55,12 @@ setGlobalOptions({ }); // 请求函数,当请求失败时直接抛出异常; -function request( - axiosConfig: (...args: P) => AxiosRequestConfig, +export function request( + axiosConfig: (...args: P) => AxiosRequestConfig | Promise, options?: RequestOptions, ): ReturnType>; -function request( - axiosConfig: (...args: P) => AxiosRequestConfig, +export function request( + axiosConfig: (...args: P) => AxiosRequestConfig | Promise, options: RequestOptions, returnAxios?: T, ): T extends boolean ? (...args: P) => Promise : ReturnType>; @@ -71,14 +71,15 @@ function request( - axiosConfig: (...args: P) => AxiosRequestConfig, +export function request( + axiosConfig: (...args: P) => AxiosRequestConfig | Promise, options?: RequestOptions, returnAxios?: T, ) { const axiosService = async (...args: P): Promise => { try { - !options?.noLoading && loading(); + //loading放到微任务中去执行以确保在自动调用请求时等待所有的宏任务中的生命周期函数执行完再创建loading实例 以规避currentInstance的相关警告 + !options?.noLoading && Promise.resolve(undefined).then(loading); const { data: res } = await service(await axiosConfig(...args)); if (!res || res.code === undefined) { throw Error(t('返回值解析失败')); diff --git a/src/views/example/request.vue b/src/views/example/request.vue index 3e8f2937..ca5e8f66 100644 --- a/src/views/example/request.vue +++ b/src/views/example/request.vue @@ -1,7 +1,7 @@ diff --git a/src/config/index.ts b/src/config/index.ts index cccd43fa..6f0c479c 100644 --- a/src/config/index.ts +++ b/src/config/index.ts @@ -1,4 +1,4 @@ -import MenuModeEnum from '@/enums/menuModeEnum'; +import MenuModeEnum from '@/dict/menuModeEnum'; import * as localeConfig from './locale'; import loginConfig from './login'; import themeConfig from './theme'; diff --git a/src/config/theme.ts b/src/config/theme.ts index c1b51909..7cba6093 100644 --- a/src/config/theme.ts +++ b/src/config/theme.ts @@ -1,4 +1,4 @@ -import { SizeEnum } from '@/enums/configEnum'; +import { SizeEnum } from '@/dict/configEnum'; export default { primaryColor: '#409eff', // 主题颜色 menuBg: '#1d1e1f', // 菜单背景颜色 diff --git a/src/enums/configEnum.ts b/src/dict/configEnum.ts similarity index 100% rename from src/enums/configEnum.ts rename to src/dict/configEnum.ts diff --git a/src/enums/eventEnmu.ts b/src/dict/eventEnmu.ts similarity index 100% rename from src/enums/eventEnmu.ts rename to src/dict/eventEnmu.ts diff --git a/src/enums/menuModeEnum.ts b/src/dict/menuModeEnum.ts similarity index 100% rename from src/enums/menuModeEnum.ts rename to src/dict/menuModeEnum.ts diff --git a/src/enums/pageEnum.ts b/src/dict/pageEnum.ts similarity index 100% rename from src/enums/pageEnum.ts rename to src/dict/pageEnum.ts diff --git a/src/event/index.ts b/src/event/index.ts index f17618c6..09799f51 100644 --- a/src/event/index.ts +++ b/src/event/index.ts @@ -3,7 +3,7 @@ */ import Mitt from '@/utils/mitt'; import { NavigationFailure, RouteLocationNormalized } from 'vue-router'; -import EventEnum from '@/enums/eventEnmu'; +import EventEnum from '@/dict/eventEnmu'; import { App } from 'vue'; import { Composer } from 'vue-i18n'; import { DynamicViewsModules } from '@/utils/permission'; diff --git a/src/router/guard/index.ts b/src/router/guard/index.ts index 35897e9a..dd2d6874 100644 --- a/src/router/guard/index.ts +++ b/src/router/guard/index.ts @@ -1,5 +1,5 @@ import type { NavigationFailure, Router } from 'vue-router'; -import { PageEnum } from '@/enums/pageEnum'; +import { PageEnum } from '@/dict/pageEnum'; import { useUserStore } from '@/store'; import { event, mitter } from '@/event'; import { remove, start } from '@/utils/nProgress'; diff --git a/src/router/index.ts b/src/router/index.ts index ae39982d..46f3b8d8 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -1,5 +1,5 @@ import { createRouter, createWebHashHistory, createWebHistory, RouteRecordRaw } from 'vue-router'; -import { PageEnum } from '@/enums/pageEnum'; +import { PageEnum } from '@/dict/pageEnum'; import { App } from 'vue'; import { setupRouterGuard } from './guard'; import { concatObjectValue } from '@/utils/helper'; diff --git a/src/router/routes/1-dashboard.ts b/src/router/routes/1-dashboard.ts index 57404a81..b82babef 100644 --- a/src/router/routes/1-dashboard.ts +++ b/src/router/routes/1-dashboard.ts @@ -1,4 +1,4 @@ -import { PageEnum } from '@/enums/pageEnum'; +import { PageEnum } from '@/dict/pageEnum'; import { RouteRecordRaw } from 'vue-router'; import { Layout } from '@/router/constant'; import { concatObjectValue } from '@/utils/helper'; diff --git a/src/store/modules/route.ts b/src/store/modules/route.ts index 039e9c1e..aa759c9a 100644 --- a/src/store/modules/route.ts +++ b/src/store/modules/route.ts @@ -1,4 +1,4 @@ -import MenuModeEnum from '@/enums/menuModeEnum'; +import MenuModeEnum from '@/dict/menuModeEnum'; import { filterAsyncRoutes, initDynamicViewsModules } from '@/utils/permission'; import useUserStore from './user'; import { router, constantRoutes, asyncRoutes, flatteningRoutes2 } from '@/router'; diff --git a/src/store/modules/user.ts b/src/store/modules/user.ts index a40d01f5..444de88a 100644 --- a/src/store/modules/user.ts +++ b/src/store/modules/user.ts @@ -3,7 +3,7 @@ import { Ref } from 'vue'; import cookies from 'js-cookie'; import { loginConfig as config } from '@/config'; import { loading } from '@/utils/loading'; -import { PageEnum } from '@/enums/pageEnum'; +import { PageEnum } from '@/dict/pageEnum'; import { loginApi, LoginParams, userInfoApi, UserInfoResult } from '@/api/user'; import useRouteStore from './route'; import { router } from '@/router'; diff --git a/src/utils/mitt.ts b/src/utils/mitt.ts index dfcddb4f..0a28ff9e 100644 --- a/src/utils/mitt.ts +++ b/src/utils/mitt.ts @@ -1,6 +1,6 @@ // 根据开源项目mitt自定义更改 import { onUnmounted } from 'vue'; -import EventEnum from '@/enums/eventEnmu'; +import EventEnum from '@/dict/eventEnmu'; type EventType = EventEnum; // An event handler can take an optional event argument diff --git a/src/utils/permission.ts b/src/utils/permission.ts index c58d9b70..3c115581 100644 --- a/src/utils/permission.ts +++ b/src/utils/permission.ts @@ -5,7 +5,7 @@ import { RouteRecordRaw } from 'vue-router'; import { DefineComponent } from 'vue'; import log from './log'; import { mitter } from '@/event'; -import EventEnum from '@/enums/eventEnmu'; +import EventEnum from '@/dict/eventEnmu'; /** * 用户是否具有权限 From d121f119d7e1174230d6801190527dd11f338a5c Mon Sep 17 00:00:00 2001 From: yuntian001 Date: Thu, 5 Jan 2023 14:38:21 +0800 Subject: [PATCH 06/11] =?UTF-8?q?refactor:=20=E5=B0=86vite=20plugin=20?= =?UTF-8?q?=E6=8F=90=E5=8F=96=E5=88=B0plugins=E7=9B=AE=E5=BD=95=E4=B8=AD?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=9B=AE=E5=BD=95=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugins/autoComponents.ts | 10 +++ plugins/autoImport.ts | 61 +++++++++++++++ plugins/autoImportApi.ts | 14 ++++ plugins/babel.ts | 25 +++++++ plugins/index.ts | 34 +++++++++ plugins/mock.ts | 13 ++++ plugins/svgLoader.ts | 22 ++++++ plugins/vueSetUpExtend.ts | 9 +++ tsconfig.node.json | 2 +- vite.config.ts | 154 +------------------------------------- 10 files changed, 192 insertions(+), 152 deletions(-) create mode 100644 plugins/autoComponents.ts create mode 100644 plugins/autoImport.ts create mode 100644 plugins/autoImportApi.ts create mode 100644 plugins/babel.ts create mode 100644 plugins/index.ts create mode 100644 plugins/mock.ts create mode 100644 plugins/svgLoader.ts create mode 100644 plugins/vueSetUpExtend.ts diff --git a/plugins/autoComponents.ts b/plugins/autoComponents.ts new file mode 100644 index 00000000..94dec340 --- /dev/null +++ b/plugins/autoComponents.ts @@ -0,0 +1,10 @@ +import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'; +import Components from 'unplugin-vue-components/vite'; +import { resolver } from './autoImport'; +export default () => + Components({ + // 组件自动注册(包括components下的所有.vue组件和ElementPlus组件) + include: [], + dts: false, + resolvers: [ElementPlusResolver({ importStyle: false }), resolver([3], [2])], + }); diff --git a/plugins/autoImport.ts b/plugins/autoImport.ts new file mode 100644 index 00000000..0a3b4279 --- /dev/null +++ b/plugins/autoImport.ts @@ -0,0 +1,61 @@ +import { resolve } from 'path'; +import * as fs from 'fs'; +import { createPlugin } from 'vite-plugin-autogeneration-import-file'; +const { autoImport, resolver: resolverFn } = createPlugin(); +function pathResolve(dir: string) { + return resolve(__dirname, '../', dir); +} +export default () => + autoImport([ + // 自动生成 + { + // svg icon type + pattern: ['*.svg'], + dir: pathResolve('src/icons/svg'), + toFile: pathResolve('types/meIconComments.d.ts'), + name: 'MeIcon_{{name}}', + template: fs.readFileSync(pathResolve('./template/meIconComments.d.ts'), 'utf-8'), + codeTemplates: [{ key: '//code', template: '{{name}}: Icon;\n ' }], + }, + { + // pinia module + pattern: ['**/*.{ts,js}', '*.{ts,js}'], + dir: pathResolve('src/store/modules'), + toFile: pathResolve('src/store/module.ts'), + name: 'use_{{name}}_store', + }, + { + // auto import directives + pattern: ['*.ts', '**/index.ts'], + dir: pathResolve('src/directives'), + toFile: pathResolve('types/directives.d.ts'), + template: fs.readFileSync(pathResolve('./template/directives.d.ts'), 'utf-8'), + codeTemplates: [ + { + key: '//code', + template: '{{name}}: typeof import("{{path}}")["default"];\n ', + }, + ], + name: 'V_{{name}}', + }, + { + // auto import components + pattern: ['*.{vue,ts}', '**/index.{vue,ts}'], + dir: pathResolve('src/components'), + toFile: pathResolve('types/components.d.ts'), + template: fs.readFileSync(pathResolve('./template/components.d.ts'), 'utf-8'), + codeTemplates: [ + { + key: '//code', + template: '{{name}}: typeof import("{{path}}")["default"];\n ', + }, + { + key: '//typeCode', + template: 'type {{name}}Instance = InstanceType;\n ', + }, + ], + name: '_{{name}}', + }, + ]); + +export const resolver = resolverFn; diff --git a/plugins/autoImportApi.ts b/plugins/autoImportApi.ts new file mode 100644 index 00000000..993d6de0 --- /dev/null +++ b/plugins/autoImportApi.ts @@ -0,0 +1,14 @@ +import AutoImport from 'unplugin-auto-import/vite'; +import { resolve } from 'path'; +import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'; +function pathResolve(dir: string) { + return resolve(__dirname, '../', dir); +} +export default () => + AutoImport({ + // 自动加载API + imports: ['vue', 'vue-router', 'pinia', '@vueuse/core'], + // 可以选择auto-imports.d.ts生成的位置,使用ts建议设置为'src/auto-imports.d.ts' + dts: pathResolve('types/auto-imports.d.ts'), + resolvers: [ElementPlusResolver()], + }); diff --git a/plugins/babel.ts b/plugins/babel.ts new file mode 100644 index 00000000..6bb9ced0 --- /dev/null +++ b/plugins/babel.ts @@ -0,0 +1,25 @@ +import { babel } from '@rollup/plugin-babel'; +import { createRequire } from 'node:module'; +export default () => + babel({ + babelrc: false, + extensions: ['.ts', '.tsx'], + plugins: [['@babel/plugin-transform-runtime', { useESModules: true }]], + presets: [ + [ + '@babel/preset-env', + { + targets: ['chrome 87', 'safari 13', 'firefox 78', 'edge 88'], + useBuiltIns: 'usage', + bugfixes: true, + loose: false, + modules: false, + corejs: createRequire(import.meta.url)('core-js/package.json').version, + shippedProposals: true, + ignoreBrowserslistConfig: true, + }, + ], + ], + exclude: 'node_modules/**', + babelHelpers: 'runtime', + }); diff --git a/plugins/index.ts b/plugins/index.ts new file mode 100644 index 00000000..51f41ed3 --- /dev/null +++ b/plugins/index.ts @@ -0,0 +1,34 @@ +import { ConfigEnv } from 'vite'; +import autoComponents from './autoComponents'; +import autoImport from './autoImport'; +import autoImportApi from './autoImportApi'; +import babel from './babel'; +import mock from './mock'; +import svgLoader from './svgLoader'; +import vueSetUpExtend from './vueSetUpExtend'; +import { visualizer } from 'rollup-plugin-visualizer'; //打包大小分析(stats.html) +import vue from '@vitejs/plugin-vue'; +// import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite'; +import { splitVendorChunkPlugin } from 'vite'; +import viteCompression from 'vite-plugin-compression'; //打包压缩 + +export default (configEnv: ConfigEnv) => { + return [ + vue(), + splitVendorChunkPlugin(), //打包分析,会生成stats.html展示打包情况 + // VueI18nPlugin({ + // /* options */ + // // locale messages resource pre-compile option + // include: ['./src/**/lang/**/*.json', './src/**/lang/*.json'], + // }), + visualizer(), + viteCompression(), + autoComponents(), + autoImport(), + autoImportApi(), + babel(), + mock(configEnv), + svgLoader(), + vueSetUpExtend(), + ]; +}; diff --git a/plugins/mock.ts b/plugins/mock.ts new file mode 100644 index 00000000..b74cabd1 --- /dev/null +++ b/plugins/mock.ts @@ -0,0 +1,13 @@ +import { viteMockServe } from '@meadmin-cn/vite-plugin-mock'; +import { ConfigEnv } from 'vite'; +export default ({ command }: ConfigEnv) => + viteMockServe({ + mockPath: 'mock/apiDemo', + localEnabled: command === 'serve', + prodEnabled: command !== 'serve', + // 这样可以控制关闭mock的时候不让mock打包到最终代码内 + injectCode: ` + import { setupProdMockServer } from '../mock/index'; + setupProdMockServer(); + `, + }); diff --git a/plugins/svgLoader.ts b/plugins/svgLoader.ts new file mode 100644 index 00000000..73bd90f0 --- /dev/null +++ b/plugins/svgLoader.ts @@ -0,0 +1,22 @@ +import svgLoader from 'vite-svg-loader'; +export default () => + svgLoader({ + svgoConfig: { + plugins: [ + { + name: 'preset-default', + params: { + overrides: { + removeViewBox: false, // 禁用插件 + }, + }, + }, + { + name: 'removeAttrs', + params: { + attrs: '(width|height|fill)', // 清除svg属性 + }, + }, + ], + }, + }); diff --git a/plugins/vueSetUpExtend.ts b/plugins/vueSetUpExtend.ts new file mode 100644 index 00000000..4196c84f --- /dev/null +++ b/plugins/vueSetUpExtend.ts @@ -0,0 +1,9 @@ +import { vueSetUpExtend } from '@yuntian001/vue-setup-extend'; +// @ts-ignore +import { loadMessageConfig } from '../src/config/locale'; +export default () => + vueSetUpExtend({ + exclude: ['steup', 'lang'], + setLangImport: loadMessageConfig.componentLoad, + setComponents: loadMessageConfig.componentLoad, + }); diff --git a/tsconfig.node.json b/tsconfig.node.json index 42691ff7..7cb375f2 100644 --- a/tsconfig.node.json +++ b/tsconfig.node.json @@ -8,5 +8,5 @@ "moduleResolution": "node", "allowSyntheticDefaultImports": true }, - "include": ["vite.config.ts", "./plugin/vueSetupExtend.ts"] + "include": ["vite.config.ts", "./plugins/*.ts"] } diff --git a/vite.config.ts b/vite.config.ts index c1f6d8b6..c88993c0 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,166 +1,18 @@ -import { createRequire } from 'node:module'; -import vue from '@vitejs/plugin-vue'; -import svgLoader from 'vite-svg-loader'; import { resolve } from 'path'; import * as fs from 'fs'; -import { createPlugin } from 'vite-plugin-autogeneration-import-file'; -import { vueSetUpExtend } from '@yuntian001/vue-setup-extend'; -import { viteMockServe } from '@meadmin-cn/vite-plugin-mock'; import { ConfigEnv, UserConfigExport } from 'vite'; -import { visualizer } from 'rollup-plugin-visualizer'; //打包大小分析(stats.html) -import AutoImport from 'unplugin-auto-import/vite'; -import Components from 'unplugin-vue-components/vite'; -import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'; -// import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite'; -import { splitVendorChunkPlugin } from 'vite'; import autoprefixer from 'autoprefixer'; +import plugins from './plugins'; // @ts-ignore import px2rem from 'postcss-plugin-px2rem'; -import viteCompression from 'vite-plugin-compression'; //打包压缩 -import { babel } from '@rollup/plugin-babel'; -// @ts-ignore -import { loadMessageConfig } from './src/config/locale'; function pathResolve(dir: string) { return resolve(__dirname, '.', dir); } - -const { autoImport, resolver } = createPlugin(); -export default ({ command, mode }: ConfigEnv): UserConfigExport => { +export default async (configEnv: ConfigEnv): Promise => { return { envPrefix: 'ME_', - plugins: [ - babel({ - babelrc: false, - extensions: ['.ts', '.tsx'], - plugins: [['@babel/plugin-transform-runtime', { useESModules: true }]], - presets: [ - [ - '@babel/preset-env', - { - targets: ['chrome 87', 'safari 13', 'firefox 78', 'edge 88'], - useBuiltIns: 'usage', - bugfixes: true, - loose: false, - modules: false, - corejs: createRequire(import.meta.url)('core-js/package.json').version, - shippedProposals: true, - ignoreBrowserslistConfig: true, - }, - ], - ], - exclude: 'node_modules/**', - babelHelpers: 'runtime', - }), - vueSetUpExtend({ - exclude: ['steup', 'lang'], - setLangImport: loadMessageConfig.componentLoad, - setComponents: loadMessageConfig.componentLoad, - }), - splitVendorChunkPlugin(), //打包分析,会生成stats.html展示打包情况 - // VueI18nPlugin({ - // /* options */ - // // locale messages resource pre-compile option - // include: ['./src/**/lang/**/*.json', './src/**/lang/*.json'], - // }), - viteMockServe({ - mockPath: 'mock/apiDemo', - localEnabled: command === 'serve', - prodEnabled: command !== 'serve', - // 这样可以控制关闭mock的时候不让mock打包到最终代码内 - injectCode: ` - import { setupProdMockServer } from '../mock/index'; - setupProdMockServer(); - `, - }), - AutoImport({ - // 自动加载API - imports: ['vue', 'vue-router', 'pinia', '@vueuse/core'], - // 可以选择auto-imports.d.ts生成的位置,使用ts建议设置为'src/auto-imports.d.ts' - dts: pathResolve('types/auto-imports.d.ts'), - resolvers: [ElementPlusResolver()], - }), - Components({ - // 组件自动注册(包括components下的所有.vue组件和ElementPlus组件) - include: [], - dts: false, - resolvers: [ElementPlusResolver({ importStyle: false }), resolver([3], [2])], - }), - vue(), - svgLoader({ - svgoConfig: { - plugins: [ - { - name: 'preset-default', - params: { - overrides: { - removeViewBox: false, // 禁用插件 - }, - }, - }, - { - name: 'removeAttrs', - params: { - attrs: '(width|height|fill)', // 清除svg属性 - }, - }, - ], - }, - }), - autoImport([ - // 自动生成 - { - // svg icon type - pattern: ['*.svg'], - dir: pathResolve('src/icons/svg'), - toFile: pathResolve('types/meIconComments.d.ts'), - name: 'MeIcon_{{name}}', - template: fs.readFileSync(pathResolve('./template/meIconComments.d.ts'), 'utf-8'), - codeTemplates: [{ key: '//code', template: '{{name}}: Icon;\n ' }], - }, - { - // pinia module - pattern: ['**/*.{ts,js}', '*.{ts,js}'], - dir: pathResolve('src/store/modules'), - toFile: pathResolve('src/store/module.ts'), - name: 'use_{{name}}_store', - }, - { - // auto import directives - pattern: ['*.ts', '**/index.ts'], - dir: pathResolve('src/directives'), - toFile: pathResolve('types/directives.d.ts'), - template: fs.readFileSync(pathResolve('./template/directives.d.ts'), 'utf-8'), - codeTemplates: [ - { - key: '//code', - template: '{{name}}: typeof import("{{path}}")["default"];\n ', - }, - ], - name: 'V_{{name}}', - }, - { - // auto import components - pattern: ['*.{vue,ts}', '**/index.{vue,ts}'], - dir: pathResolve('src/components'), - toFile: pathResolve('types/components.d.ts'), - template: fs.readFileSync(pathResolve('./template/components.d.ts'), 'utf-8'), - codeTemplates: [ - { - key: '//code', - template: '{{name}}: typeof import("{{path}}")["default"];\n ', - }, - { - key: '//typeCode', - template: 'type {{name}}Instance = InstanceType;\n ', - }, - ], - name: '_{{name}}', - }, - ]), - visualizer(), - viteCompression(), - ], + plugins: await plugins(configEnv), css: { preprocessorOptions: { scss: { From ea23ee428d0e6eb32c3e6846a4ce08e77ff874c0 Mon Sep 17 00:00:00 2001 From: yuntian001 Date: Thu, 5 Jan 2023 15:14:30 +0800 Subject: [PATCH 07/11] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96tsc=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintrc.cjs | 7 +- .gitignore | 1 - cli/autoImport.ts | 3 + package.json | 7 +- plugins/autoImport.ts | 5 +- tsconfig.node.json | 7 +- types/auto-imports.d.ts | 279 ++++++++++++++++++++++++++++++++++++++++ 7 files changed, 302 insertions(+), 7 deletions(-) create mode 100644 cli/autoImport.ts create mode 100644 types/auto-imports.d.ts diff --git a/.eslintrc.cjs b/.eslintrc.cjs index ccd10432..44178d99 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -65,7 +65,7 @@ module.exports = { leadingUnderscore: 'allow', filter: { // you can expand this regex to add more allowed names - regex: '^((__v_.*)|[0-9]+)$', + regex: '^((__v_.*)|([0-9]+)|(__.*))$', match: false, }, }, @@ -74,6 +74,11 @@ module.exports = { modifiers: ['const'], format: ['camelCase', 'UPPER_CASE', 'PascalCase'], leadingUnderscore: 'allow', + filter: { + // you can expand this regex to add more allowed names + regex: '^__.*$', + match: false, + }, }, { selector: ['memberLike'], diff --git a/.gitignore b/.gitignore index cee00be1..d4bd74d2 100644 --- a/.gitignore +++ b/.gitignore @@ -23,7 +23,6 @@ dist-ssr *.sln *.sw? package-lock.json -types/auto-imports.d.ts types/meIconComments.d.ts src/store/module.ts types/directives.d.ts diff --git a/cli/autoImport.ts b/cli/autoImport.ts new file mode 100644 index 00000000..dbd84a69 --- /dev/null +++ b/cli/autoImport.ts @@ -0,0 +1,3 @@ +#!/usr/bin/env ts-node +import autoImport from '../plugins/autoImport.js'; +autoImport().buildStart(); diff --git a/package.json b/package.json index 847560e9..e99637ab 100644 --- a/package.json +++ b/package.json @@ -11,9 +11,9 @@ "scripts": { "format": "prettier --write --cache .", "dev": "vite", - "build": "vite build -m prod && npm run type-check", - "build-github": "vite build -m prod --base=/meadmin-template/ && npm run type-check", - "type-check": "vue-tsc --noEmit", + "build": "npm run type-check && vite build -m prod ", + "build-github": "npm run type-check && vite build -m prod --base=/meadmin-template/", + "type-check": "node --loader ts-node/esm ./cli/autoImport.ts && vue-tsc --noEmit", "preview": "vite preview", "release-main": "release-it -c .release-it-main.json", "release-template": "release-it", @@ -74,6 +74,7 @@ "rollup-plugin-visualizer": "^5.7.1", "sass": "^1.53.0", "terser": "^5.14.2", + "ts-node": "^10.9.1", "typescript": "^4.9.4", "unplugin-auto-import": "^0.11.1", "unplugin-vue-components": "^0.22.4", diff --git a/plugins/autoImport.ts b/plugins/autoImport.ts index 0a3b4279..e238740d 100644 --- a/plugins/autoImport.ts +++ b/plugins/autoImport.ts @@ -1,7 +1,10 @@ -import { resolve } from 'path'; +import { dirname, resolve } from 'path'; import * as fs from 'fs'; import { createPlugin } from 'vite-plugin-autogeneration-import-file'; +import { fileURLToPath } from 'url'; const { autoImport, resolver: resolverFn } = createPlugin(); +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(filename); function pathResolve(dir: string) { return resolve(__dirname, '../', dir); } diff --git a/tsconfig.node.json b/tsconfig.node.json index 7cb375f2..9d394726 100644 --- a/tsconfig.node.json +++ b/tsconfig.node.json @@ -8,5 +8,10 @@ "moduleResolution": "node", "allowSyntheticDefaultImports": true }, - "include": ["vite.config.ts", "./plugins/*.ts"] + "include": ["vite.config.ts", "./plugins/*.ts", "./cli/*.ts"], + "ts-node": { + "compilerOptions": { + "module": "NodeNext" + } + } } diff --git a/types/auto-imports.d.ts b/types/auto-imports.d.ts new file mode 100644 index 00000000..e8f19eb5 --- /dev/null +++ b/types/auto-imports.d.ts @@ -0,0 +1,279 @@ +// Generated by 'unplugin-auto-import' +export {}; +declare global { + const EffectScope: typeof import('vue')['EffectScope']; + const ElLoading: typeof import('element-plus/es')['ElLoading']; + const acceptHMRUpdate: typeof import('pinia')['acceptHMRUpdate']; + const asyncComputed: typeof import('@vueuse/core')['asyncComputed']; + const autoResetRef: typeof import('@vueuse/core')['autoResetRef']; + const computed: typeof import('vue')['computed']; + const computedAsync: typeof import('@vueuse/core')['computedAsync']; + const computedEager: typeof import('@vueuse/core')['computedEager']; + const computedInject: typeof import('@vueuse/core')['computedInject']; + const computedWithControl: typeof import('@vueuse/core')['computedWithControl']; + const controlledComputed: typeof import('@vueuse/core')['controlledComputed']; + const controlledRef: typeof import('@vueuse/core')['controlledRef']; + const createApp: typeof import('vue')['createApp']; + const createEventHook: typeof import('@vueuse/core')['createEventHook']; + const createGlobalState: typeof import('@vueuse/core')['createGlobalState']; + const createInjectionState: typeof import('@vueuse/core')['createInjectionState']; + const createPinia: typeof import('pinia')['createPinia']; + const createReactiveFn: typeof import('@vueuse/core')['createReactiveFn']; + const createSharedComposable: typeof import('@vueuse/core')['createSharedComposable']; + const createUnrefFn: typeof import('@vueuse/core')['createUnrefFn']; + const customRef: typeof import('vue')['customRef']; + const debouncedRef: typeof import('@vueuse/core')['debouncedRef']; + const debouncedWatch: typeof import('@vueuse/core')['debouncedWatch']; + const defineAsyncComponent: typeof import('vue')['defineAsyncComponent']; + const defineComponent: typeof import('vue')['defineComponent']; + const defineStore: typeof import('pinia')['defineStore']; + const eagerComputed: typeof import('@vueuse/core')['eagerComputed']; + const effectScope: typeof import('vue')['effectScope']; + const extendRef: typeof import('@vueuse/core')['extendRef']; + const getActivePinia: typeof import('pinia')['getActivePinia']; + const getCurrentInstance: typeof import('vue')['getCurrentInstance']; + const getCurrentScope: typeof import('vue')['getCurrentScope']; + const h: typeof import('vue')['h']; + const ignorableWatch: typeof import('@vueuse/core')['ignorableWatch']; + const inject: typeof import('vue')['inject']; + const isDefined: typeof import('@vueuse/core')['isDefined']; + const isProxy: typeof import('vue')['isProxy']; + const isReactive: typeof import('vue')['isReactive']; + const isReadonly: typeof import('vue')['isReadonly']; + const isRef: typeof import('vue')['isRef']; + const makeDestructurable: typeof import('@vueuse/core')['makeDestructurable']; + const mapActions: typeof import('pinia')['mapActions']; + const mapGetters: typeof import('pinia')['mapGetters']; + const mapState: typeof import('pinia')['mapState']; + const mapStores: typeof import('pinia')['mapStores']; + const mapWritableState: typeof import('pinia')['mapWritableState']; + const markRaw: typeof import('vue')['markRaw']; + const nextTick: typeof import('vue')['nextTick']; + const onActivated: typeof import('vue')['onActivated']; + const onBeforeMount: typeof import('vue')['onBeforeMount']; + const onBeforeRouteLeave: typeof import('vue-router')['onBeforeRouteLeave']; + const onBeforeRouteUpdate: typeof import('vue-router')['onBeforeRouteUpdate']; + const onBeforeUnmount: typeof import('vue')['onBeforeUnmount']; + const onBeforeUpdate: typeof import('vue')['onBeforeUpdate']; + const onClickOutside: typeof import('@vueuse/core')['onClickOutside']; + const onDeactivated: typeof import('vue')['onDeactivated']; + const onErrorCaptured: typeof import('vue')['onErrorCaptured']; + const onKeyStroke: typeof import('@vueuse/core')['onKeyStroke']; + const onLongPress: typeof import('@vueuse/core')['onLongPress']; + const onMounted: typeof import('vue')['onMounted']; + const onRenderTracked: typeof import('vue')['onRenderTracked']; + const onRenderTriggered: typeof import('vue')['onRenderTriggered']; + const onScopeDispose: typeof import('vue')['onScopeDispose']; + const onServerPrefetch: typeof import('vue')['onServerPrefetch']; + const onStartTyping: typeof import('@vueuse/core')['onStartTyping']; + const onUnmounted: typeof import('vue')['onUnmounted']; + const onUpdated: typeof import('vue')['onUpdated']; + const pausableWatch: typeof import('@vueuse/core')['pausableWatch']; + const provide: typeof import('vue')['provide']; + const reactify: typeof import('@vueuse/core')['reactify']; + const reactifyObject: typeof import('@vueuse/core')['reactifyObject']; + const reactive: typeof import('vue')['reactive']; + const reactiveComputed: typeof import('@vueuse/core')['reactiveComputed']; + const reactiveOmit: typeof import('@vueuse/core')['reactiveOmit']; + const reactivePick: typeof import('@vueuse/core')['reactivePick']; + const readonly: typeof import('vue')['readonly']; + const ref: typeof import('vue')['ref']; + const refAutoReset: typeof import('@vueuse/core')['refAutoReset']; + const refDebounced: typeof import('@vueuse/core')['refDebounced']; + const refDefault: typeof import('@vueuse/core')['refDefault']; + const refThrottled: typeof import('@vueuse/core')['refThrottled']; + const refWithControl: typeof import('@vueuse/core')['refWithControl']; + const resolveComponent: typeof import('vue')['resolveComponent']; + const resolveDirective: typeof import('vue')['resolveDirective']; + const resolveRef: typeof import('@vueuse/core')['resolveRef']; + const resolveUnref: typeof import('@vueuse/core')['resolveUnref']; + const setActivePinia: typeof import('pinia')['setActivePinia']; + const setMapStoreSuffix: typeof import('pinia')['setMapStoreSuffix']; + const shallowReactive: typeof import('vue')['shallowReactive']; + const shallowReadonly: typeof import('vue')['shallowReadonly']; + const shallowRef: typeof import('vue')['shallowRef']; + const storeToRefs: typeof import('pinia')['storeToRefs']; + const syncRef: typeof import('@vueuse/core')['syncRef']; + const syncRefs: typeof import('@vueuse/core')['syncRefs']; + const templateRef: typeof import('@vueuse/core')['templateRef']; + const throttledRef: typeof import('@vueuse/core')['throttledRef']; + const throttledWatch: typeof import('@vueuse/core')['throttledWatch']; + const toRaw: typeof import('vue')['toRaw']; + const toReactive: typeof import('@vueuse/core')['toReactive']; + const toRef: typeof import('vue')['toRef']; + const toRefs: typeof import('vue')['toRefs']; + const triggerRef: typeof import('vue')['triggerRef']; + const tryOnBeforeMount: typeof import('@vueuse/core')['tryOnBeforeMount']; + const tryOnBeforeUnmount: typeof import('@vueuse/core')['tryOnBeforeUnmount']; + const tryOnMounted: typeof import('@vueuse/core')['tryOnMounted']; + const tryOnScopeDispose: typeof import('@vueuse/core')['tryOnScopeDispose']; + const tryOnUnmounted: typeof import('@vueuse/core')['tryOnUnmounted']; + const unref: typeof import('vue')['unref']; + const unrefElement: typeof import('@vueuse/core')['unrefElement']; + const until: typeof import('@vueuse/core')['until']; + const useActiveElement: typeof import('@vueuse/core')['useActiveElement']; + const useArrayEvery: typeof import('@vueuse/core')['useArrayEvery']; + const useArrayFilter: typeof import('@vueuse/core')['useArrayFilter']; + const useArrayFind: typeof import('@vueuse/core')['useArrayFind']; + const useArrayFindIndex: typeof import('@vueuse/core')['useArrayFindIndex']; + const useArrayJoin: typeof import('@vueuse/core')['useArrayJoin']; + const useArrayMap: typeof import('@vueuse/core')['useArrayMap']; + const useArrayReduce: typeof import('@vueuse/core')['useArrayReduce']; + const useArraySome: typeof import('@vueuse/core')['useArraySome']; + const useAsyncQueue: typeof import('@vueuse/core')['useAsyncQueue']; + const useAsyncState: typeof import('@vueuse/core')['useAsyncState']; + const useAttrs: typeof import('vue')['useAttrs']; + const useBase64: typeof import('@vueuse/core')['useBase64']; + const useBattery: typeof import('@vueuse/core')['useBattery']; + const useBluetooth: typeof import('@vueuse/core')['useBluetooth']; + const useBreakpoints: typeof import('@vueuse/core')['useBreakpoints']; + const useBroadcastChannel: typeof import('@vueuse/core')['useBroadcastChannel']; + const useBrowserLocation: typeof import('@vueuse/core')['useBrowserLocation']; + const useCached: typeof import('@vueuse/core')['useCached']; + const useClipboard: typeof import('@vueuse/core')['useClipboard']; + const useCloned: typeof import('@vueuse/core')['useCloned']; + const useColorMode: typeof import('@vueuse/core')['useColorMode']; + const useConfirmDialog: typeof import('@vueuse/core')['useConfirmDialog']; + const useCounter: typeof import('@vueuse/core')['useCounter']; + const useCssModule: typeof import('vue')['useCssModule']; + const useCssVar: typeof import('@vueuse/core')['useCssVar']; + const useCssVars: typeof import('vue')['useCssVars']; + const useCurrentElement: typeof import('@vueuse/core')['useCurrentElement']; + const useCycleList: typeof import('@vueuse/core')['useCycleList']; + const useDark: typeof import('@vueuse/core')['useDark']; + const useDateFormat: typeof import('@vueuse/core')['useDateFormat']; + const useDebounce: typeof import('@vueuse/core')['useDebounce']; + const useDebounceFn: typeof import('@vueuse/core')['useDebounceFn']; + const useDebouncedRefHistory: typeof import('@vueuse/core')['useDebouncedRefHistory']; + const useDeviceMotion: typeof import('@vueuse/core')['useDeviceMotion']; + const useDeviceOrientation: typeof import('@vueuse/core')['useDeviceOrientation']; + const useDevicePixelRatio: typeof import('@vueuse/core')['useDevicePixelRatio']; + const useDevicesList: typeof import('@vueuse/core')['useDevicesList']; + const useDisplayMedia: typeof import('@vueuse/core')['useDisplayMedia']; + const useDocumentVisibility: typeof import('@vueuse/core')['useDocumentVisibility']; + const useDraggable: typeof import('@vueuse/core')['useDraggable']; + const useDropZone: typeof import('@vueuse/core')['useDropZone']; + const useElementBounding: typeof import('@vueuse/core')['useElementBounding']; + const useElementByPoint: typeof import('@vueuse/core')['useElementByPoint']; + const useElementHover: typeof import('@vueuse/core')['useElementHover']; + const useElementSize: typeof import('@vueuse/core')['useElementSize']; + const useElementVisibility: typeof import('@vueuse/core')['useElementVisibility']; + const useEventBus: typeof import('@vueuse/core')['useEventBus']; + const useEventListener: typeof import('@vueuse/core')['useEventListener']; + const useEventSource: typeof import('@vueuse/core')['useEventSource']; + const useEyeDropper: typeof import('@vueuse/core')['useEyeDropper']; + const useFavicon: typeof import('@vueuse/core')['useFavicon']; + const useFetch: typeof import('@vueuse/core')['useFetch']; + const useFileDialog: typeof import('@vueuse/core')['useFileDialog']; + const useFileSystemAccess: typeof import('@vueuse/core')['useFileSystemAccess']; + const useFocus: typeof import('@vueuse/core')['useFocus']; + const useFocusWithin: typeof import('@vueuse/core')['useFocusWithin']; + const useFps: typeof import('@vueuse/core')['useFps']; + const useFullscreen: typeof import('@vueuse/core')['useFullscreen']; + const useGamepad: typeof import('@vueuse/core')['useGamepad']; + const useGeolocation: typeof import('@vueuse/core')['useGeolocation']; + const useIdle: typeof import('@vueuse/core')['useIdle']; + const useImage: typeof import('@vueuse/core')['useImage']; + const useInfiniteScroll: typeof import('@vueuse/core')['useInfiniteScroll']; + const useIntersectionObserver: typeof import('@vueuse/core')['useIntersectionObserver']; + const useInterval: typeof import('@vueuse/core')['useInterval']; + const useIntervalFn: typeof import('@vueuse/core')['useIntervalFn']; + const useKeyModifier: typeof import('@vueuse/core')['useKeyModifier']; + const useLastChanged: typeof import('@vueuse/core')['useLastChanged']; + const useLink: typeof import('vue-router')['useLink']; + const useLocalStorage: typeof import('@vueuse/core')['useLocalStorage']; + const useMagicKeys: typeof import('@vueuse/core')['useMagicKeys']; + const useManualRefHistory: typeof import('@vueuse/core')['useManualRefHistory']; + const useMediaControls: typeof import('@vueuse/core')['useMediaControls']; + const useMediaQuery: typeof import('@vueuse/core')['useMediaQuery']; + const useMemoize: typeof import('@vueuse/core')['useMemoize']; + const useMemory: typeof import('@vueuse/core')['useMemory']; + const useMounted: typeof import('@vueuse/core')['useMounted']; + const useMouse: typeof import('@vueuse/core')['useMouse']; + const useMouseInElement: typeof import('@vueuse/core')['useMouseInElement']; + const useMousePressed: typeof import('@vueuse/core')['useMousePressed']; + const useMutationObserver: typeof import('@vueuse/core')['useMutationObserver']; + const useNavigatorLanguage: typeof import('@vueuse/core')['useNavigatorLanguage']; + const useNetwork: typeof import('@vueuse/core')['useNetwork']; + const useNow: typeof import('@vueuse/core')['useNow']; + const useObjectUrl: typeof import('@vueuse/core')['useObjectUrl']; + const useOffsetPagination: typeof import('@vueuse/core')['useOffsetPagination']; + const useOnline: typeof import('@vueuse/core')['useOnline']; + const usePageLeave: typeof import('@vueuse/core')['usePageLeave']; + const useParallax: typeof import('@vueuse/core')['useParallax']; + const usePermission: typeof import('@vueuse/core')['usePermission']; + const usePointer: typeof import('@vueuse/core')['usePointer']; + const usePointerSwipe: typeof import('@vueuse/core')['usePointerSwipe']; + const usePreferredColorScheme: typeof import('@vueuse/core')['usePreferredColorScheme']; + const usePreferredContrast: typeof import('@vueuse/core')['usePreferredContrast']; + const usePreferredDark: typeof import('@vueuse/core')['usePreferredDark']; + const usePreferredLanguages: typeof import('@vueuse/core')['usePreferredLanguages']; + const usePreferredReducedMotion: typeof import('@vueuse/core')['usePreferredReducedMotion']; + const useRafFn: typeof import('@vueuse/core')['useRafFn']; + const useRefHistory: typeof import('@vueuse/core')['useRefHistory']; + const useResizeObserver: typeof import('@vueuse/core')['useResizeObserver']; + const useRoute: typeof import('vue-router')['useRoute']; + const useRouter: typeof import('vue-router')['useRouter']; + const useScreenOrientation: typeof import('@vueuse/core')['useScreenOrientation']; + const useScreenSafeArea: typeof import('@vueuse/core')['useScreenSafeArea']; + const useScriptTag: typeof import('@vueuse/core')['useScriptTag']; + const useScroll: typeof import('@vueuse/core')['useScroll']; + const useScrollLock: typeof import('@vueuse/core')['useScrollLock']; + const useSessionStorage: typeof import('@vueuse/core')['useSessionStorage']; + const useShare: typeof import('@vueuse/core')['useShare']; + const useSlots: typeof import('vue')['useSlots']; + const useSorted: typeof import('@vueuse/core')['useSorted']; + const useSpeechRecognition: typeof import('@vueuse/core')['useSpeechRecognition']; + const useSpeechSynthesis: typeof import('@vueuse/core')['useSpeechSynthesis']; + const useStepper: typeof import('@vueuse/core')['useStepper']; + const useStorage: typeof import('@vueuse/core')['useStorage']; + const useStorageAsync: typeof import('@vueuse/core')['useStorageAsync']; + const useStyleTag: typeof import('@vueuse/core')['useStyleTag']; + const useSupported: typeof import('@vueuse/core')['useSupported']; + const useSwipe: typeof import('@vueuse/core')['useSwipe']; + const useTemplateRefsList: typeof import('@vueuse/core')['useTemplateRefsList']; + const useTextDirection: typeof import('@vueuse/core')['useTextDirection']; + const useTextSelection: typeof import('@vueuse/core')['useTextSelection']; + const useTextareaAutosize: typeof import('@vueuse/core')['useTextareaAutosize']; + const useThrottle: typeof import('@vueuse/core')['useThrottle']; + const useThrottleFn: typeof import('@vueuse/core')['useThrottleFn']; + const useThrottledRefHistory: typeof import('@vueuse/core')['useThrottledRefHistory']; + const useTimeAgo: typeof import('@vueuse/core')['useTimeAgo']; + const useTimeout: typeof import('@vueuse/core')['useTimeout']; + const useTimeoutFn: typeof import('@vueuse/core')['useTimeoutFn']; + const useTimeoutPoll: typeof import('@vueuse/core')['useTimeoutPoll']; + const useTimestamp: typeof import('@vueuse/core')['useTimestamp']; + const useTitle: typeof import('@vueuse/core')['useTitle']; + const useToNumber: typeof import('@vueuse/core')['useToNumber']; + const useToString: typeof import('@vueuse/core')['useToString']; + const useToggle: typeof import('@vueuse/core')['useToggle']; + const useTransition: typeof import('@vueuse/core')['useTransition']; + const useUrlSearchParams: typeof import('@vueuse/core')['useUrlSearchParams']; + const useUserMedia: typeof import('@vueuse/core')['useUserMedia']; + const useVModel: typeof import('@vueuse/core')['useVModel']; + const useVModels: typeof import('@vueuse/core')['useVModels']; + const useVibrate: typeof import('@vueuse/core')['useVibrate']; + const useVirtualList: typeof import('@vueuse/core')['useVirtualList']; + const useWakeLock: typeof import('@vueuse/core')['useWakeLock']; + const useWebNotification: typeof import('@vueuse/core')['useWebNotification']; + const useWebSocket: typeof import('@vueuse/core')['useWebSocket']; + const useWebWorker: typeof import('@vueuse/core')['useWebWorker']; + const useWebWorkerFn: typeof import('@vueuse/core')['useWebWorkerFn']; + const useWindowFocus: typeof import('@vueuse/core')['useWindowFocus']; + const useWindowScroll: typeof import('@vueuse/core')['useWindowScroll']; + const useWindowSize: typeof import('@vueuse/core')['useWindowSize']; + const watch: typeof import('vue')['watch']; + const watchArray: typeof import('@vueuse/core')['watchArray']; + const watchAtMost: typeof import('@vueuse/core')['watchAtMost']; + const watchDebounced: typeof import('@vueuse/core')['watchDebounced']; + const watchEffect: typeof import('vue')['watchEffect']; + const watchIgnorable: typeof import('@vueuse/core')['watchIgnorable']; + const watchOnce: typeof import('@vueuse/core')['watchOnce']; + const watchPausable: typeof import('@vueuse/core')['watchPausable']; + const watchPostEffect: typeof import('vue')['watchPostEffect']; + const watchSyncEffect: typeof import('vue')['watchSyncEffect']; + const watchThrottled: typeof import('@vueuse/core')['watchThrottled']; + const watchTriggerable: typeof import('@vueuse/core')['watchTriggerable']; + const watchWithFilter: typeof import('@vueuse/core')['watchWithFilter']; + const whenever: typeof import('@vueuse/core')['whenever']; +} From 89f2e91f9e64cb452409104691661529daabfd2b Mon Sep 17 00:00:00 2001 From: yuntian001 Date: Thu, 5 Jan 2023 15:17:38 +0800 Subject: [PATCH 08/11] =?UTF-8?q?fix:=20=E5=8F=98=E9=87=8F=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugins/autoImport.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/autoImport.ts b/plugins/autoImport.ts index e238740d..d57a82f3 100644 --- a/plugins/autoImport.ts +++ b/plugins/autoImport.ts @@ -4,7 +4,7 @@ import { createPlugin } from 'vite-plugin-autogeneration-import-file'; import { fileURLToPath } from 'url'; const { autoImport, resolver: resolverFn } = createPlugin(); const __filename = fileURLToPath(import.meta.url); -const __dirname = dirname(filename); +const __dirname = dirname(__filename); function pathResolve(dir: string) { return resolve(__dirname, '../', dir); } From f7332606f0fb929605401a444bbfc4eca566c36c Mon Sep 17 00:00:00 2001 From: yuntian001 Date: Thu, 5 Jan 2023 15:28:54 +0800 Subject: [PATCH 09/11] =?UTF-8?q?docs:=20vite=E7=89=88=E6=9C=AC=E6=94=B9?= =?UTF-8?q?=E4=B8=BA4=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- README_EN.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 0c99072c..40d84aa0 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Me-admin template ## 简介 -Me-admin template是一个免费开源的中后台模板,基于vue3、vite3、 pinia、 elment-plus构建,开箱即用,本项目的开源协议为最宽松的MIT协议,使用无任何限制,本项目采用最新技术栈,可以作为项目的启动模版,以帮助你快速搭建企业级中后台,也是一个很好的学习项目。 +Me-admin template是一个免费开源的中后台模板,基于vue3、vite4、 pinia、 elment-plus构建,开箱即用,本项目的开源协议为最宽松的MIT协议,使用无任何限制,本项目采用最新技术栈,可以作为项目的启动模版,以帮助你快速搭建企业级中后台,也是一个很好的学习项目。 开源不易,如果能帮到您,麻烦在[Github](https://github.com/meadmin-cn/meadmin-template)中点个star。 @@ -8,7 +8,7 @@ Me-admin template是一个免费开源的中后台模板,基于vue3、vite3、 p ## 特性 - - **基于vue3、vite3、pinia、elment-plus、vue-request@next** + - **基于vue3、vite4、pinia、elment-plus、vue-request@next** - **基于typescript** 应用级JavaScript 的语言 - **可配置主题** 可配置主题色及主题模式 - **友好的国际化方案** 基于vue-i18n 支持按组件异步加载语言包。 diff --git a/README_EN.md b/README_EN.md index 3e50fb54..875ea847 100644 --- a/README_EN.md +++ b/README_EN.md @@ -1,12 +1,12 @@ # Me-admin template ## Introduction -Me-admin template is a free open source admin template, built on VUE3, VitE3, Pinia, and Elment-Plus, right out of the box. +Me-admin template is a free open source admin template, built on VUE3, Vite4, Pinia, and Elment-Plus, right out of the box. **English** | [中文](./README.md) ## Feature - - **Base on vue3、vite3、pinia、elment-plus、vue-request@next** + - **Base on vue3、vite4、pinia、elment-plus、vue-request@next** - **Base on typescript** The language of application-level JavaScript - **Configurable Themes** Configurable theme color and theme mode - **Friendly internationalisation scheme** Support for asynchronous loading of language packs by component based on vue-i18n. From dba02e221a4d314b161b7809bc81362f4ea6d0d5 Mon Sep 17 00:00:00 2001 From: yuntian001 Date: Fri, 6 Jan 2023 13:02:24 +0800 Subject: [PATCH 10/11] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=E8=B7=AF=E7=94=B1=E7=BB=84=E4=BB=B6=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E5=90=8E=E5=88=87=E6=8D=A2=E8=B7=AF=E7=94=B1loading=E4=B8=8D?= =?UTF-8?q?=E5=85=B3=E9=97=ADbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/router/guard/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/router/guard/index.ts b/src/router/guard/index.ts index dd2d6874..f5ed2865 100644 --- a/src/router/guard/index.ts +++ b/src/router/guard/index.ts @@ -33,7 +33,7 @@ function createProgressGuard(router: Router) { router.beforeEach(async (to, from) => { remove(); start(to.matched.length); - closeLoading(false, from.matched.length, 'layout'); + closeLoading(true, from.matched.length, 'layout'); loading({}, to.matched.length, 'layout'); return true; }); From 342ff32220c7f59a053566565b659d0df998ba3a Mon Sep 17 00:00:00 2001 From: yuntian001 Date: Fri, 6 Jan 2023 13:05:15 +0800 Subject: [PATCH 11/11] chore: template-release v1.1.7 --- TEMPLATE-CHANGELOG.md | 65 ++++++++++++++++++++++++++++++------------- package.json | 2 +- 2 files changed, 46 insertions(+), 21 deletions(-) diff --git a/TEMPLATE-CHANGELOG.md b/TEMPLATE-CHANGELOG.md index f50e739b..64d132e2 100644 --- a/TEMPLATE-CHANGELOG.md +++ b/TEMPLATE-CHANGELOG.md @@ -1,5 +1,30 @@ - - + + +## [1.1.7](https://github.com/meadmin-cn/meadmin-template/compare/template-1.1.6...template-1.1.7) (2023-01-06) + + +### 重构[refactor] + +* 将vite plugin 提取到plugins目录中优化目录结构 ([d121f11](https://github.com/meadmin-cn/meadmin-template/commit/d121f119d7e1174230d6801190527dd11f338a5c)) +* enums 更换为dict ([58c6f8d](https://github.com/meadmin-cn/meadmin-template/commit/58c6f8dbad246e04a379c7c382fa308a8b26d84c)) + + +### 性能改进[perf] + +* 升级vite版本为4 typescript为4.9 ([4174cda](https://github.com/meadmin-cn/meadmin-template/commit/4174cda2dd9623f0132cf8611b6a19e5e1f4f3a0)) +* 优化tsc校验 ([ea23ee4](https://github.com/meadmin-cn/meadmin-template/commit/ea23ee428d0e6eb32c3e6846a4ce08e77ff874c0)) + + +### 文档更改[docs] + +* vite版本改为4版本 ([f733260](https://github.com/meadmin-cn/meadmin-template/commit/f7332606f0fb929605401a444bbfc4eca566c36c)) + + +### Bug 修复[fix] + +* 变量错误修复 ([89f2e91](https://github.com/meadmin-cn/meadmin-template/commit/89f2e91f9e64cb452409104691661529daabfd2b)) +* 修复 加载路由组件异常后切换路由loading不关闭bug ([dba02e2](https://github.com/meadmin-cn/meadmin-template/commit/dba02e221a4d314b161b7809bc81362f4ea6d0d5)) + ## [1.1.6](https://github.com/meadmin-cn/meadmin-template/compare/template-1.1.4...template-1.1.6) (2022-12-20) @@ -15,8 +40,8 @@ ### 文档更改[docs] -* 特性介绍添加 ([67fd3c4](https://github.com/meadmin-cn/meadmin-template/commit/67fd3c40b0df4693378a138582da8206192f47ec)) - +* 特性介绍添加 ([67fd3c4](https://github.com/meadmin-cn/meadmin-template/commit/67fd3c40b0df4693378a138582da8206192f47ec)) + ## [1.1.4](https://github.com/meadmin-cn/meadmin-template/compare/template-1.1.3...template-1.1.4) (2022-12-19) @@ -28,8 +53,8 @@ ### Bug 修复[fix] -* **router:** 修复 连续跳转两个路由菜单progress进度条不关闭的问题 ([1c25234](https://github.com/meadmin-cn/meadmin-template/commit/1c25234f9477fe700a24fff1b16e661c00f3a079)) - +* **router:** 修复 连续跳转两个路由菜单progress进度条不关闭的问题 ([1c25234](https://github.com/meadmin-cn/meadmin-template/commit/1c25234f9477fe700a24fff1b16e661c00f3a079)) + ## [1.1.3](https://github.com/meadmin-cn/meadmin-template/compare/template-1.1.2...template-1.1.3) (2022-12-01) @@ -51,8 +76,8 @@ ### 其他[chore] -* **package:** element-plus 依赖版本更新 ([ea392e7](https://github.com/meadmin-cn/meadmin-template/commit/ea392e7b76145a558e61e248ab36e6470fc3b83f)) - +* **package:** element-plus 依赖版本更新 ([ea392e7](https://github.com/meadmin-cn/meadmin-template/commit/ea392e7b76145a558e61e248ab36e6470fc3b83f)) + ## [1.1.2](https://github.com/meadmin-cn/meadmin-template/compare/template-1.1.1...template-1.1.2) (2022-11-17) @@ -69,8 +94,8 @@ ### 文档更改[docs] -* **README:** 文档介绍更改 ([c77a402](https://github.com/meadmin-cn/meadmin-template/commit/c77a402486286e8b78198bd4f8518f3623a24368)) - +* **README:** 文档介绍更改 ([c77a402](https://github.com/meadmin-cn/meadmin-template/commit/c77a402486286e8b78198bd4f8518f3623a24368)) + ## [1.1.1](https://github.com/meadmin-cn/meadmin-template/compare/template-1.1.0...template-1.1.1) (2022-11-10) @@ -82,8 +107,8 @@ ### Bug 修复[fix] -* 修复layout及子组件更改时热更新报错问题(将layout layoutPage改为动态引入) ([3a96bb6](https://github.com/meadmin-cn/meadmin-template/commit/3a96bb6fc0bba6419d82f36d889488ae8b374651)) - +* 修复layout及子组件更改时热更新报错问题(将layout layoutPage改为动态引入) ([3a96bb6](https://github.com/meadmin-cn/meadmin-template/commit/3a96bb6fc0bba6419d82f36d889488ae8b374651)) + ## [1.1.0](https://github.com/meadmin-cn/meadmin-template/compare/template-1.0.13...template-1.1.0) (2022-11-07) @@ -106,15 +131,15 @@ * 加上app create start 表示以便判断是否是热更新引用拿到 ([417d82f](https://github.com/meadmin-cn/meadmin-template/commit/417d82f1e4d5dab5a72eb190ac9389164af7ca62)) * 接口请求公共提示加上国际化支持 ([dfaeb8b](https://github.com/meadmin-cn/meadmin-template/commit/dfaeb8b3f44a3e938924aa248366ec28487ed855)) -* 请求示例加上自动请求示例 ([5c01ed5](https://github.com/meadmin-cn/meadmin-template/commit/5c01ed522b0080deac654c5719f8175fc169e8ce)) - +* 请求示例加上自动请求示例 ([5c01ed5](https://github.com/meadmin-cn/meadmin-template/commit/5c01ed522b0080deac654c5719f8175fc169e8ce)) + ## [1.0.13](https://github.com/meadmin-cn/meadmin-template/compare/template-1.0.12...template-1.0.13) (2022-10-19) ### Bug 修复[fix] -* 修复optimizeDeps.entries设置错误(应为相对于项目根的相对路径) ([962ae3b](https://github.com/meadmin-cn/meadmin-template/commit/962ae3b9a964289f42e1b48cb94e889527a9e7cd)) - +* 修复optimizeDeps.entries设置错误(应为相对于项目根的相对路径) ([962ae3b](https://github.com/meadmin-cn/meadmin-template/commit/962ae3b9a964289f42e1b48cb94e889527a9e7cd)) + ## [1.0.12](https://github.com/meadmin-cn/meadmin-template/compare/template-1.0.11...template-1.0.12) (2022-10-19) @@ -132,8 +157,8 @@ ### Bug 修复[fix] * 修复请求loading异常和mock异常问题 ([11afdc4](https://github.com/meadmin-cn/meadmin-template/commit/11afdc4acc2ab614d2e1a2cd768a8aba9174c2d1)) -* 已登录情况下访问时loading无法消除问题。 ([b928655](https://github.com/meadmin-cn/meadmin-template/commit/b928655101283ba5a110c5c77321a474c7629044)) - +* 已登录情况下访问时loading无法消除问题。 ([b928655](https://github.com/meadmin-cn/meadmin-template/commit/b928655101283ba5a110c5c77321a474c7629044)) + ## [1.0.11](https://github.com/meadmin-cn/meadmin-template/compare/template-1.0.10...template-1.0.11) (2022-10-08) @@ -151,8 +176,8 @@ * 包版本变更为正式版本 ([d2df17e](https://github.com/meadmin-cn/meadmin-template/commit/d2df17eb043fea4ce5a96652ad856029858208dc)) * 提交日志和版本还原 ([2e94319](https://github.com/meadmin-cn/meadmin-template/commit/2e9431999603e96fc33195f8bb4cc861e6270ff3)) -* template-release v1.0.11 ([547cd8e](https://github.com/meadmin-cn/meadmin-template/commit/547cd8e608c5c7bd755ecb4cf516429c1f6e2be8)) - +* template-release v1.0.11 ([547cd8e](https://github.com/meadmin-cn/meadmin-template/commit/547cd8e608c5c7bd755ecb4cf516429c1f6e2be8)) + ## [1.0.10](https://github.com/meadmin-cn/meadmin-template/compare/template-1.0.9...template-1.0.10) (2022-10-02) diff --git a/package.json b/package.json index e99637ab..3f9e3020 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "meadmin-template", "private": true, - "version": "1.1.6", + "version": "1.1.7", "type": "module", "author": { "name": "meadmin-cn",