Files
riwa-ionic/vite.config.ts

108 lines
3.0 KiB
TypeScript

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,
},
},
},
};
});