#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",
}