watchyourlan/frontend/vite.config.ts
2026-06-23 22:47:12 +08:00

58 lines
1.7 KiB
TypeScript

import { defineConfig } from 'vite'
import solid from 'vite-plugin-solid'
import { copyFileSync, cpSync, mkdirSync, readdirSync, rmSync } from 'node:fs'
import { dirname, resolve } from 'node:path'
import { fileURLToPath } from 'node:url'
const rootDir = dirname(fileURLToPath(import.meta.url))
function copyVendorAssets() {
const vendorDir = resolve(rootDir, 'dist/vendor')
rmSync(vendorDir, { recursive: true, force: true })
mkdirSync(vendorDir, { recursive: true })
const themesDir = resolve(rootDir, 'node_modules/aceberg-bootswatch-fork/dist')
for (const theme of readdirSync(themesDir, { withFileTypes: true })) {
if (!theme.isDirectory()) {
continue
}
const targetDir = resolve(vendorDir, 'aceberg-bootswatch-fork/dist', theme.name)
mkdirSync(targetDir, { recursive: true })
copyFileSync(
resolve(themesDir, theme.name, 'bootstrap.min.css'),
resolve(targetDir, 'bootstrap.min.css'),
)
}
mkdirSync(resolve(vendorDir, 'bootstrap-icons/font'), { recursive: true })
cpSync(
resolve(rootDir, 'node_modules/bootstrap-icons/font/bootstrap-icons.min.css'),
resolve(vendorDir, 'bootstrap-icons/font/bootstrap-icons.min.css'),
)
cpSync(
resolve(rootDir, 'node_modules/bootstrap-icons/font/fonts'),
resolve(vendorDir, 'bootstrap-icons/font/fonts'),
{ recursive: true },
)
}
export default defineConfig({
plugins: [
solid(),
{
name: 'copy-vendor-assets',
closeBundle: copyVendorAssets,
},
],
build: {
rollupOptions: {
output: {
entryFileNames: `assets/[name].js`,
chunkFileNames: `assets/[name].js`,
assetFileNames: `assets/[name].[ext]`
}
}
}
})