You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vite构建时如何压缩public目录下的JSON文件且不转为JS

解决Vite项目中JSON静态文件仅压缩格式不转JS的问题

方案1:用jq命令行工具直接压缩(简单快速)

jq是专门处理JSON的工具,能直接压缩空格、制表符和换行符,输出纯JSON文件,不会转成JS模块。

先安装jq(按需选择):

  • macOS:brew install jq
  • Linux:sudo apt install jq
  • Windows:通过Chocolatey或官网下载安装

执行以下命令,遍历public/data下的所有JSON文件并压缩到dist对应目录:

mkdir -p dist/public/data
for file in public/data/*.json; do
  jq -c . "$file" > "dist/public/data/$(basename "$file")"
done

注:-c参数表示以紧凑格式输出,仅保留JSON结构,去除所有冗余空白字符。

方案2:修改esbuild命令,强制输出纯JSON

esbuild默认会把JSON转成JS模块,添加以下参数即可输出原扩展名的压缩后JSON文件:

esbuild public/data/*.json --outdir=dist/public/data --allow-overwrite --minify --bundle=false --loader:.json=json --out-extension:.json=.json

参数说明:

  • --bundle=false:禁用打包,避免将JSON转为模块
  • --loader:.json=json:指定JSON文件的处理方式为纯JSON
  • --out-extension:.json=.json:强制输出文件扩展名保持为.json

方案3:在Vite配置中添加自定义插件,构建时自动处理

如果希望Vite构建时自动完成压缩操作,无需手动执行命令,可在vite.config.js中添加如下插件:

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import fs from 'fs'
import path from 'path'
import { minify } from 'jsonc-parser'

export default defineConfig({
  plugins: [
    vue(),
    {
      name: 'compress-json',
      enforce: 'post',
      async writeBundle(options) {
        const srcDir = path.resolve(__dirname, 'public/data')
        const destDir = path.resolve(options.dir, 'public/data')
        
        // 确保目标目录存在
        if (!fs.existsSync(destDir)) {
          fs.mkdirSync(destDir, { recursive: true })
        }
        
        // 遍历并处理所有JSON文件
        const files = fs.readdirSync(srcDir).filter(file => file.endsWith('.json'))
        for (const file of files) {
          const srcPath = path.join(srcDir, file)
          const destPath = path.join(destDir, file)
          const content = fs.readFileSync(srcPath, 'utf-8')
          const minified = minify(content, {})
          fs.writeFileSync(destPath, minified, 'utf-8')
        }
      }
    }
  ]
})

先安装依赖:

npm install jsonc-parser --save-dev

之后执行vite build时,插件会自动读取public/data下的JSON文件,压缩后输出到dist对应目录,运行时可正常通过fetch按需获取。

内容的提问来源于stack exchange,提问作者Talleyran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 15:46:00