12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- import { PluginOption } from 'vite'
- import { VitePWA } from 'vite-plugin-pwa'
- import { visualizer } from 'rollup-plugin-visualizer'
- import vue from '@vitejs/plugin-vue'
- import vueJsx from '@vitejs/plugin-vue-jsx'
- import eslintPlugin from 'vite-plugin-eslint'
- import simpleHtmlPlugin from 'vite-plugin-simple-html'
- import vueSetupExtend from 'unplugin-vue-setup-extend-plus/vite'
- import path from 'path'
- import createAutoImport from '../vite/plugins/auto-import'
- import createComponents from '../vite/plugins/components'
- import prismjsPlugin from '../vite/plugins/prismjs-plugin'
- import createCompression from '../vite/plugins/compression'
- import createIcons from '../vite/plugins/icons'
- import createSvgIconsPlugin from '../vite/plugins/svg-icon'
- /**
- * 创建 vite 插件
- * @param viteEnv
- */
- export const createVitePlugins = (viteEnv: ViteEnv, isBuild = false): (PluginOption | PluginOption[])[] => {
- const { VITE_GLOB_APP_TITLE, VITE_REPORT, VITE_PWA } = viteEnv
- return [
- vue(),
- // vue 可以使用 jsx/tsx 语法
- vueJsx(),
- // esLint 报错信息显示在浏览器界面上
- eslintPlugin(),
- // name 可以写在 script 标签上
- vueSetupExtend({}),
- // vue api
- createAutoImport(path),
- createComponents(path),
- createIcons(),
- createSvgIconsPlugin(path, isBuild),
- // 创建打包压缩配置
- createCompression(viteEnv),
- // 注入变量到 html 文件
- simpleHtmlPlugin({
- minify: true,
- inject: {
- data: { title: VITE_GLOB_APP_TITLE }
- }
- }),
- // 代码高亮
- prismjsPlugin(),
- // vitePWA
- VITE_PWA && createVitePwa(viteEnv),
- // 是否生成包预览,分析依赖包大小做优化处理
- VITE_REPORT && (visualizer({ filename: 'stats.html', gzipSize: true, brotliSize: true }) as PluginOption)
- ]
- }
- /**
- * @description VitePwa
- * @param viteEnv
- */
- const createVitePwa = (viteEnv: ViteEnv): PluginOption | PluginOption[] => {
- const { VITE_GLOB_APP_TITLE } = viteEnv
- return VitePWA({
- registerType: 'autoUpdate',
- manifest: {
- name: VITE_GLOB_APP_TITLE,
- short_name: VITE_GLOB_APP_TITLE,
- theme_color: '#ffffff',
- icons: [
- {
- src: '/logo.png',
- sizes: '192x192',
- type: 'image/png'
- },
- {
- src: '/logo.png',
- sizes: '512x512',
- type: 'image/png'
- },
- {
- src: '/logo.png',
- sizes: '512x512',
- type: 'image/png',
- purpose: 'any maskable'
- }
- ]
- }
- })
- }
|