Prismaで「Cannot find module '@prisma/client'」エラー

TypeScript x Prisma x Express でseed.tsファイルを作成したときに発生した現象。

現象

seed.tsファイルの1行目に以下のエラーが表示される。@prisma/client が見つからないとのこと。

Cannot find module '@prisma/client' or its corresponding type declarations.ts(2307)

seed.ts:

import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();

async function main() {
  const event = await prisma.event.upsert({
    where: { eventId: '6fpnLXWKuBrTsJEmPqHfMhUN928UQVtk3J6GGyEvFBso' },
    update: {},
    create: {
      eventId: '6fpnLXWKuBrTsJEmPqHfMhUN928UQVtk3J6GGyEvFBso',
      prize: 10000000,
    },
  });

  console.log({ event });
}

main()
  .catch((e) => {
    console.error(e);
    process.exit(1);
  })
  .finally(async () => {
    await prisma.$disconnect();
  });

原因

@prisma/client は、 npx prisma migrate や npx prisma db push をすると自動作成されるのだが、今回は migrate をしていなかったため、エラーになっていた。

対応

今回は migrate を実行して解決した。

% npx prisma migrate reset
Environment variables loaded from .env
Prisma schema loaded from prisma/schema.prisma
Datasource "db": SQLite database "dev.db" at "file:./dev.db"

✔ Are you sure you want to reset your database? All data will be lost. … yes

Applying migration `20221231160027_`

Database reset successful

The following migration(s) have been applied:

migrations/
  └─ 20221231160027_/
    └─ migration.sql

Running generate... (Use --skip-generate to skip the generators)

added 2 packages, and audited 370 packages in 4s

20 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities

✔ Generated Prisma Client (4.8.0 | library) to ./node_modules/@prisma/client in 92ms

Running seed command `ts-node prisma/seed.ts` ...
{
  event: {
    id: 1,
    eventId: '6fpnLXWKuBrTsJEmPqHfMhUN928UQVtk3J6GGyEvFBso',
    prize: 10000000
  }
}

🌱  The seed command has been executed.