【问题标题】:Module import failures in Apollo ServerApollo Server 中的模块导入失败
【发布时间】:2023-02-03 04:41:03
【问题描述】:

将 Apollo Server 导入基于 Typescript 的 Node.js 应用程序后,我收到了无穷无尽的错误消息。 (见下面的截图)

似乎 Apollo 在 graphql 依赖中找不到任何东西。它必须是 Typescript 设置,但它是什么?

这是我的tsconfig.js

{
  "compilerOptions": {
    "target": "ES2022",
    "lib": [
      "ES2022"
    ],
    "module": "CommonJS",
    "moduleResolution": "node",
    "esModuleInterop": true,
    "outDir": "dist",
    "sourceMap": true,
    "allowSyntheticDefaultImports": true,
    "types": ["node"],
    "baseUrl": "./src",
    "typeRoots": [
      "src/customTypings",
      "node_modules/@types"
    ],
  },
  "files": [
    "./node_modules/@types/mocha/index.d.ts",
    // "./node_modules/@types/node/index.d.ts"
  ],
  "include": [
    "src/**/*.ts",
    "src/**/*.json",
    "src/**/*.css",
    "src/**/*.map",
    "src/**/*.js",
    "src/**/*.svg",
    "src/public/**/*",
  ],
  "exclude": [
    "node_modules"
  ]
}

【问题讨论】:

  • 我建立了一个新的Node项目,如果我在tsconfig.json中指定baseURLpaths,似乎会出现错误。值是多少并不重要。

标签: typescript apollo-server typescript-types


【解决方案1】:

整天无人接听,怎么办?这个地方以前比较活跃!无论如何,这是解决方案。

  1. tsconfig.json 添加这些设置:
    "lib": ["ES2022"],
    "target": "ES2022",
    "module": "CommonJS",
    "moduleResolution": "node",
    "esModuleInterop": true,
    "baseUrl": ".",
    "types": ["node"],
    

    这违背了 Apollo 自己的文档,他们在文档中建议使用 ESnext 但不要听他们的。此外,baseURL 必须是 "." 因为任何其他设置都会破坏 Apollo。别问我为什么,我没研究过。

    1. 安装tsc-alias,这是一个方便的实用程序,可将 Typescript 路径转换为构建中的绝对路径。您的 start 脚​​本可能如下所示:
    "start": "tsc && tsc-alias --f && node dist/
    

    您需要 --f 标志来生成完整的文件名,带有扩展名。

    1. 不要在package.json中设置"type": "module"!这再次与阿波罗的建议相反。

【讨论】:

    猜你喜欢
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-03
    相关资源
    最近更新 更多