import fs from "node:fs"; import path from "node:path"; import process from "node:process"; import tailwindcss from "@tailwindcss/vite"; import legacy from "@vitejs/plugin-legacy"; import vue from "@vitejs/plugin-vue"; import jsx from "@vitejs/plugin-vue-jsx"; import dotenv from "dotenv"; import autoImport from "unplugin-auto-import/vite"; import iconsResolver from "unplugin-icons/resolver"; import icons from "unplugin-icons/vite"; import { IonicResolver } from "unplugin-vue-components/resolvers"; import components from "unplugin-vue-components/vite"; import { defineConfig } from "vite"; import { VitePWA } from "vite-plugin-pwa"; import { generateVersion } from "./scripts/build"; const packageJson = JSON.parse(fs.readFileSync("./package.json", "utf-8")); const appVersion = packageJson.version; // https://vitejs.dev/config/ export default defineConfig(({ mode }) => { dotenv.config({ path: `.env.${mode}` }); return { plugins: [ vue(), jsx(), legacy(), icons({ autoInstall: true, }), tailwindcss(), autoImport({ dirs: ["src/composables", "src/utils", "src/store"], imports: ["vue", "vue-router", "@vueuse/core", "vue-i18n", "pinia"], resolvers: [IonicResolver()], vueTemplate: true, }), components({ directoryAsNamespace: true, resolvers: [IonicResolver(), iconsResolver({ prefix: "i" })], }), VitePWA({ registerType: "autoUpdate", injectRegister: "auto", includeAssets: ["riwsan.png"], devOptions: { enabled: true, type: "module", }, manifest: { name: "Riwsan 瑞讯", short_name: "Riwsan 瑞讯", description: "Riwsan - 下一代数字资产交易平台", theme_color: "#ffffff", background_color: "#ffffff", display: "standalone", orientation: "portrait", scope: "/", start_url: "/", id: "/", prefer_related_applications: false, icons: [ { src: "/riwsan.jpg", sizes: "any", type: "image/jpeg", purpose: "any maskable", }, ], }, workbox: { globPatterns: ["**/*.{js,css,html,ico,png,svg,jpg,woff2}"], navigateFallback: "/index.html", navigateFallbackDenylist: [/^\/api/], cleanupOutdatedCaches: true, clientsClaim: true, skipWaiting: true, maximumFileSizeToCacheInBytes: 100 * 1024 * 1024, // 100 MB }, }), // basicSsl(), generateVersion({ version: appVersion, }), ], define: { __APP_VERSION__: JSON.stringify(appVersion), }, resolve: { alias: { "@": path.resolve(__dirname, "./src"), }, }, server: { host: true, proxy: { "/api": { target: process.env.VITE_API_URL, changeOrigin: true, ws: true, }, }, }, }; });