manifestJson.ts 3.6 KB
Newer Older
1
import type { Plugin, ResolvedConfig } from 'vite'
fxy060608's avatar
fxy060608 已提交
2

fxy060608's avatar
fxy060608 已提交
3 4 5
import {
  defineUniManifestJsonPlugin,
  normalizeNetworkTimeout,
fxy060608's avatar
fxy060608 已提交
6
  parseJson,
fxy060608's avatar
fxy060608 已提交
7
  initI18nOptions,
fxy060608's avatar
fxy060608 已提交
8
} from '@dcloudio/uni-cli-shared'
fxy060608's avatar
fxy060608 已提交
9 10 11 12

const defaultRouter = {
  mode: 'hash',
  base: '/',
13
  assets: 'assets',
fxy060608's avatar
fxy060608 已提交
14 15 16 17 18 19 20 21 22 23
}

const defaultAsync = {
  loading: 'AsyncLoading',
  error: 'AsyncError',
  delay: 200,
  timeout: 60000,
  suspensible: true,
}

fxy060608's avatar
fxy060608 已提交
24
export function uniManifestJsonPlugin(): Plugin {
fxy060608's avatar
fxy060608 已提交
25
  return defineUniManifestJsonPlugin((opts) => {
26
    let resolvedConfig: ResolvedConfig
fxy060608's avatar
fxy060608 已提交
27
    return {
fxy060608's avatar
fxy060608 已提交
28
      name: 'uni:h5-manifest-json',
fxy060608's avatar
fxy060608 已提交
29
      enforce: 'pre',
30 31
      configResolved(config) {
        defaultRouter.assets = config.build.assetsDir
32
        resolvedConfig = config
33
      },
fxy060608's avatar
fxy060608 已提交
34 35 36 37
      transform(code, id) {
        if (!opts.filter(id)) {
          return
        }
fxy060608's avatar
fxy060608 已提交
38
        const manifest = parseJson(code)
fxy060608's avatar
fxy060608 已提交
39
        const { debug, h5 } = manifest
40 41 42 43 44
        const router = {
          ...defaultRouter,
          ...{ base: resolvedConfig.base },
          ...((h5 && h5.router) || {}),
        }
fxy060608's avatar
fxy060608 已提交
45 46
        if (!router.base) {
          router.base = '/'
47 48
        } else {
          router.base = new URL(router.base, 'http://localhost').pathname
fxy060608's avatar
fxy060608 已提交
49
        }
fxy060608's avatar
fxy060608 已提交
50
        const async = { ...defaultAsync, ...((h5 && h5.async) || {}) }
fxy060608's avatar
fxy060608 已提交
51

fxy060608's avatar
fxy060608 已提交
52
        const networkTimeout = normalizeNetworkTimeout(manifest.networkTimeout)
fxy060608's avatar
fxy060608 已提交
53 54 55 56

        const sdkConfigs = (h5 && h5.sdkConfigs) || {}

        const qqMapKey =
Q
qiang 已提交
57 58 59 60 61 62
          sdkConfigs.maps && sdkConfigs.maps.qqmap && sdkConfigs.maps.qqmap.key

        const googleMapKey =
          sdkConfigs.maps &&
          sdkConfigs.maps.google &&
          sdkConfigs.maps.google.key
fxy060608's avatar
fxy060608 已提交
63

64 65
        const aMapKey =
          sdkConfigs.maps && sdkConfigs.maps.amap && sdkConfigs.maps.amap.key
66

67
        const aMapSecurityJsCode =
68
          sdkConfigs.maps &&
69 70
          sdkConfigs.maps.amap &&
          sdkConfigs.maps.amap.securityJsCode
71

72
        const aMapServiceHost =
73
          sdkConfigs.maps &&
74 75
          sdkConfigs.maps.amap &&
          sdkConfigs.maps.amap.serviceHost
76

Q
qiang 已提交
77 78
        let locale: string | null | undefined = manifest.locale
        locale = locale && locale.toUpperCase() !== 'AUTO' ? locale : ''
Q
qiang 已提交
79

fxy060608's avatar
fxy060608 已提交
80 81 82 83 84 85 86 87
        const i18nOptions = initI18nOptions(
          process.env.UNI_PLATFORM,
          process.env.UNI_INPUT_DIR,
          false,
          false
        )
        const fallbackLocale = (i18nOptions && i18nOptions.locale) || ''

fxy060608's avatar
fxy060608 已提交
88
        const flexDirection =
fxy060608's avatar
fxy060608 已提交
89 90 91
          (manifest['app'] &&
            manifest['app'].nvue &&
            manifest['app'].nvue['flex-direction']) ||
fxy060608's avatar
fxy060608 已提交
92 93 94
          'column'

        return {
fxy060608's avatar
fxy060608 已提交
95 96 97 98 99
          code: `export const appId = ${JSON.stringify(manifest.appid || '')}
  export const appName = ${JSON.stringify(manifest.name || '')}
  export const appVersion = ${JSON.stringify(manifest.versionName || '')}
  export const appVersionCode = ${JSON.stringify(manifest.versionCode || '')}

fxy060608's avatar
fxy060608 已提交
100 101 102 103 104 105 106 107
  export const debug = ${!!debug}
  export const nvue = ${JSON.stringify({
    'flex-direction': flexDirection,
  })}
  export const networkTimeout = ${JSON.stringify(networkTimeout)}
  // h5
  export const router = ${JSON.stringify(router)}
  export const async = ${JSON.stringify(async)}
Q
qiang 已提交
108 109
  export const qqMapKey = ${JSON.stringify(qqMapKey)}
  export const googleMapKey = ${JSON.stringify(googleMapKey)}
110 111 112
  export const aMapKey = ${JSON.stringify(aMapKey)}
  export const aMapSecurityJsCode = ${JSON.stringify(aMapSecurityJsCode)}
  export const aMapServiceHost = ${JSON.stringify(aMapServiceHost)}
fxy060608's avatar
fxy060608 已提交
113
  export const sdkConfigs = ${JSON.stringify(sdkConfigs)}
Q
qiang 已提交
114
  export const locale = '${locale}'
fxy060608's avatar
fxy060608 已提交
115
  export const fallbackLocale = '${fallbackLocale}'
fxy060608's avatar
fxy060608 已提交
116
  `,
fxy060608's avatar
fxy060608 已提交
117 118
          map: { mappings: '' },
        }
fxy060608's avatar
fxy060608 已提交
119 120 121
      },
    }
  })
fxy060608's avatar
fxy060608 已提交
122
}