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
import {
fxy060608's avatar
fxy060608 已提交
5
  APP_CONFIG,
fxy060608's avatar
fxy060608 已提交
6
  defineUniManifestJsonPlugin,
7
  getLocaleFiles,
fxy060608's avatar
fxy060608 已提交
8
  normalizeAppManifestJson,
9
  parseJson,
fxy060608's avatar
fxy060608 已提交
10
  parsePagesJsonOnce,
fxy060608's avatar
fxy060608 已提交
11
} from '@dcloudio/uni-cli-shared'
fxy060608's avatar
fxy060608 已提交
12 13 14

export function uniManifestJsonPlugin(): Plugin {
  return defineUniManifestJsonPlugin((opts) => {
fxy060608's avatar
fxy060608 已提交
15
    const inputDir = process.env.UNI_INPUT_DIR
fxy060608's avatar
fxy060608 已提交
16
    return {
fxy060608's avatar
fxy060608 已提交
17
      name: 'uni:app-manifest-json',
fxy060608's avatar
fxy060608 已提交
18 19 20 21 22
      enforce: 'pre',
      transform(code, id) {
        if (!opts.filter(id)) {
          return
        }
fxy060608's avatar
fxy060608 已提交
23 24
        this.addWatchFile(path.resolve(inputDir, 'manifest.json'))
        getLocaleFiles(path.resolve(inputDir, 'locale')).forEach((filepath) => {
25 26
          this.addWatchFile(filepath)
        })
fxy060608's avatar
fxy060608 已提交
27
        const manifestJson = normalizeAppManifestJson(
28
          parseJson(code),
fxy060608's avatar
fxy060608 已提交
29
          parsePagesJsonOnce(inputDir, process.env.UNI_PLATFORM)
fxy060608's avatar
fxy060608 已提交
30
        )
fxy060608's avatar
fxy060608 已提交
31 32

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