index.ts 2.4 KB
Newer Older
fxy060608's avatar
fxy060608 已提交
1
import { Plugin, ResolvedConfig, ViteDevServer } from 'vite'
2
import { Options as VueOptions } from '@vitejs/plugin-vue'
fxy060608's avatar
fxy060608 已提交
3 4
import { Options as ViteLegacyOptions } from '@vitejs/plugin-legacy'
import { VueJSXPluginOptions } from '@vue/babel-plugin-jsx'
5 6
import VueJsxPlugin from '@vitejs/plugin-vue-jsx'
import ViteLegacyPlugin from '@vitejs/plugin-legacy'
fxy060608's avatar
fxy060608 已提交
7

8 9 10
import { createConfig } from './config'
import { createConfigResolved } from './configResolved'
import { createConfigureServer } from './configureServer'
fxy060608's avatar
fxy060608 已提交
11
import { createHandleHotUpdate } from './handleHotUpdate'
fxy060608's avatar
fxy060608 已提交
12
import { initExtraPlugins } from './utils'
13 14
export interface VitePluginUniOptions {
  inputDir?: string
fxy060608's avatar
fxy060608 已提交
15
  outputDir?: string
16
  vueOptions?: VueOptions
fxy060608's avatar
fxy060608 已提交
17 18
  vueJsxOptions?: VueJSXPluginOptions
  viteLegacyOptions?: ViteLegacyOptions
fxy060608's avatar
fxy060608 已提交
19
}
20
export interface VitePluginUniResolvedOptions extends VitePluginUniOptions {
fxy060608's avatar
fxy060608 已提交
21
  base: string
fxy060608's avatar
fxy060608 已提交
22
  command: ResolvedConfig['command']
fxy060608's avatar
fxy060608 已提交
23
  platform: UniApp.PLATFORM
24
  inputDir: string
fxy060608's avatar
fxy060608 已提交
25
  outputDir: string
fxy060608's avatar
fxy060608 已提交
26
  assetsDir: string
27
  devServer?: ViteDevServer
fxy060608's avatar
fxy060608 已提交
28
}
29

fxy060608's avatar
fxy060608 已提交
30
export * from './vue'
31

32 33 34 35 36 37 38 39 40 41
let createVueJsxPlugin: typeof VueJsxPlugin | undefined
try {
  createVueJsxPlugin = require('@vitejs/plugin-vue-jsx')
} catch (e) {}

let createViteLegacyPlugin: typeof ViteLegacyPlugin | undefined
try {
  createViteLegacyPlugin = require('@vitejs/plugin-legacy')
} catch (e) {}

42 43
export default function uniPlugin(
  rawOptions: VitePluginUniOptions = {}
44
): Plugin[] {
45 46
  const options: VitePluginUniResolvedOptions = {
    ...rawOptions,
fxy060608's avatar
fxy060608 已提交
47
    base: '/',
fxy060608's avatar
fxy060608 已提交
48
    assetsDir: 'assets',
fxy060608's avatar
fxy060608 已提交
49 50
    inputDir: '',
    outputDir: '',
fxy060608's avatar
fxy060608 已提交
51
    command: 'serve',
fxy060608's avatar
fxy060608 已提交
52
    platform: 'h5',
53
  }
54 55 56 57 58 59 60 61 62 63 64 65 66 67
  const plugins: Plugin[] = []

  if (createViteLegacyPlugin && options.viteLegacyOptions !== false) {
    plugins.push(
      ...(createViteLegacyPlugin(
        options.viteLegacyOptions
      ) as unknown as Plugin[])
    )
  }

  if (createVueJsxPlugin && options.vueJsxOptions !== false) {
    plugins.push(createVueJsxPlugin(options.vueJsxOptions))
  }
  plugins.push({
68
    name: 'vite:uni',
69 70 71
    config: createConfig(options),
    configResolved: createConfigResolved(options),
    configureServer: createConfigureServer(options),
fxy060608's avatar
fxy060608 已提交
72
    handleHotUpdate: createHandleHotUpdate(options),
73
  })
fxy060608's avatar
fxy060608 已提交
74 75 76 77 78 79
  plugins.push(
    ...initExtraPlugins(
      process.env.UNI_CLI_CONTEXT || process.cwd(),
      (process.env.UNI_PLATFORM as UniApp.PLATFORM) || 'h5'
    )
  )
80
  return plugins
81
}
fxy060608's avatar
fxy060608 已提交
82 83

export { uniInjectPlugin } from './configResolved/plugins/inject'