plugins.ts 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import { cdn } from "./cdn";
  2. import vue from "@vitejs/plugin-vue";
  3. import { pathResolve } from "./utils";
  4. import { viteBuildInfo } from "./info";
  5. import svgLoader from "vite-svg-loader";
  6. import Icons from "unplugin-icons/vite";
  7. import type { PluginOption } from "vite";
  8. import vueJsx from "@vitejs/plugin-vue-jsx";
  9. import tailwindcss from "@tailwindcss/vite";
  10. import { configCompressPlugin } from "./compress";
  11. import removeNoMatch from "vite-plugin-router-warn";
  12. import { visualizer } from "rollup-plugin-visualizer";
  13. import removeConsole from "vite-plugin-remove-console";
  14. import VueI18nPlugin from "@intlify/unplugin-vue-i18n/vite";
  15. import { codeInspectorPlugin } from "code-inspector-plugin";
  16. import { vitePluginFakeServer } from "vite-plugin-fake-server";
  17. export function getPluginsList(
  18. VITE_CDN: boolean,
  19. VITE_COMPRESSION: ViteCompression
  20. ): PluginOption[] {
  21. const lifecycle = process.env.npm_lifecycle_event;
  22. return [
  23. tailwindcss(),
  24. vue({
  25. template: {
  26. compilerOptions: {
  27. isCustomElement: tag => tag === "deep-chat"
  28. }
  29. }
  30. }),
  31. // jsx、tsx语法支持
  32. vueJsx(),
  33. VueI18nPlugin({
  34. include: [pathResolve("../locales/**")]
  35. }),
  36. /**
  37. * 在页面上按住组合键时,鼠标在页面移动即会在 DOM 上出现遮罩层并显示相关信息,点击一下将自动打开 IDE 并将光标定位到元素对应的代码位置
  38. * Mac 默认组合键 Option + Shift
  39. * Windows 默认组合键 Alt + Shift
  40. * 更多用法看 https://inspector.fe-dev.cn/guide/start.html
  41. */
  42. codeInspectorPlugin({
  43. bundler: "vite",
  44. hideConsole: true
  45. }),
  46. viteBuildInfo(),
  47. /**
  48. * 开发环境下移除非必要的vue-router动态路由警告No match found for location with path
  49. * 非必要具体看 https://github.com/vuejs/router/issues/521 和 https://github.com/vuejs/router/issues/359
  50. * vite-plugin-router-warn只在开发环境下启用,只处理vue-router文件并且只在服务启动或重启时运行一次,性能消耗可忽略不计
  51. */
  52. removeNoMatch(),
  53. // mock支持
  54. vitePluginFakeServer({
  55. logger: false,
  56. include: "mock",
  57. infixName: false,
  58. enableProd: true
  59. }),
  60. // svg组件化支持
  61. svgLoader(),
  62. // 自动按需加载图标
  63. Icons({
  64. compiler: "vue3",
  65. scale: 1
  66. }),
  67. VITE_CDN ? cdn : null,
  68. configCompressPlugin(VITE_COMPRESSION),
  69. // 线上环境删除console
  70. removeConsole({ external: ["src/assets/iconfont/iconfont.js"] }),
  71. // 打包分析
  72. lifecycle === "report"
  73. ? visualizer({ open: true, brotliSize: true, filename: "report.html" })
  74. : (null as any)
  75. ];
  76. }