类型错误 [ERR_IMPORT_ASSERTION_TYPE_MISSING]:模块 "file:///path/to/data.json" 需要类型 "json" 的导入断言



我正在尝试在nodejs中导入JSON。

// tsconfig.json
...
"lib": ["es2022"],
"target": "es2022",
"module": "nodenext",
"moduleResolution": "node",
...
"resolveJsonModule": true,
...
// .swcrc.json
...
"target": "es2022",
...
"module": {
"type": "nodenext",
...

当我编译它并运行"start": "NODE_ENV=production node --es-module-specifier-resolution=node --experimental-json-modules --no-warnings lib/index.js"时,我得到TypeError [ERR_IMPORT_ASSERTION_TYPE_MISSING]: Module "file:///path/to/data.json" needs an import assertion of type "json"

然后加上:

import data from './data.json' assert {type: 'json'}
console.log(data)

然后打开编译后的代码,可以看到:

import data from"./data.json";console.log(data);
//# sourceMappingURL=index.js.map

在这一点上,我想也许是SWC没有编译断言?

我然后运行tsc --emitDeclarationsOnly,我得到Import assertions are not allowed on statements that transpile to commonjs 'require' calls.在这一点上,我不知道为什么在地球上commonjs与它有任何关系,我不使用commonjs在任何地方我?

我也使用节点18。

我做错了什么?我只是想导入json。

编辑:好吧,所以原因TS是打破是因为缺少"include": ["src/**/*.ts", "src/**/*.json", "types.d.ts"],。添加后,它现在工作。不幸的是,SWC仍然给出相同的错误,所以我不能运行它。

终于想通了。在.swcrc中有一个实验性选项。Json,允许您告诉它保留断言。

// .swcrc.json
...
"jsc": {
"experimental": {
"keepImportAssertions": true
}
}