【问题标题】:has no exported member 'graphqlKoa' and have tried all the config options没有导出成员 'graphqlKoa' 并尝试了所有配置选项
【发布时间】:2019-02-23 10:10:27
【问题描述】:

我一直在纠结这个问题,我正在尝试使用 graphql 设置一个打字稿 koa 后端,但一直收到此错误。

[nodemon] starting `ts-node --inspect -r tsconfig-paths/register ./src/server.ts`

/home/wouter/dev/project/node_modules/ts-node/src/index.ts:261
    return new TSError(diagnosticText, diagnosticCodes)
           ^
TSError: ⨯ Unable to compile TypeScript:
src/routes.ts(4,10): error TS2305: Module '"/home/wouter/dev/project/node_modules/apollo-server-koa/dist/index"' has no exported member 'graphqlKoa'.
src/routes.ts(4,22): error TS2305: Module '"/home/wouter/dev/project/node_modules/apollo-server-koa/dist/index"' has no exported member 'graphiqlKoa'.
src/routes.ts(6,24): error TS2307: Cannot find module 'graphql/schema'.

    at createTSError (/home/wouter/dev/project/node_modules/ts-node/src/index.ts:261:12)
    at getOutput (/home/wouter/dev/project/node_modules/ts-node/src/index.ts:367:40)
    at Object.compile (/home/wouter/dev/project/node_modules/ts-node/src/index.ts:558:11)
    at Module.m._compile (/home/wouter/dev/project/node_modules/ts-node/src/index.ts:439:43)
    at Module._extensions..js (internal/modules/cjs/loader.js:665:10)
    at Object.require.extensions.(anonymous function) [as .ts] (/home/wouter/dev/project/node_modules/ts-node/src/index.ts:442:12)
    at Module.load (internal/modules/cjs/loader.js:566:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:506:12)
    at Function.Module._load (internal/modules/cjs/loader.js:498:3)
    at Module.require (internal/modules/cjs/loader.js:598:17)
[nodemon] app crashed - waiting for file changes before starting...

这是 routes.ts 文件

import Router from 'koa-router';
import koaBody from 'koa-bodyparser';

import { graphqlKoa, graphiqlKoa } from 'apollo-server-koa';

import { schema } from 'graphql/schema';


export const routes = new Router();

// API entrypoint
const apiEntrypointPath = '/graphql';
const graphQlOpts = graphqlKoa({
  schema,
});

routes.get(apiEntrypointPath, graphQlOpts);
routes.post(apiEntrypointPath, koaBody(), graphQlOpts);

// GraphiQL entrypoint
routes.get('/graphiql', graphiqlKoa({ endpointURL: apiEntrypointPath }));

这是我的 tsconfig.json

{
  "compileOnSave": false,
  "compilerOptions": {
      "target": "es6",
      "strict": false,
      "module": "commonjs",
      "moduleResolution": "node",
      "noImplicitAny": false,
      "emitDecoratorMetadata": true,
      "allowSyntheticDefaultImports": true,
      "experimentalDecorators": true,
      "esModuleInterop": true,
      "sourceMap": true,
      "baseUrl": "./src"

    },
    "exclude": [
      "node_modules",
      "client",
      "**/*.spec.ts"
    ]
}

我能找到的最多信息是我需要将“esModuleInterop”更改为 true,但这无济于事。我也尝试添加 skipLibCheck 但仍然没有运气。据我所知,我确实安装了正确的类型,所以我想知道发生了什么?

【问题讨论】:

    标签: typescript graphql koa


    【解决方案1】:

    正如错误所暗示的,apollo-server-koa 模块没有名为 graphqlKoa 的导出。从 2.0 版开始,Apollo Server 的 API 发生了巨大变化。如果您使用的是更新版本的apollo-server-koa,您的代码应该看起来更像这样:

    import Koa from 'koa'
    import { ApolloServer } from 'apollo-server-koa'
    import { typeDefs, resolvers } from './somewhere' 
    
    const server = new ApolloServer({ typeDefs, resolvers })
    const app = new Koa()
    
    server.applyMiddleware({ app });
    app.listen({ port: 4000 }, () =>
      console.log(`Server ready at http://localhost:4000${server.graphqlPath}`),
    )
    

    如果您不使用任何其他路由,您也可以使用 apollo-server 包来设置“独立”服务器:

    import { ApolloServer } from 'apollo-server'
    import { typeDefs, resolvers } from './somewhere' 
    
    const server = new ApolloServer({ typeDefs, resolvers })
    
    server.listen().then(({ url }) => {
      console.log(`? Server ready at ${url}`);
    });
    

    【讨论】:

    • 行得通!谢谢,应该看看我自己的api。
    猜你喜欢
    • 2021-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-06
    • 2018-10-19
    • 2017-01-29
    • 2018-12-22
    • 2017-07-07
    相关资源
    最近更新 更多