feat: compress dist to gz
This commit is contained in:
+43
-1
@@ -3,6 +3,45 @@ import vue from '@vitejs/plugin-vue'
|
||||
import tailwindcss from '@tailwindcss/vite'
|
||||
import { viteStaticCopy } from 'vite-plugin-static-copy'
|
||||
import { fileURLToPath, URL } from 'node:url'
|
||||
import { writeFileSync, readFileSync, readdirSync, statSync, existsSync, unlinkSync } from 'node:fs'
|
||||
import { join, resolve } from 'node:path'
|
||||
import { gzipSync } from 'node:zlib'
|
||||
|
||||
// Simple inline compression plugin to avoid extra dependencies
|
||||
const compressionPlugin = () => ({
|
||||
name: 'compression-plugin',
|
||||
apply: 'build',
|
||||
closeBundle: {
|
||||
order: 'post',
|
||||
handler: async () => {
|
||||
const distDir = resolve(process.cwd(), 'dist')
|
||||
if (!existsSync(distDir)) return
|
||||
|
||||
const compressDir = (dir: string) => {
|
||||
const files = readdirSync(dir)
|
||||
for (const file of files) {
|
||||
const filePath = join(dir, file)
|
||||
const stat = statSync(filePath)
|
||||
if (stat.isDirectory()) {
|
||||
compressDir(filePath)
|
||||
} else if (file.match(/\.(js|css|html|svg|json|vs)$/) && !file.endsWith('.gz')) {
|
||||
try {
|
||||
const content = readFileSync(filePath)
|
||||
if (content.length < 1024) continue // Don't compress very small files
|
||||
const gzipped = gzipSync(content, { level: 9 })
|
||||
writeFileSync(`${filePath}.gz`, gzipped)
|
||||
// Remove original file after successful compression to save space in binary
|
||||
unlinkSync(filePath)
|
||||
} catch (e) {
|
||||
console.error(`Compression failed for ${file}:`, e)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
compressDir(distDir)
|
||||
}
|
||||
}
|
||||
} as const)
|
||||
|
||||
export default defineConfig({
|
||||
plugins: [
|
||||
@@ -15,7 +54,8 @@ export default defineConfig({
|
||||
dest: 'assets'
|
||||
}
|
||||
]
|
||||
})
|
||||
}),
|
||||
compressionPlugin()
|
||||
],
|
||||
resolve: {
|
||||
alias: {
|
||||
@@ -39,6 +79,8 @@ export default defineConfig({
|
||||
// 浏览器会根据当前页面 URL 解析相对路径
|
||||
base: './',
|
||||
build: {
|
||||
reportCompressedSize: true,
|
||||
sourcemap: false,
|
||||
rollupOptions: {
|
||||
output: {
|
||||
// 防止生成以 _ 开头的文件,导致被 Cloudflare Pages 或 Github Pages 等静态托管平台拦截并降级返回 HTML
|
||||
|
||||
Reference in New Issue
Block a user