-
Notifications
You must be signed in to change notification settings - Fork 3.7k
/
Copy pathindex.ts
47 lines (40 loc) · 1.74 KB
/
index.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import type { App } from 'vue'
import {
invokeCreateErrorHandler,
invokeCreateVueAppHook,
} from '@dcloudio/uni-shared'
import { applyOptions } from './componentOptions'
import { $callMethod, set } from './componentInstance'
import { createErrorHandler, initOptionMergeStrategies } from './appConfig'
import { uniIdMixin } from './uni-id-mixin'
export function initApp(app: App) {
const appConfig = app.config
// 该逻辑全平台会调用
// - 需要兼容支持开发者自定义的 errorHandler
// - nvue、vue 需要使用同一个(once) errorHandler
// - 需要支持 uni.onError 注册监听
// * 目前仅部分小程序平台支持,调用uni.onError时,如果app已存在,则添加到instance的hooks中,如果不存在,则临时存储,初始化instance时添加到hooks中
// * 目前在 errorHandler 中,会调用 app.$callHook(ON_ERROR, err),所以上一步需要将 uni.onError 存储到 app 的 hooks 中
// - 部分平台(目前主要是小程序)开发阶段 uni-console 会调用 uni.onError 注册监听
appConfig.errorHandler = invokeCreateErrorHandler(app, createErrorHandler)
initOptionMergeStrategies(appConfig.optionMergeStrategies)
const globalProperties = appConfig.globalProperties
if (__PLATFORM__ === 'h5') {
if (__UNI_FEATURE_UNI_CLOUD__) {
uniIdMixin(globalProperties)
}
} else {
uniIdMixin(globalProperties)
}
if (__VUE_OPTIONS_API__) {
globalProperties.$set = set
globalProperties.$applyOptions = applyOptions
globalProperties.$callMethod = $callMethod
}
if (__PLATFORM__ === 'app' || __PLATFORM__ === 'h5') {
invokeCreateVueAppHook(app)
} else {
;(uni as any).invokeCreateVueAppHook(app)
}
}
export { traverse } from './reactivity'