fluidd
/
vite.config.ts
166 строк · 4.0 Кб
1/// <reference types="vitest" />
2
3import { defineConfig } from 'vite'
4import vue from '@vitejs/plugin-vue2'
5import { VitePWA } from 'vite-plugin-pwa'
6import Components from 'unplugin-vue-components/vite'
7import { VuetifyResolver } from 'unplugin-vue-components/resolvers'
8import path from 'path'
9import content from '@originjs/vite-plugin-content'
10import monacoEditorPluginModule from 'vite-plugin-monaco-editor'
11import checker from 'vite-plugin-checker'
12import version from './vite.config.inject-version'
13
14// Fix for incorrect typings on vite-plugin-monaco-editor
15const isObjectWithDefaultFunction = (module: unknown): module is { default: typeof monacoEditorPluginModule } => (
16module != null &&
17typeof module === 'object' &&
18'default' in module &&
19typeof module.default === 'function'
20)
21
22const monacoEditorPlugin = isObjectWithDefaultFunction(monacoEditorPluginModule)
23? monacoEditorPluginModule.default
24: monacoEditorPluginModule
25
26export default defineConfig({
27plugins: [
28VitePWA({
29srcDir: 'src',
30filename: 'sw.ts',
31strategies: 'injectManifest',
32includeAssets: [
33'**/*.svg',
34'**/*.png',
35'**/*.ico',
36'editor.theme.json'
37],
38injectManifest: {
39globPatterns: [
40'**/*.{js,css,html,ttf,woff,woff2,wasm}'
41],
42maximumFileSizeToCacheInBytes: 4 * 1024 ** 2
43},
44manifest: {
45name: 'fluidd',
46short_name: 'fluidd',
47description: 'The Klipper web interface for managing your 3d printer',
48theme_color: '#2196F3',
49background_color: '#000000',
50icons: [
51{
52src: 'img/icons/android-chrome-192x192.png',
53sizes: '192x192',
54type: 'image/png'
55},
56{
57src: 'img/icons/android-chrome-512x512.png',
58sizes: '512x512',
59type: 'image/png'
60},
61{
62src: 'img/icons/android-chrome-maskable-192x192.png',
63sizes: '192x192',
64type: 'image/png',
65purpose: 'maskable'
66},
67{
68src: 'img/icons/android-chrome-maskable-512x512.png',
69sizes: '512x512',
70type: 'image/png',
71purpose: 'maskable'
72}
73],
74shortcuts: [
75{
76name: 'Configuration',
77url: '#/configure',
78icons: [
79{
80src: 'img/icons/shortcut-configuration-96x96.png',
81sizes: '96x96',
82type: 'image/png'
83}
84]
85},
86{
87name: 'Settings',
88url: '#/settings',
89icons: [
90{
91src: 'img/icons/shortcut-settings-96x96.png',
92sizes: '96x96',
93type: 'image/png'
94}
95]
96}
97]
98},
99devOptions: {
100enabled: true,
101type: 'module',
102navigateFallback: 'index.html'
103}
104}),
105vue(),
106version(),
107content(),
108monacoEditorPlugin({
109languageWorkers: ['editorWorkerService', 'json', 'css']
110}),
111checker({
112vueTsc: {
113tsconfigPath: path.resolve(__dirname, './tsconfig.app.json')
114}
115}),
116Components({
117dts: true,
118dirs: [
119'src/components/common',
120'src/components/layout',
121'src/components/ui'
122],
123resolvers: [
124VuetifyResolver()
125]
126})
127],
128
129css: {
130preprocessorOptions: {
131css: { charset: false },
132scss: {
133additionalData: '@import "@/scss/variables";\n'
134},
135sass: {
136additionalData: '@import "@/scss/variables.scss"\n'
137}
138}
139},
140
141envPrefix: 'VUE_',
142
143resolve: {
144alias: {
145'@': path.resolve(__dirname, './src')
146}
147},
148
149test: {
150globals: true,
151environment: 'jsdom',
152setupFiles: [
153'./tests/unit/setup.ts'
154],
155alias: [
156{ find: /^vue$/, replacement: 'vue/dist/vue.runtime.common.js' }
157]
158},
159
160base: './',
161
162server: {
163host: '0.0.0.0',
164port: 8080
165}
166})
167