我正在尝试在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
}
}