apollographql / federation

🌐  Build and scale a single data graph across multiple services with Apollo's federation gateway.
https://apollographql.com/docs/federation/
Other
661 stars 248 forks source link

Could not run it on Cloudflare Worker with "ApolloGateway" #1918

Open metrue opened 2 years ago

metrue commented 2 years ago

I am trying to deploy it onto Cloudflare Workers, the codes apollo server with gateway looks like following,

const { ApolloServer } = require('apollo-server-cloudflare')
const { ApolloGateway, IntrospectAndCompose } = require('@apollo/gateway')

const {
  graphqlCloudflare,
} = require('apollo-server-cloudflare/dist/cloudflareApollo')

const KVCache = require('../kv-cache')
const PokemonAPI = require('../datasources/pokeapi')
const resolvers = require('../resolvers')
const typeDefs = require('../schema')

const dataSources = () => ({
  pokemonAPI: new PokemonAPI(),
})

const kvCache = { cache: new KVCache() }

const createServer = (graphQLOptions) =>
  new ApolloServer({
    typeDefs,
    resolvers,
    introspection: true,
    dataSources,
    ...(graphQLOptions.kvCache ? kvCache : {}),
  })

const handler = async (request, graphQLOptions) => {
  const server = createServer(graphQLOptions)
  new ApolloServer({
    typeDefs,
    resolvers,
    introspection: true,
    dataSources,
    ...(graphQLOptions.kvCache ? kvCache : {}),
  })
  const gateway = new ApolloGateway({
    supergraphSdl: new IntrospectAndCompose({
      subgraphs: [
        { name: 'giki', url: 'https://api.minghe.me/graphql' },
        // ...additional subgraphs...
      ],
    }),
  })

  await server.start()
  return graphqlCloudflare(() => server.createGraphQLServerOptions(request))(
    request,
  )
}

module.exports = handler

But I got error trying to run it with wrangler,

👀  ./node_modules/@apollo/federation-internals/dist/debug.js
Module not found: Error: Can't resolve 'console' in '/Users/minhuang/Development/Projects/workers-graphql-server/node_modules/@apollo/federation-internals/dist'
resolve 'console' in '/Users/minhuang/Development/Projects/workers-graphql-server/node_modules/@apollo/federation-internals/dist'
  Parsed request is a module
  using description file: /Users/minhuang/Development/Projects/workers-graphql-server/node_modules/@apollo/federation-internals/package.json (relative path: ./dist)
    Field 'browser' doesn't contain a valid alias configuration
    resolve as module
      /Users/minhuang/Development/Projects/workers-graphql-server/node_modules/@apollo/federation-internals/dist/node_modules doesn't exist or is not a directory
      /Users/minhuang/Development/Projects/workers-graphql-server/node_modules/@apollo/federation-internals/node_modules doesn't exist or is not a directory
      /Users/minhuang/Development/Projects/workers-graphql-server/node_modules/@apollo/node_modules doesn't exist or is not a directory
      /Users/minhuang/Development/Projects/workers-graphql-server/node_modules/node_modules doesn't exist or is not a directory
      /Users/minhuang/Development/Projects/node_modules doesn't exist or is not a directory
      /Users/minhuang/Development/node_modules doesn't exist or is not a directory
      /Users/minhuang/node_modules doesn't exist or is not a directory
      /Users/node_modules doesn't exist or is not a directory
      /node_modules doesn't exist or is not a directory
      looking for modules in /Users/minhuang/Development/Projects/workers-graphql-server/node_modules
        using description file: /Users/minhuang/Development/Projects/workers-graphql-server/package.json (relative path: ./node_modules)
          Field 'browser' doesn't contain a valid alias configuration
          using description file: /Users/minhuang/Development/Projects/workers-graphql-server/package.json (relative path: ./node_modules/console)
            no extension
              Field 'browser' doesn't contain a valid alias configuration
              /Users/minhuang/Development/Projects/workers-graphql-server/node_modules/console doesn't exist
            .wasm
              Field 'browser' doesn't contain a valid alias configuration
              /Users/minhuang/Development/Projects/workers-graphql-server/node_modules/console.wasm doesn't exist
            .mjs
              Field 'browser' doesn't contain a valid alias configuration
              /Users/minhuang/Development/Projects/workers-graphql-server/node_modules/console.mjs doesn't exist
            .js
              Field 'browser' doesn't contain a valid alias configuration
              /Users/minhuang/Development/Projects/workers-graphql-server/node_modules/console.js doesn't exist
            .json
              Field 'browser' doesn't contain a valid alias configuration
              /Users/minhuang/Development/Projects/workers-graphql-server/node_modules/console.json doesn't exist
            as directory
              /Users/minhuang/Development/Projects/workers-graphql-server/node_modules/console doesn't exist
[/Users/minhuang/Development/Projects/workers-graphql-server/node_modules/@apollo/federation-internals/dist/node_modules]
[/Users/minhuang/Development/Projects/workers-graphql-server/node_modules/@apollo/federation-internals/node_modules]
[/Users/minhuang/Development/Projects/workers-graphql-server/node_modules/@apollo/node_modules]
[/Users/minhuang/Development/Projects/workers-graphql-server/node_modules/node_modules]
[/Users/minhuang/Development/Projects/node_modules]
[/Users/minhuang/Development/node_modules]
[/Users/minhuang/node_modules]
[/Users/node_modules]
[/node_modules]
[/Users/minhuang/Development/Projects/workers-graphql-server/node_modules/console]
[/Users/minhuang/Development/Projects/workers-graphql-server/node_modules/console.wasm]
[/Users/minhuang/Development/Projects/workers-graphql-server/node_modules/console.mjs]
[/Users/minhuang/Development/Projects/workers-graphql-server/node_modules/console.js]
[/Users/minhuang/Development/Projects/workers-graphql-server/node_modules/console.json]
 @ ./node_modules/@apollo/federation-internals/dist/debug.js 33:25-43
 @ ./node_modules/@apollo/federation-internals/dist/index.js
 @ ./node_modules/@apollo/gateway/dist/index.js
 @ ./src/handlers/apollo.js
 @ ./src/index.js
./node_modules/make-fetch-happen/lib/options.js
Module not found: Error: Can't resolve 'dns' in '/Users/minhuang/Development/Projects/workers-graphql-server/node_modules/make-fetch-happen/lib'
resolve 'dns' in '/Users/minhuang/Development/Projects/workers-graphql-server/node_modules/make-fetch-happen/lib'
  Parsed request is a module
  using description file: /Users/minhuang/Development/Projects/workers-graphql-server/node_modules/make-fetch-happen/package.json (relative path: ./lib)
    Field 'browser' doesn't contain a valid alias configuration
    resolve as module
      /Users/minhuang/Development/Projects/workers-graphql-server/node_modules/make-fetch-happen/lib/node_modules doesn't exist or is not a directory
      /Users/minhuang/Development/Projects/workers-graphql-server/node_modules/node_modules doesn't exist or is not a directory
      /Users/minhuang/Development/Projects/node_modules doesn't exist or is not a directory
      /Users/minhuang/Development/node_modules doesn't exist or is not a directory
      /Users/minhuang/node_modules doesn't exist or is not a directory
      /Users/node_modules doesn't exist or is not a directory
      /node_modules doesn't exist or is not a directory
      looking for modules in /Users/minhuang/Development/Projects/workers-graphql-server/node_modules/make-fetch-happen/node_modules
        using description file: /Users/minhuang/Development/Projects/workers-graphql-server/node_modules/make-fetch-happen/package.json (relative path: ./node_modules)
          Field 'browser' doesn't contain a valid alias configuration
      looking for modules in /Users/minhuang/Development/Projects/workers-graphql-server/node_modules
        using description file: /Users/minhuang/Development/Projects/workers-graphql-server/package.json (relative path: ./node_modules)
          Field 'browser' doesn't contain a valid alias configuration
          using description file: /Users/minhuang/Development/Projects/workers-graphql-server/node_modules/make-fetch-happen/package.json (relative path: ./node_modules/dns)
            no extension
              Field 'browser' doesn't contain a valid alias configuration
          using description file: /Users/minhuang/Development/Projects/workers-graphql-server/package.json (relative path: ./node_modules/dns)
            no extension
              Field 'browser' doesn't contain a valid alias configuration
              /Users/minhuang/Development/Projects/workers-graphql-server/node_modules/make-fetch-happen/node_modules/dns doesn't exist
            .wasm
              Field 'browser' doesn't contain a valid alias configuration
              /Users/minhuang/Development/Projects/workers-graphql-server/node_modules/dns doesn't exist
            .wasm
              Field 'browser' doesn't contain a valid alias configuration
              /Users/minhuang/Development/Projects/workers-graphql-server/node_modules/make-fetch-happen/node_modules/dns.wasm doesn't exist
            .mjs
              Field 'browser' doesn't contain a valid alias configuration
              /Users/minhuang/Development/Projects/workers-graphql-server/node_modules/dns.wasm doesn't exist
            .mjs
              Field 'browser' doesn't contain a valid alias configuration
              /Users/minhuang/Development/Projects/workers-graphql-server/node_modules/make-fetch-happen/node_modules/dns.mjs doesn't exist
            .js
              Field 'browser' doesn't contain a valid alias configuration
              /Users/minhuang/Development/Projects/workers-graphql-server/node_modules/dns.mjs doesn't exist
            .js
              Field 'browser' doesn't contain a valid alias configuration

Does this means apollo federation gateway is not be able to run on Cloudflare Worker environment ?

ItsWendell commented 2 years ago

Would love to see support for this!