manifestJson.ts 1.3 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 34
        return {
          code: '',
          map: this.getCombinedSourcemap(),
        }
fxy060608's avatar
fxy060608 已提交
35 36
      },
      generateBundle() {
fxy060608's avatar
fxy060608 已提交
37 38 39 40 41 42
        // 生成一个空的app-config.js,兼容基座已有规范
        this.emitFile({
          fileName: `app-config.js`,
          type: 'asset',
          source: '(function(){})();',
        })
fxy060608's avatar
fxy060608 已提交
43 44 45 46 47
        this.emitFile({
          fileName: `manifest.json`,
          type: 'asset',
          source: JSON.stringify(manifestJson, null, 2),
        })
fxy060608's avatar
fxy060608 已提交
48 49 50 51
      },
    }
  })
}