升级Node17后导入JSON文件报ERR_IMPORT_ASSERTION_TYPE_MISSING错误如何解决
修复方案
报错原因
Node.js 17 及更高版本对 ES 模块下的 JSON 导入规则做了对齐ECMAScript规范的调整,仅使用--experimental-json-modules启动标志已经无法满足导入要求,必须搭配导入断言明确声明导入的文件类型,才会触发该报错。
可用修复方式
- 方案1:修改导入语句添加导入断言(最推荐)
直接修改api.ts中的JSON导入代码,添加assert声明即可:
import countryTable from './data/countries.json' assert { type: 'json' };
如果后续将Node版本升级到18及以上,启动命令里的--experimental-json-modules参数可以直接删除,JSON导入在Node 18+已经成为稳定特性,不需要额外实验标志支持。
- 方案2:通过文件读取+JSON解析实现导入(无需调整导入规则)
如果你不想改动ES模块导入相关的代码逻辑,可以改用读取文件后手动解析的方式加载JSON内容:
import fs from 'fs'; const countryTable = JSON.parse(fs.readFileSync(new URL('./data/countries.json', import.meta.url), 'utf-8'));
使用import.meta.url拼接路径是为了避免ES模块环境下__dirname全局变量不可用导致的路径匹配错误。
- 方案3:补充TypeScript配置(仅TypeScript项目需要)
确保你的tsconfig.json中存在以下配置,避免编译阶段出现语法报错:
{ "compilerOptions": { "module": "NodeNext", "moduleResolution": "NodeNext", "resolveJsonModule": true } }
内容的提问来源于stack exchange,提问作者PositiveGuy
相关产品推荐
相关产品推荐

