开发者问题收集

Graphql codegen 始终是未知类型

2023-05-29
1627

我正在 SvelteKit 项目中工作,想要使用 gql codegen,但所有查询都输入为未知。

Ts 文件:

import { graphql } from '$lib/gql/index.js';

export const getPostById = graphql(`
    query GET_ARTICLE($id: bigint!) {
        articles_by_pk(id: $id) {
            content
            created_at
            slug
            updated_at
            title
        }
    }
`);

codegen.ts

import type { CodegenConfig } from '@graphql-codegen/cli';

const config: CodegenConfig = {
  overwrite: true,
  schema: "https:...myap",
  debug: true,
  verbose:true,
  watch:true,
  ignoreNoDocuments: true,
  emitLegacyCommonJSImports: false,
  documents:["./src/**/*.svelte", "./src/**/*.ts"],
  generates: {
    "src/lib/gql/": {
      preset: 'client',
      plugins: []
    },
    "./graphql.schema.json": {
      plugins: ["introspection"]
    }
  }
};

export default config;

gql.ts 文件中的 const documents = []; 为空(我认为它不应该是空的)。

package.json 脚本包括: "codegen": "graphql-codegen-esm --config codegen.ts"

运行脚本不会引发任何错误。我不知道从哪里开始查找。

2个回答

我遇到了完全相同的问题,但使用的是 React。解决方案如下: codegen.ts 中有一个 documents 属性。它显示了查询和突变的路径。如果 Codegen 找不到您的查询和突变文件,它不会抛出任何错误(不幸的是)。它只是默默地生成空类型,而您花时间试图弄清楚为什么类型是“未知的”。 我的查询和突变在另一个文件夹中,因此 Codegen 找不到它们。我更改了 documents 中的路径,这有帮助。

Black Beard
2023-09-22

我遇到了同样的问题。通过命名查询解决了这个问题。不要将它们保留为匿名

query GetCustomers {
  customers {
    id
  }
}
bazi
2023-10-04