72 lines
2.4 KiB
TypeScript
72 lines
2.4 KiB
TypeScript
import vue from '@vitejs/plugin-vue'
|
|
import vueJsx from '@vitejs/plugin-vue-jsx'
|
|
import chokidar from 'chokidar'
|
|
import dayjs from 'dayjs'
|
|
import pc from 'picocolors'
|
|
import type { Plugin } from 'vite'
|
|
import { createBanner } from './banner/'
|
|
import { createCompress } from './compress/'
|
|
import { createHttps } from './https'
|
|
import { createMock } from './mock/'
|
|
import { createProgress } from './progress/'
|
|
import { createPwa } from './pwa/'
|
|
import { createSvgIcons } from './svgSprite/'
|
|
import { createUnPlugin } from './unplugin/'
|
|
import { createVisualizer } from './visualizer/'
|
|
import { compress, https, localEnabled, port, prodEnabled, pwa, pwaDev, report } from '/@/config/'
|
|
|
|
const viteApp = 'VITE_' + 'APP_'
|
|
const viteUser = 'VITE_' + 'USER_'
|
|
|
|
export const createVitePlugin = (env: Record<string, string>) => {
|
|
const vitePlugins: (Plugin | Plugin[])[] = [vue()]
|
|
const userName = env[`${viteApp}GITHUB_USER_NAME`]
|
|
const secretKey = env[`${viteApp}SECRET_KEY`]
|
|
const nodeEnv = env[`${viteUser}NODE_ENV`]
|
|
const isEmpty = (value: any) => {
|
|
return value == undefined || value == '' || value == null
|
|
}
|
|
if (isEmpty(userName) || isEmpty(secretKey)) return
|
|
if (nodeEnv !== 'development' && (isEmpty(userName) || isEmpty(secretKey))) return
|
|
vitePlugins.push(
|
|
vueJsx(),
|
|
createProgress(env),
|
|
createUnPlugin(env),
|
|
createMock(localEnabled, prodEnabled),
|
|
createSvgIcons(),
|
|
createBanner()
|
|
)
|
|
if (compress) vitePlugins.push(createCompress(compress))
|
|
if (pwa) vitePlugins.push(createPwa(nodeEnv, pwaDev))
|
|
if (https) vitePlugins.push(createHttps())
|
|
if (report) vitePlugins.push(createVisualizer())
|
|
return vitePlugins
|
|
}
|
|
|
|
export const createWatch = (env: Record<string, string>) => {
|
|
const userName = env[`${viteApp}GITHUB_USER_NAME`]
|
|
const secretKey = env[`${viteApp}SECRET_KEY`]
|
|
const nodeEnv = env[`${viteUser}NODE_ENV`]
|
|
|
|
if (nodeEnv === 'production' && (userName === 'test' || secretKey === 'preview')) {
|
|
console.log(
|
|
`${pc.red(
|
|
'key错误'
|
|
)}`
|
|
)
|
|
process.exit()
|
|
}
|
|
|
|
if (nodeEnv === 'development') {
|
|
chokidar.watch('./src/views').on('change', (path) => {
|
|
if (path.endsWith('vue')) {
|
|
console.log(
|
|
`\n${pc.gray(dayjs().format('HH:mm:ss'))} ${pc.cyan('[Vue Sh' + 'op Vite]')} ${pc.cyan(`http://localhost:${port}/`)} ${pc.green(
|
|
'update success'
|
|
)} `
|
|
)
|
|
}
|
|
})
|
|
}
|
|
}
|