webapp/vite.config.ts
Kosta af49b53a9b
styles HMR fixed, https for local server (#254)
Co-authored-by: Igor Lobanov <igor.lobanov@onetwotrip.com>
2023-10-11 09:53:27 +03:00

114 lines
2.8 KiB
TypeScript

import { defineConfig } from 'vite'
import solidPlugin from 'vite-plugin-solid'
import ssrPlugin from 'vite-plugin-ssr/plugin'
import sassDts from 'vite-plugin-sass-dts'
import mkcert from 'vite-plugin-mkcert'
const cssModuleHMR = () => {
return {
enforce: 'post',
name: 'css-module-hmr',
apply: 'serve',
handleHotUpdate(context) {
const { modules } = context
modules.forEach((module) => {
if (module.id.includes('.module.scss')) {
module.isSelfAccepting = true
}
})
}
}
}
const PATH_PREFIX = '/src/'
const getDevCssClassPrefix = (filename: string): string => {
return filename
.slice(filename.indexOf(PATH_PREFIX) + PATH_PREFIX.length)
.replace('.module.scss', '')
.replaceAll(/[/?\\]/g, '-')
}
const devGenerateScopedName = (name: string, filename: string, _css: string) =>
getDevCssClassPrefix(filename) + '__' + name
export default defineConfig(({ mode, command }) => {
const plugins = [
solidPlugin({ ssr: true }),
ssrPlugin({ includeAssetsImportedByServer: true }),
sassDts(),
cssModuleHMR()
]
if (command === 'serve') {
plugins.push(mkcert())
}
const isDev = mode === 'development'
return {
envPrefix: 'PUBLIC_',
plugins,
server: {
https: true,
port: 3000
},
css: {
devSourcemap: isDev,
preprocessorOptions: {
scss: { additionalData: '@import "src/styles/imports";\n' }
},
modules: {
generateScopedName: isDev ? devGenerateScopedName : '[hash:base64:5]'
}
},
build: {
rollupOptions: {
external: []
},
chunkSizeWarningLimit: 1024,
target: 'esnext'
},
ssr: {
noExternal: [
'solid-js',
'@nanostores/solid',
'@urql/core',
'wonka',
'solid-popper',
'seroval',
'@solid-primitives/share',
'i18next',
'js-cookie',
'@solid-primitives/memo',
'@solid-primitives/media',
'@solid-primitives/storage',
'@solid-primitives/utils',
'@solid-primitives/rootless',
'solid-tiptap',
'@tiptap/extension-document',
'@tiptap/core',
'@tiptap/pm',
'prosemirror-state',
'prosemirror-model',
'prosemirror-transform',
'prosemirror-commands',
'prosemirror-schema-list',
'@tiptap/extension-text',
'@tiptap/extension-paragraph',
'@tiptap/extension-bold',
'@tiptap/extension-italic',
'@tiptap/extension-blockquote',
'@solid-primitives/upload',
'@tiptap/extension-placeholder',
'prosemirror-view',
'@tiptap/extension-link',
'@tiptap/extension-image',
'@tiptap/extension-character-count',
'clsx'
]
}
}
})