vite.config.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. import VueI18nPlugin from "@intlify/unplugin-vue-i18n/vite";
  2. import vue from "@vitejs/plugin-vue";
  3. import vueJsx from "@vitejs/plugin-vue-jsx";
  4. import laravel from "laravel-vite-plugin";
  5. import { fileURLToPath } from "node:url";
  6. import AutoImport from "unplugin-auto-import/vite";
  7. import Components from "unplugin-vue-components/vite";
  8. import {
  9. VueRouterAutoImports,
  10. getPascalCaseRouteName,
  11. } from "unplugin-vue-router";
  12. import VueRouter from "unplugin-vue-router/vite";
  13. import { defineConfig } from "vite";
  14. import VueDevTools from "vite-plugin-vue-devtools";
  15. import Layouts from "vite-plugin-vue-layouts";
  16. import vuetify from "vite-plugin-vuetify";
  17. // https://vitejs.dev/config/
  18. export default defineConfig({
  19. plugins: [
  20. // Docs: https://github.com/posva/unplugin-vue-router
  21. // ℹ️ This plugin should be placed before vue plugin
  22. VueRouter({
  23. getRouteName: (routeNode) => {
  24. // Convert pascal case to kebab case
  25. return getPascalCaseRouteName(routeNode)
  26. .replace(/([a-z0-9])([A-Z])/g, "$1-$2")
  27. .toLowerCase();
  28. },
  29. beforeWriteFiles: (root) => {
  30. // root.insert('/apps/email/:filter', '/resources/js/pages/apps/email/index.vue')
  31. // root.insert('/apps/email/:label', '/resources/js/pages/apps/email/index.vue')
  32. },
  33. routesFolder: "resources/js/pages",
  34. }),
  35. vue({
  36. template: {
  37. compilerOptions: {
  38. isCustomElement: (tag) =>
  39. tag === "swiper-container" || tag === "swiper-slide",
  40. },
  41. transformAssetUrls: {
  42. base: null,
  43. includeAbsolute: false,
  44. },
  45. },
  46. }),
  47. laravel({
  48. input: ["resources/js/main.js"],
  49. refresh: true,
  50. }),
  51. VueDevTools(),
  52. vueJsx(), // Docs: https://github.com/vuetifyjs/vuetify-loader/tree/master/packages/vite-plugin
  53. vuetify({
  54. styles: {
  55. configFile: "resources/styles/variables/_vuetify.scss",
  56. },
  57. }), // Docs: https://github.com/johncampionjr/vite-plugin-vue-layouts#vite-plugin-vue-layouts
  58. Layouts({
  59. layoutsDirs: "./resources/js/layouts/",
  60. }), // Docs: https://github.com/antfu/unplugin-vue-components#unplugin-vue-components
  61. Components({
  62. dirs: [
  63. "resources/js/@core/components",
  64. "resources/js/views/demos",
  65. "resources/js/components",
  66. ],
  67. dts: true,
  68. resolvers: [
  69. (componentName) => {
  70. // Auto import `VueApexCharts`
  71. if (componentName === "VueApexCharts")
  72. return {
  73. name: "default",
  74. from: "vue3-apexcharts",
  75. as: "VueApexCharts",
  76. };
  77. },
  78. ],
  79. }), // Docs: https://github.com/antfu/unplugin-auto-import#unplugin-auto-import
  80. AutoImport({
  81. imports: [
  82. "vue",
  83. VueRouterAutoImports,
  84. "@vueuse/core",
  85. "@vueuse/math",
  86. "vue-i18n",
  87. "pinia",
  88. ],
  89. dirs: [
  90. "./resources/js/@core/utils",
  91. "./resources/js/@core/composable/",
  92. "./resources/js/composables/",
  93. "./resources/js/utils/",
  94. "./resources/js/plugins/*/composables/*",
  95. ],
  96. vueTemplate: true,
  97. // ℹ️ Disabled to avoid confusion & accidental usage
  98. ignore: ["useCookies", "useStorage"],
  99. eslintrc: {
  100. enabled: true,
  101. filepath: "./.eslintrc-auto-import.json",
  102. },
  103. }), // Docs: https://github.com/intlify/bundle-tools/tree/main/packages/unplugin-vue-i18n#intlifyunplugin-vue-i18n
  104. VueI18nPlugin({
  105. runtimeOnly: true,
  106. compositionOnly: true,
  107. include: [
  108. fileURLToPath(
  109. new URL("./resources/js/plugins/i18n/locales/**", import.meta.url)
  110. ),
  111. ],
  112. }),
  113. ],
  114. define: {
  115. "process.env": {},
  116. },
  117. resolve: {
  118. alias: {
  119. "@core-scss": fileURLToPath(
  120. new URL("./resources/styles/@core", import.meta.url)
  121. ),
  122. "@": fileURLToPath(new URL("./resources/js", import.meta.url)),
  123. "@themeConfig": fileURLToPath(
  124. new URL("./themeConfig.js", import.meta.url)
  125. ),
  126. "@core": fileURLToPath(new URL("./resources/js/@core", import.meta.url)),
  127. "@layouts": fileURLToPath(
  128. new URL("./resources/js/@layouts", import.meta.url)
  129. ),
  130. "@images": fileURLToPath(new URL("./resources/images/", import.meta.url)),
  131. "@styles": fileURLToPath(new URL("./resources/styles/", import.meta.url)),
  132. "@configured-variables": fileURLToPath(
  133. new URL("./resources/styles/variables/_template.scss", import.meta.url)
  134. ),
  135. apexcharts: fileURLToPath(
  136. new URL("node_modules/apexcharts-clevision", import.meta.url)
  137. ),
  138. "@db": fileURLToPath(
  139. new URL("./resources/js/plugins/fake-api/handlers/", import.meta.url)
  140. ),
  141. "@api-utils": fileURLToPath(
  142. new URL("./resources/js/plugins/fake-api/utils/", import.meta.url)
  143. ),
  144. vuetify: fileURLToPath(new URL("node_modules/vuetify", import.meta.url)),
  145. },
  146. },
  147. build: {
  148. chunkSizeWarningLimit: 5000,
  149. },
  150. optimizeDeps: {
  151. exclude: ["vuetify"],
  152. entries: ["./resources/js/**/*.vue"],
  153. },
  154. });