vite.config.ts 2.7 KB
Newer Older
fxy060608's avatar
fxy060608 已提交
1 2
import path from 'path'

3 4
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
fxy060608's avatar
fxy060608 已提交
5
import jscc from 'rollup-plugin-jscc'
fxy060608's avatar
fxy060608 已提交
6 7 8 9
import replace from '@rollup/plugin-replace'

import { isCustomElement } from '../uni-shared'

fxy060608's avatar
fxy060608 已提交
10 11 12 13 14 15 16
const moduleAlias = require('module-alias')
moduleAlias.addAlias(
  '@vue/babel-plugin-jsx',
  path.join(__dirname, 'lib/babel-plugin-jsx')
)
const vueJsx = require('@vitejs/plugin-vue-jsx')

fxy060608's avatar
fxy060608 已提交
17 18 19 20
function resolve(file: string) {
  return path.resolve(__dirname, file)
}

fxy060608's avatar
fxy060608 已提交
21 22
const FORMAT = process.env.FORMAT as 'es' | 'cjs'

23
export default defineConfig({
fxy060608's avatar
fxy060608 已提交
24
  root: __dirname,
fxy060608's avatar
fxy060608 已提交
25 26 27
  define: {
    global: 'window',
    __DEV__: `(process.env.NODE_ENV !== 'production')`,
fxy060608's avatar
fxy060608 已提交
28
    __TEST__: false,
29
    __PLATFORM__: JSON.stringify('h5'),
fxy060608's avatar
fxy060608 已提交
30
    __NODE_JS__: FORMAT === 'cjs' ? true : false,
fxy060608's avatar
fxy060608 已提交
31
  },
fxy060608's avatar
fxy060608 已提交
32 33 34 35 36 37 38 39 40 41 42 43
  resolve: {
    alias: [
      {
        find: '@dcloudio/uni-api',
        replacement: resolve('../uni-api/src/index.ts'),
      },
      {
        find: '@dcloudio/uni-vue',
        replacement: resolve('../uni-vue/src/index.ts'),
      },
      {
        find: '@dcloudio/uni-core',
fxy060608's avatar
fxy060608 已提交
44
        replacement: resolve('../uni-core/src'),
fxy060608's avatar
fxy060608 已提交
45 46 47 48 49
      },
      {
        find: '@dcloudio/uni-components',
        replacement: resolve('../uni-components/src/index.ts'),
      },
fxy060608's avatar
fxy060608 已提交
50 51 52 53
      {
        find: '@dcloudio/uni-platform',
        replacement: resolve('./src/platform/index.ts'),
      },
fxy060608's avatar
fxy060608 已提交
54 55
    ],
  },
56 57 58 59 60 61 62 63
  plugins: [
    vue({
      template: {
        compilerOptions: {
          isCustomElement,
        },
      },
    }),
fxy060608's avatar
fxy060608 已提交
64
    vueJsx({ optimize: true, isCustomElement }),
65 66
  ],
  build: {
fxy060608's avatar
fxy060608 已提交
67
    emptyOutDir: FORMAT === 'es',
68
    minify: false,
fxy060608's avatar
fxy060608 已提交
69 70
    lib: {
      entry: path.resolve(__dirname, 'src/index.ts'),
fxy060608's avatar
fxy060608 已提交
71
      formats: [FORMAT],
fxy060608's avatar
fxy060608 已提交
72
    },
73 74
    assetsDir: '.',
    rollupOptions: {
fxy060608's avatar
fxy060608 已提交
75 76
      external(source) {
        if (
fxy060608's avatar
fxy060608 已提交
77 78 79 80 81 82 83
          [
            'vue',
            'vue-router',
            '@vue/shared',
            '@dcloudio/uni-i18n',
            '@dcloudio/uni-shared',
          ].includes(source)
fxy060608's avatar
fxy060608 已提交
84 85 86 87 88 89 90
        ) {
          return true
        }
        if (source.startsWith('@dcloudio/uni-h5/style')) {
          return true
        }
      },
91 92
      preserveEntrySignatures: 'strict',
      plugins: [
fxy060608's avatar
fxy060608 已提交
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
        replace({
          values: {
            defineOnApi: `/*#__PURE__*/ defineOnApi`,
            defineOffApi: `/*#__PURE__*/ defineOffApi`,
            defineTaskApi: `/*#__PURE__*/ defineTaskApi`,
            defineSyncApi: `/*#__PURE__*/ defineSyncApi`,
            defineAsyncApi: `/*#__PURE__*/ defineAsyncApi`,
          },
          preventAssignment: true,
        }),

        jscc({
          values: {
            // 该插件限制了不能以__开头
            _NODE_JS_: FORMAT === 'cjs' ? 1 : 0,
          },
        }),
110 111
      ],
    },
fxy060608's avatar
fxy060608 已提交
112
  },
113
})