50 lines
1.4 KiB
TypeScript
50 lines
1.4 KiB
TypeScript
import { createApp } from 'vue'
|
|
import { createPinia } from 'pinia'
|
|
import App from './App.vue'
|
|
import './style.css'
|
|
import 'vue-sonner/style.css'
|
|
|
|
// 导入模块注册入口 —— 副作用导入,注册所有模块到 moduleRegistry
|
|
import './modules'
|
|
|
|
import { createLogger } from './lib/logger'
|
|
const logger = createLogger('main')
|
|
|
|
// 全局未捕获异常日志
|
|
window.addEventListener('error', (event) => {
|
|
logger.error(`全局JS错误: ${event.message} @ ${event.filename}:${event.lineno}`)
|
|
})
|
|
|
|
window.addEventListener('unhandledrejection', (event) => {
|
|
logger.error(`未处理的Promise拒绝: ${event.reason}`)
|
|
})
|
|
|
|
logger.info('Thing 应用启动')
|
|
|
|
const app = createApp(App)
|
|
const pinia = createPinia()
|
|
|
|
app.use(pinia)
|
|
|
|
app.mount('#app')
|
|
|
|
// 应用挂载后初始化搜索索引和进程监听(不阻塞首屏渲染)
|
|
void import('./stores/searchStore').then(({ useSearchStore }) => {
|
|
const searchStore = useSearchStore()
|
|
searchStore.initGlobalIndex()
|
|
|
|
// 移除已禁用模块的搜索项
|
|
void import('./stores/appStore').then(({ useAppStore }) => {
|
|
const appStore = useAppStore()
|
|
appStore.modules.forEach(m => {
|
|
if (!m.enabled) {
|
|
searchStore.unregisterModule(m.id)
|
|
}
|
|
})
|
|
})
|
|
})
|
|
|
|
void import('./stores/processStore').then(({ useProcessStore }) => {
|
|
useProcessStore().initListener().catch(e => console.error('Process listener init error:', e))
|
|
})
|