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

Node18+SWC+TS环境导入JSON报ERR_IMPORT_ASSERTION_TYPE_MISSING错误

Node.js 18 + TS + SWC ESM模式下导入JSON文件失败修复

问题背景

项目采用ESM规范,基于TypeScript编写、SWC做编译转译,目标运行环境为Node.js 18,目标编译标准ES2022,核心初始配置如下:

tsconfig.json 核心片段

{
  "lib": ["es2022"],
  "target": "es2022",
  "module": "nodenext",
  "moduleResolution": "node",
  "resolveJsonModule": true
}

.swcrc 核心片段

{
  "target": "es2022",
  "module": {
    "type": "nodenext"
  }
}

启动命令

NODE_ENV=production node --es-module-specifier-resolution=node --experimental-json-modules --no-warnings lib/index.js

故障表现

  1. 初始配置下直接编译启动,抛出运行时错误:
TypeError [ERR_IMPORT_ASSERTION_TYPE_MISSING]: Module "file:///path/to/data.json" needs an import assertion of type "json"
  1. 手动给JSON导入语句添加标准导入断言:
import data from './data.json' assert {type: 'json'}
console.log(data)

检查SWC编译产物,发现断言部分被完全擦除,输出代码为:

import data from"./data.json";console.log(data);
//# sourceMappingURL=index.js.map
  1. 运行tsc --emitDeclarationsOnly做类型校验时,最初报错Import assertions are not allowed on statements that transpile to commonjs 'require' calls.,补充tsconfig的include配置为["src/**/*.ts", "src/**/*.json", "types.d.ts"]后该TS报错消失,确认项目未启用CommonJS规范,但SWC编译后依旧丢失导入断言,运行时故障未解决。

修复步骤

  • 第一步:补充SWC解析器配置,开启导入断言支持
    SWC默认不会解析、保留导入断言语法,需要在.swcrc的jsc.parser配置项中开启对应开关,修正后的核心配置如下:
{
  "jsc": {
    "parser": {
      "syntax": "typescript",
      "importAssertions": true
    },
    "target": "es2022"
  },
  "module": {
    "type": "nodenext"
  }
}
  • 第二步:升级SWC到兼容版本
    如果本地使用的@swc/core版本低于1.3.40,先升级到1.3.40以上版本,该版本前存在nodenext模块模式下导入断言被错误擦除的已知bug。
  • 第三步:简化启动命令
    Node.js 18中JSON ESM导入已经是稳定特性,不需要再加--experimental-json-modules实验参数,启动命令可调整为:
"start": "NODE_ENV=production node --es-module-specifier-resolution=node --no-warnings lib/index.js"

完成以上配置后重新编译,产物中会正确保留assert {type: 'json'}断言语句,运行时即可正常导入JSON文件。

注意:不要随意修改module和moduleResolution配置为bundler或commonjs,nodenext模式下TS的校验规则和Node.js原生ESM运行时的要求完全对齐,能避免后续出现其他模块导入兼容问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 20:39:22