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

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.js
  • generated_files目录不会被复制到dist中
  • 编译后的dist/validation.js中,require路径依然是../generated_files/validation.json,该路径会指向项目根目录下的generated_files/validation.json,后续更新JSON文件无需重新编译TS,直接读取最新内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 22:00:38