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

TypeScript项目导入JSON文件:http.get与require()哪种为首选方式?

关于TypeScript中导入JSON:http.get vs require()的选择

嘿,这个问题得先掰扯清楚你要处理的是本地JSON文件还是远程服务器上的JSON资源——这俩场景的首选方式完全不一样,你看到的两种用法其实对应不同的需求:

一、如果是本地JSON文件:首选ES模块import,其次才是require()

在TypeScript项目里,现在更推荐用标准的ES模块语法来导入本地JSON,而不是require(),原因是ES模块是当前JS/TS的主流规范,类型支持更完善,兼容性也更好。

具体做法:

  1. 先在你的tsconfig.json里开启resolveJsonModule配置:
{
  "compilerOptions": {
    "resolveJsonModule": true,
    "module": "ESNext" // 或者其他ES模块类型
  }
}
  1. 然后直接用import语法导入:
// TypeScript 5.0+ 可以直接这样写
import data from './config.json';

// 或者如果需要明确类型断言,也可以加 assert
import data from './config.json' assert { type: 'json' };

TypeScript会自动推断JSON文件的结构类型,这对类型检查非常友好。

那require()能用吗?

当然可以,但它更适合CommonJS模块环境。如果你的项目还是用CommonJS(比如旧版Node.js项目),require('./data.json')确实很直接,但在ES模块项目里用require会有兼容性问题,而且无法享受TypeScript的自动类型推断(除非你手动声明类型)。

二、如果是远程JSON资源:必须用网络请求(比如http.get/fetch)

这时候require()和ES模块的import都派不上用场——因为它们是用来加载本地文件系统里的模块的,没法直接请求远程服务器上的资源。你看到的http.get用得多的场景,大概率都是在加载远程API返回的JSON数据。

推荐的做法:

  • 在浏览器或者Node.js 18+环境下,更推荐用fetch(语法更简洁):
async function fetchRemoteJson() {
  try {
    const response = await fetch('https://example.com/api/data');
    const data = await response.json();
    console.log(data);
  } catch (error) {
    console.error('请求失败:', error);
  }
}
  • 如果是旧版Node.js(不支持fetch),可以用http.get:
import http from 'http';

http.get('https://example.com/api/data', (res) => {
  let rawData = '';
  res.on('data', (chunk) => { rawData += chunk; });
  res.on('end', () => {
    try {
      const data = JSON.parse(rawData);
      console.log(data);
    } catch (e) {
      console.error('解析失败:', e.message);
    }
  });
}).on('error', (err) => {
  console.error('请求出错:', err.message);
});

总结一下

  • 本地JSON文件:TypeScript项目首选ES模块import(配合resolveJsonModule配置),CommonJS环境可以用require();
  • 远程JSON资源:必须用网络请求,优先选fetch(现代环境),旧版Node.js用http.get。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:59:20