NodeJS 如何使用TS 4.8解决ESM / require错误?

kpbwa7wx  于 2023-03-12  发布在  Node.js
关注(0)|答案(1)|浏览(341)

我使用了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。

62o28rlo

62o28rlo1#

因此,我设法解决它的指示,在接受回答这个问题:
Is there a way to combine ES6 imports and commonJS require in TS files?
另外,在tsconfig.json中有"moduleResolution": "node"
不使用"moduleResolution": "node"会导致file-typeprisma软件包出错。

相关问题