我尝试为我的react设置codegen,我使用自定义模式加载从我的API端点加载模式,但每次都出错
Failed to load schema from pulse-api:
Failed to load custom loader: codegen_schema_loader.js
Error: Failed to load custom loader: codegen_schema_loader.js
下面是我的codegen配置文件(codegen.ts)
import type { CodegenConfig } from '@graphql-codegen/cli';
const config: CodegenConfig = {
overwrite: true,
schema: [{
'pulse-api': {
loader: './codegen_schema_loader.js',
assumeValidSDL: true,
}
}],
documents: 'src/adapters/worktango/queries/*.graphql',
generates: {
'src/gql/': {
preset: 'client',
plugins: ['typescript', 'typescript-operations', 'typescript-react-apollo'],
},
'./graphql.schema.json': {
plugins: ["introspection"]
}
},
require: ['ts-node/register'],
};
export default config;
这里是自定义模式加载器(codegen_schema_loader.js),与配置文件位于同一文件夹
import { buildClientSchema, getIntrospectionQuery } from "graphql";
import { graphqlUrl } from "./src/config/settings/worktango.settings";
import fetch from 'cross-fetch'
import { tokens } from "./src/adapters";
export default async () => {
const introspectionQuery = getIntrospectionQuery()
const authToken = await tokens.getAccessToken();
const response = await fetch(graphqlUrl, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Access-Token': authToken
},
body: JSON.stringify({ query: introspectionQuery })
})
const data = await response.json()
return buildClientSchema(data.data)
}
我对codegen进程进行了调试分析,发现下面的函数加载器返回null,这是不应该的。看起来像是一个bug,但我不确定,有人知道如何修复这个问题吗?
async function useCustomLoader(loaderPointer, cwd) {
let loader;
if (typeof loaderPointer === 'string') {
loader = await getCustomLoaderByPath(loaderPointer, cwd);
}
else if (typeof loaderPointer === 'function') {
loader = loaderPointer;
}
if (typeof loader !== 'function') {
throw new Error(`Failed to load custom loader: ${loaderPointer}`);
}
return loader;
}
1条答案
按热度按时间r9f1avp51#
我也遇到了同样的问题。如果你看看
useCustomLoader
函数loaderPointer
可以是一个函数。我改变了我的codegen.ts
文件,直接使用我的加载器函数,它现在工作了。绝对看起来像一个bug。将您的
codegen.ts
更改为如下所示