index.ts 2.2 KB
Newer Older
fxy060608's avatar
fxy060608 已提交
1 2
import fs from 'fs'
import path from 'path'
fxy060608's avatar
fxy060608 已提交
3
import { isH5CustomElement, isH5NativeTag } from '@dcloudio/uni-shared'
fxy060608's avatar
fxy060608 已提交
4 5 6
import {
  isInHBuilderX,
  resolveMainPathOnce,
fxy060608's avatar
fxy060608 已提交
7 8
  transformMatchMedia,
  transformTapToClick,
fxy060608's avatar
fxy060608 已提交
9 10
  UniVitePlugin,
} from '@dcloudio/uni-cli-shared'
fxy060608's avatar
fxy060608 已提交
11 12 13
import { createHandleHotUpdate } from './handleHotUpdate'
import { createTransformIndexHtml } from './transformIndexHtml'
import { createDefine } from '../utils/features'
fxy060608's avatar
fxy060608 已提交
14
import { isSsr } from '../utils'
fxy060608's avatar
fxy060608 已提交
15
import { esbuildPrePlugin } from './esbuild/esbuildPrePlugin'
fxy060608's avatar
fxy060608 已提交
16 17
import { external } from './configureServer/ssr'
import { createConfigureServer } from './configureServer'
fxy060608's avatar
fxy060608 已提交
18
import { transformPageHead } from './transforms/transformPageHead'
fxy060608's avatar
fxy060608 已提交
19 20 21 22 23 24 25

export const UniH5Plugin: UniVitePlugin = {
  name: 'vite:uni-h5',
  uni: {
    copyOptions: {
      assets: ['hybrid/html'],
    },
fxy060608's avatar
fxy060608 已提交
26 27 28
    compilerOptions: {
      isNativeTag: isH5NativeTag,
      isCustomElement: isH5CustomElement,
fxy060608's avatar
fxy060608 已提交
29 30 31 32 33
      nodeTransforms: [
        transformTapToClick,
        transformMatchMedia,
        transformPageHead,
      ],
fxy060608's avatar
fxy060608 已提交
34
    },
fxy060608's avatar
fxy060608 已提交
35 36 37 38 39 40 41 42 43 44 45 46
  },
  config(config, env) {
    if (isInHBuilderX()) {
      if (
        !fs.existsSync(path.resolve(process.env.UNI_INPUT_DIR, 'index.html'))
      ) {
        console.error(`请确认您的项目模板是否支持vue3:根目录缺少 index.html`)
        process.exit()
      }
    }
    return {
      optimizeDeps: {
fxy060608's avatar
fxy060608 已提交
47 48 49 50 51
        entries: resolveMainPathOnce(process.env.UNI_INPUT_DIR),
        exclude: external,
        esbuildOptions: {
          plugins: [esbuildPrePlugin()],
        },
fxy060608's avatar
fxy060608 已提交
52 53
      },
      define: createDefine(env.command, config),
54
      server: {
55
        host: true,
56 57 58 59
        fs: {
          strict: false,
        },
      },
fxy060608's avatar
fxy060608 已提交
60 61 62 63 64 65 66 67 68
      ssr: {
        external,
      },
      build: {
        rollupOptions: {
          // resolveSSRExternal 会判定package.json,hbx 工程可能没有,通过 rollup 来配置
          external: isSsr(env.command, config) ? external : [],
        },
      },
fxy060608's avatar
fxy060608 已提交
69 70 71 72 73 74
    }
  },
  configResolved(config) {
    // TODO 禁止 optimizeDeps
    ;(config as any).cacheDir = ''
  },
fxy060608's avatar
fxy060608 已提交
75
  configureServer: createConfigureServer(),
fxy060608's avatar
fxy060608 已提交
76 77 78
  handleHotUpdate: createHandleHotUpdate(),
  transformIndexHtml: createTransformIndexHtml(),
}