manifestJson.ts 1.2 KB
Newer Older
fxy060608's avatar
fxy060608 已提交
1
import path from 'path'
fxy060608's avatar
fxy060608 已提交
2 3
import { Plugin } from 'vite'

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

export function uniManifestJsonPlugin(): Plugin {
fxy060608's avatar
fxy060608 已提交
12
  let manifestJson: Record<string, any>
fxy060608's avatar
fxy060608 已提交
13 14 15 16 17 18 19 20
  return defineUniManifestJsonPlugin((opts) => {
    return {
      name: 'vite:uni-app-manifest-json',
      enforce: 'pre',
      transform(code, id) {
        if (!opts.filter(id)) {
          return
        }
fxy060608's avatar
fxy060608 已提交
21 22 23
        this.addWatchFile(
          path.resolve(process.env.UNI_INPUT_DIR, 'manifest.json')
        )
fxy060608's avatar
fxy060608 已提交
24
        manifestJson = normalizeAppManifestJson(
25
          parseJson(code),
fxy060608's avatar
fxy060608 已提交
26 27 28 29 30
          parsePagesJsonOnce(
            process.env.UNI_INPUT_DIR,
            process.env.UNI_PLATFORM
          )
        )
fxy060608's avatar
fxy060608 已提交
31 32 33
        return ''
      },
      generateBundle() {
fxy060608's avatar
fxy060608 已提交
34 35 36 37 38 39
        // 生成一个空的app-config.js,兼容基座已有规范
        this.emitFile({
          fileName: `app-config.js`,
          type: 'asset',
          source: '(function(){})();',
        })
fxy060608's avatar
fxy060608 已提交
40 41 42 43 44
        this.emitFile({
          fileName: `manifest.json`,
          type: 'asset',
          source: JSON.stringify(manifestJson, null, 2),
        })
fxy060608's avatar
fxy060608 已提交
45 46 47 48
      },
    }
  })
}