Правильный способ определения ContextType в NexusJS при использовании NextJS

#typescript #webpack #graphql #next.js #nexus-prisma

#typescript #webpack #graphql #next.js #nexus-prisma

Вопрос:

Я пытаюсь заставить Prisma и Nexus работать с NextJS, но у меня возникли некоторые проблемы с определением ContextType в схеме GraphQL.

Я определяю схему следующим образом:

 export const schema = makeSchema({
  types: [Query, User, Mutation],
  contextType: {
    module: require.resolve("./graphql/context"),
    export: "Context",
  },
  plugins: [nexusPrisma({ experimentalCRUD: true })],
  outputs: {
    typegen: path.join(process.cwd(), "generated", "nexus-typegen.ts"),
    schema: path.join(process.cwd(), "generated", "schema.graphql"),
  },
});
 

Ошибка возникает при запуске сервера разработки с помощью running npm run dev . Ошибка заключается в следующем:

 Module not found: Can't resolve './graphql/context'
  46 |   types: [Query, User, Mutation],
  47 |   contextType: {
> 48 |     module: require.resolve("./graphql/context"),
     |            ^
  49 |     export: "Context",
  50 |   },
  51 |   plugins: [nexusPrisma({ experimentalCRUD: true })],
 

Это context.ts файл:

 import { PrismaClient } from "@prisma/client";

const prisma = new PrismaClient();

export interface Context {
  prisma: PrismaClient;
}

export function createContext(): Context {
  return { prisma };
}
 

Мои зависимости таковы:

   "dependencies": {
    "@prisma/client": "^2.13.1",
    "apollo-server-micro": "^2.19.1",
    "next": "latest",
    "nexus": "^1.0.0",
    "nexus-plugin-prisma": "^0.27.0",
    "react": "^16.12.0",
    "react-dom": "^16.12.0"
  },
  "devDependencies": {
    "@prisma/cli": "^2.13.1",
    "@types/node": "^12.12.21",
    "@types/react": "^16.9.16",
    "@types/react-dom": "^16.9.4",
    "typescript": "^4.1.3"
  },
 

Я пытался найти решение, но пока я застрял. Я думаю, что это может иметь какое-то отношение к NextJS и его конфигурациям Webpack, но я абсолютно ничего о них не знаю, поэтому я действительно не знаю, что попробовать.

Любая помощь приветствуется.

Дерево проекта:

 root
├─ generated
│  ├─ nexus-typegen.ts
│  └─ schema.graphql
├─ graphql
│  ├─ context.ts
│  └─ schema.ts
├─ interfaces
│  └─ index.ts
├─ next-env.d.ts
├─ package-lock.json
├─ package.json
├─ pages
│  ├─ api
│  │  ├─ graphql.ts
├─ prisma
│  └─ schema.prisma
├─ tsconfig.json
 

Ответ №1:

Я думаю, что ошибка в пути, который вы указали для своего модуля. Предполагая, что вы определили схему ./schema.ts , ваш тип контекста должен выглядеть следующим образом, поскольку это относительный путь, который вам нужно указать

 contextType: {
  module: require.resolve("./context"),
  export: "Context",
}
 

Ответ №2:

Этот способ сработал для меня:

   contextType: {
    module: path.join(process.cwd(), "graphql", "context.ts"),
    export: "Context",
  }