如何阻止tsc编译时格式化JSON文件?
解决TSC构建时格式化JSON文件的问题
我有一个自动生成的大型复杂JSON文件(无需人工干预),源目录里是无空格的单行格式(大小81k):
{"ver":{"maj":1,"min":0,"uri":"goui.net/phonenumbers/simple/validation_only","ver":1},"typ":[252,253],"svm":3, ...
但运行tsc -b构建后,dist/目录里的该文件被自动添加空格格式化:
{ "ver": { "maj": 1, "min": 0, "uri": "goui.net/phonenumbers/simple/validation_only", "ver": 1 }, "typ": [252, 253], "svm": 3, ...
文件大小增加了约20k,我希望避免这种情况(gzip压缩后的大小差异我不在意),想让tsc停止修改这类本该直接复制的文件。
核心结论:TypeScript无内置配置可禁用JSON格式化
目前TypeScript编译器没有提供配置选项,能让它原样复制JSON文件。当你在tsconfig.json的include中包含*.json,且开启resolveJsonModule时,tsc会解析JSON内容,然后以格式化后的结构重新输出,这是默认行为,没有开关能改变。
替代方案:手动复制JSON文件(Windows环境)
要保留JSON的原始格式,你需要让tsc不再处理该文件,改用复制命令将源文件直接同步到dist目录:
修改tsconfig.json
从include数组中移除"*.json",避免tsc再处理这些文件:{ "extends": "../tsconfig.json", "include": [ "*" // 去掉"*.json" ], "compilerOptions": { "rootDir": "./", "outDir": "../dist", "composite": true } }使用Windows命令行复制
- 单个文件复制:
copy "你的源文件路径\file.json" "dist\file.json" /Y/Y参数表示覆盖目标文件时不弹出确认提示。 - 批量复制所有JSON文件:
xcopy "你的源目录\*.json" "dist\" /Y /I/I参数表示如果目标目录不存在则自动创建。
- 单个文件复制:
整合到构建脚本
把复制命令加到package.json的scripts里,这样执行构建时会自动完成复制:{ "scripts": { "build": "tsc -b && copy \"src\\file.json\" \"dist\\file.json\" /Y" } }之后运行
npm run build就会先执行tsc构建,再复制JSON文件到dist目录。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

