From 9d421c5bfe4c49fcf72f061c46079c205897a0c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=A5=E6=B5=A9?= <37316281+yanhao98@users.noreply.github.com> Date: Tue, 24 Dec 2024 23:13:09 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=87=8D=E6=9E=84=E6=8F=92=E4=BB=B6?= =?UTF-8?q?=E5=AE=89=E8=A3=85=E6=96=B9=E5=BC=8F=EF=BC=8C=E7=BB=9F=E4=B8=80?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=20install=20=E6=96=B9=E6=B3=95=E5=B9=B6?= =?UTF-8?q?=E7=A7=BB=E9=99=A4=E4=B8=8D=E5=BF=85=E8=A6=81=E7=9A=84=20setup?= =?UTF-8?q?=20=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.ts | 33 ++++++++------------------------- src/plugins/_/_.ts | 14 ++++++++++++++ src/plugins/eruda/index.ts | 22 ++++++++++++---------- src/plugins/pinia/index.ts | 2 +- src/plugins/primevue/index.ts | 2 +- src/plugins/router/index.ts | 4 ++-- src/plugins/vue-i18n/index.ts | 2 +- 7 files changed, 39 insertions(+), 40 deletions(-) create mode 100644 src/plugins/_/_.ts diff --git a/src/main.ts b/src/main.ts index 4903bed..5d4dd21 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,35 +1,18 @@ import './assets/styles'; -import { createHead } from '@unhead/vue'; -import { setupEruda } from './plugins/eruda'; -import { setupPinia } from './plugins/pinia'; -import { setupPrimeVue } from './plugins/primevue'; -import { setupRouter } from './plugins/router'; -import { setupVueI18n } from './plugins/vue-i18n'; - import App from './App.vue'; async function init() { - if ((import.meta.env.MODE === 'development' || 1 === 1) && 0) { - await setupEruda(); + const app = createApp(App); + { + // https://github.com/antfu-collective/vitesse/blob/47618e72dfba76c77b9b85b94784d739e35c492b/src/modules/README.md + type UserPluginContext = { app: import('vue').App }; + type UserPlugin = (ctx: UserPluginContext) => void; + Object.values(import.meta.glob<{ install: UserPlugin }>('./plugins/**.ts', { eager: true })).forEach((i) => + i.install?.({ app }), + ); } - const app = createApp(App).use(createHead()); - - app.config.errorHandler = (error, instance, info) => { - console.error('Global error:', error); - console.error('Component:', instance); - console.error('Error Info:', info); - // 这里你可以: - // 1. 发送错误到日志服务 - // 2. 显示全局错误提示 - // 3. 进行错误分析和处理 - }; - setupPinia(app); - setupVueI18n(app); - setupPrimeVue(app); - setupRouter(app); - app.config.globalProperties.$__DEV__ = $__DEV__; app.mount('#app'); diff --git a/src/plugins/_/_.ts b/src/plugins/_/_.ts new file mode 100644 index 0000000..cc39c57 --- /dev/null +++ b/src/plugins/_/_.ts @@ -0,0 +1,14 @@ +import { createHead } from '@unhead/vue'; + +export function install({ app }: { app: import('vue').App }) { + app.use(createHead()); + app.config.errorHandler = (error, instance, info) => { + console.error('Global error:', error); + console.error('Component:', instance); + console.error('Error Info:', info); + // 这里你可以: + // 1. 发送错误到日志服务 + // 2. 显示全局错误提示 + // 3. 进行错误分析和处理 + }; +} diff --git a/src/plugins/eruda/index.ts b/src/plugins/eruda/index.ts index 9859031..c8914d1 100644 --- a/src/plugins/eruda/index.ts +++ b/src/plugins/eruda/index.ts @@ -1,12 +1,14 @@ -export async function setupEruda() { - // TODO: https://github.com/hu3dao/vite-plugin-debug/ - // https://eruda.liriliri.io/zh/docs/#快速上手 - await import('eruda').then(({ default: eruda }) => { - eruda.init({ - defaults: { - transparency: 0.9, - }, +export function install() { + if ((import.meta.env.MODE === 'development' || 1 === 1) && 0) { + // TODO: https://github.com/hu3dao/vite-plugin-debug/ + // https://eruda.liriliri.io/zh/docs/#快速上手 + import('eruda').then(({ default: eruda }) => { + eruda.init({ + defaults: { + transparency: 0.9, + }, + }); + /* eruda.show(); */ }); - // eruda.show(); - }); + } } diff --git a/src/plugins/pinia/index.ts b/src/plugins/pinia/index.ts index 3ea2a42..e4db192 100644 --- a/src/plugins/pinia/index.ts +++ b/src/plugins/pinia/index.ts @@ -1,7 +1,7 @@ import { PiniaColada } from '@pinia/colada'; import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'; -export function setupPinia(app: import('vue').App) { +export function install({ app }: { app: import('vue').App }) { app.use(createPinia().use(piniaPluginPersistedstate)); app.use(PiniaColada, {}); } diff --git a/src/plugins/primevue/index.ts b/src/plugins/primevue/index.ts index e1ec536..f8ea859 100644 --- a/src/plugins/primevue/index.ts +++ b/src/plugins/primevue/index.ts @@ -6,7 +6,7 @@ import Aura from '@primevue/themes/aura'; import zhCN from 'primelocale/zh-CN.json'; import PrimeVue from 'primevue/config'; -export function setupPrimeVue(app: import('vue').App) { +export function install({ app }: { app: import('vue').App }) { app.use(PrimeVue, { locale: { ...zhCN['zh-CN'], diff --git a/src/plugins/router/index.ts b/src/plugins/router/index.ts index ad2b5e5..8af5701 100644 --- a/src/plugins/router/index.ts +++ b/src/plugins/router/index.ts @@ -14,14 +14,14 @@ router.onError((error) => { console.debug('🚨 [router error]: ', error); }); -function setupRouter(app: import('vue').App) { +export { router }; +export function install({ app }: { app: import('vue').App }) { app // Register the plugin before the router .use(DataLoaderPlugin, { router }) // adding the router will trigger the initial navigation .use(router); } -export { router, setupRouter }; // ======================================================================== // =========================== Router Guards ============================== // ======================================================================== diff --git a/src/plugins/vue-i18n/index.ts b/src/plugins/vue-i18n/index.ts index e873c59..bd2f6e9 100644 --- a/src/plugins/vue-i18n/index.ts +++ b/src/plugins/vue-i18n/index.ts @@ -7,7 +7,7 @@ import { createI18n } from 'vue-i18n'; import messages from '@intlify/unplugin-vue-i18n/messages'; console.debug(`messages :>> `, messages); -export function setupVueI18n(app: import('vue').App) { +export function install({ app }: { app: import('vue').App }) { app.use( // https://vue-i18n.intlify.dev/guide/essentials/started.html#registering-the-i18n-plugin createI18n({