-
Notifications
You must be signed in to change notification settings - Fork 2
/
vite.config.ts
75 lines (67 loc) · 2.09 KB
/
vite.config.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
// Copyright (c) 2023 Drew Edwards
// This file is part of KanjiSchool under AGPL-3.0.
// Full details: https://github.com/Lemmmy/KanjiSchool/blob/master/LICENSE
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react-swc";
import mkcert from "vite-plugin-mkcert";
import { VitePWA } from "vite-plugin-pwa";
import { viteExternalsPlugin } from "vite-plugin-externals";
import fs from "fs";
import path from "path";
import { execSync } from "child_process";
/** Convert path aliases in tsconfig.extend.json to Vite resolution aliases */
function parseTsAliases() {
const tsconfig = JSON.parse(
fs.readFileSync(path.resolve(__dirname, "tsconfig.extend.json"), "utf-8")
);
const aliases = tsconfig.compilerOptions.paths;
const baseUrl = tsconfig.compilerOptions.baseUrl;
const out = {};
for (const alias in aliases) {
const aliasPath = aliases[alias][0];
const src = alias.replace("/*", "");
out[src] = path.resolve(__dirname, baseUrl, aliasPath.replace("/*", ""));
}
return out;
}
// Inject the git version into the build
const gitVersion = execSync("git describe --always --tags").toString().trim();
process.env.VITE_GIT_VERSION = gitVersion;
// https://vitejs.dev/config/
export default defineConfig({
resolve: {
alias: {
...parseTsAliases(),
},
},
plugins: [
react(),
mkcert(),
viteExternalsPlugin({
"resize-observer-polyfill": "ResizeObserver", // Only needed for IE support, which we don't
}),
VitePWA({
registerType: "prompt",
filename: "service-worker.js",
workbox: {
runtimeCaching: [
// Cache the Google Fonts stylesheets
{
urlPattern: /^https:\/\/fonts.(?:googleapis|gstatic).com\/(.*)/,
handler: "CacheFirst",
options: {
cacheName: "google-fonts",
expiration: {
maxEntries: 150,
maxAgeSeconds: 60 * 60 * 24 * 30 // 30 days
},
cacheableResponse: {
statuses: [0, 200]
}
}
}
]
}
})
],
});