webapp/vite.config.ts

131 lines
3.2 KiB
TypeScript
Raw Normal View History

2023-11-04 13:09:15 +00:00
import ssrPlugin from 'vike/plugin'
import { defineConfig } from 'vite'
import mkcert from 'vite-plugin-mkcert'
2024-05-05 16:19:14 +00:00
import { nodePolyfills } from 'vite-plugin-node-polyfills';
import sassDts from 'vite-plugin-sass-dts'
import solidPlugin from 'vite-plugin-solid'
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) =>
2024-02-04 10:09:26 +00:00
`${getDevCssClassPrefix(filename)}__${name}`
export default defineConfig(({ mode, command }) => {
const plugins = [
solidPlugin({ ssr: true }),
ssrPlugin({ includeAssetsImportedByServer: true }),
sassDts(),
cssModuleHMR(),
2024-05-05 16:19:14 +00:00
nodePolyfills({
include: ['path', 'stream', 'util'],
exclude: ['http'],
globals: {
Buffer: true,
//global: true,
//process: true,
},
overrides: {
fs: 'memfs',
},
protocolImports: true,
}),
]
if (command === 'serve') {
plugins.push(mkcert())
}
const isDev = mode === 'development'
2023-02-17 09:21:02 +00:00
return {
envPrefix: 'PUBLIC_',
plugins,
2023-02-17 09:21:02 +00:00
server: {
2024-02-06 14:34:27 +00:00
cors: isDev,
2024-02-15 17:45:02 +00:00
https: {},
port: 3000,
2023-02-17 09:21:02 +00:00
},
css: {
devSourcemap: isDev,
2023-02-17 09:21:02 +00:00
preprocessorOptions: {
scss: { additionalData: '@import "src/styles/imports";\n' },
},
modules: {
generateScopedName: isDev ? devGenerateScopedName : '[hash:base64:5]',
},
2023-02-17 09:21:02 +00:00
},
build: {
rollupOptions: {
external: [],
2023-02-17 09:21:02 +00:00
},
2023-05-01 18:32:32 +00:00
chunkSizeWarningLimit: 1024,
target: 'esnext',
},
ssr: {
noExternal: [
'solid-js',
'@nanostores/solid',
'@urql/core',
'wonka',
'solid-popper',
'seroval',
2024-02-15 17:54:55 +00:00
'seroval-plugins',
'seroval-plugins/web',
'@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',
],
},
2023-02-17 09:21:02 +00:00
}
})