我使用了Node.js应用程序和TS 4.8,并且更新了包file-type
,但是现在我的项目编译失败,错误为
[1]const _fileType = /#纯/ _互操作要求通配符(要求(“文件类型”));[1] ^ [1] [1]错误[错误请求ESM]:不支持来自/home/victor/桌面/alytics/dist/routes/index. js的ES模块/home/victor/桌面/alytics/节点_模块/文件类型/index. js的require()。[1]改为将/home/victor/桌面/alytics/dist/routes/index. js中的/home/victor/桌面/alytics/节点_模块/文件类型/index. js的require更改为所有CommonJS模块中可用的动态导入()。
这是我的swc配置:'
{
"jsc": {
"parser": {
"syntax": "typescript",
"tsx": false,
"decorators": true,
"dynamicImport": true
},
"target": "es2020",
"paths": {
"@routes/*": ["./src/routes/*"],
"@middlewares/*": ["./src/middlewares/*"]
},
"baseUrl": "."
},
"module": {
"type": "commonjs"
}
}
'
下面是我的tsconfig:'
{
"compilerOptions": {
"target": "es2020",
"module": "es2020",
"allowJs": true,
"removeComments": true,
"resolveJsonModule": true,
"typeRoots": ["./node_modules/@types"],
"sourceMap": true,
"allowSyntheticDefaultImports": true,
"outDir": "dist",
"strict": true,
"lib": ["es2020"],
"baseUrl": ".",
"forceConsistentCasingInFileNames": true,
"esModuleInterop": true,
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"moduleResolution": "Node",
"skipLibCheck": true,
"paths": {
"@routes/*": ["./src/routes/*"],
"@middlewares/*": ["./src/middlewares/*"]
}
},
"include": ["src/**/*"],
"exclude": ["node_modules"]
}
'
在使用file-type
时:'
import KoaRouter from "@koa/router";
import { Context } from "koa";
import { logger } from "@middlewares/index.js";
import * as FileType from "file-type";
const router = new KoaRouter();
router.get("/", logger, (ctx: Context): void => {
ctx.body = { message: JSON.stringify(FileType) };
});
export default router;
'
据我所知,file-type
包只使用ESM导入,但是,编译后,这个导入转换为require()
。我在他们的库中读到过这个问题,但是这个主题已经关闭,因为TS现在支持ESM。
如何配置我的ts.config以排除此模块转换为require
??
是否有办法仅使用TS配置解决此问题?
我找到了唯一的解决方案-从commonjs转换到ESM(更改type: module
,并将其添加到我的package.json
),但我不想在最后更新我所有的导入添加.js,我也不想将我所有的导入转换到ESM。
1条答案
按热度按时间62o28rlo1#
因此,我设法解决它的指示,在接受回答这个问题:
Is there a way to combine ES6 imports and commonJS require in TS files?
另外,在
tsconfig.json
中有"moduleResolution": "node"
。不使用
"moduleResolution": "node"
会导致file-type
和prisma
软件包出错。