TypeScript导入JSON文件时避免编译复制的需求与问题
问题描述
我有一个用于表单验证的JSON配置文件,由基础文件生成,需要同步用于前后端验证以保证规则一致。
期望的文件结构:
| |-dist |-validation.js |-generated_files |-validation.json |-src |-validation.ts
src/validation.ts代码:
import validationObject from '../generated_files/validation.json'
期望编译后的dist/validation.js代码:
const uppeak_json_1 = __importDefault(require("../generated_files/validation.json"));
但实际编译后文件结构变成了这样:
| |-dist |-generated_files |-validation.json |-src |-validation.js |-generated_files |-validation.json |-src |-validation.ts
编译后的dist/src/validation.js路径还是../generated_files/validation.json,虽然能正常运行,但我希望无需重新编译TypeScript就能更新JSON文件,不想复制generated_files到dist,也不想移动dist里的文件,而是让TS编译时不复制JSON,直接指向原文件。
解决方案
1. 修改tsconfig.json配置
调整编译输出路径并禁止复制JSON文件:
{ "compilerOptions": { "target": "ESNext", // 根据项目需求调整目标版本 "module": "CommonJS", // 匹配当前编译输出的模块格式 "rootDir": "./src", // 指定TS源码根目录,编译后直接输出到outDir根目录,不保留src子结构 "outDir": "./dist", // 指定编译产物输出目录 "resolveJsonModule": true, // 允许导入JSON文件 "esModuleInterop": true, // 兼容CommonJS模块导入方式 "strict": true // 可选,开启严格模式 }, "exclude": ["node_modules", "dist", "generated_files"] // 排除generated_files,TS编译时不会复制该目录下的文件 }
2. 验证效果
执行TS编译命令后,会得到你期望的文件结构:
src/validation.ts直接编译为dist/validation.jsgenerated_files目录不会被复制到dist中- 编译后的
dist/validation.js中,require路径依然是../generated_files/validation.json,该路径会指向项目根目录下的generated_files/validation.json,后续更新JSON文件无需重新编译TS,直接读取最新内容。
内容的提问来源于stack exchange,提问作者Sam Dean
相关产品推荐
相关产品推荐

