[Node.js] Prismaのimportエラーでハマった

npm install prisma --save-dev
npx prisma init --datasource-provider sqlite --output ../generated/prisma
cat <<EOF >> prisma/schema.prisma
model User {
  id Int @id @default(autoincrement())
  name String
}
EOF
npx prisma migrate dev --name init

上記のようにCLIインストール、スキーマ定義、migrationまで実行した後、

npm install @prisma/client

でクライアントをインストールしたのに、

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

このソースをnpx tscでコンパイルするとこんなエラーが出てしまう。

Module '"@prisma/client"' has no exported member 'PrismaClient'. 

理由はよくわかりませんが、こちらを参考に以下を実行したら解決しました。

rm -rf node_modules
npm install
npx prisma generate

この後、npx tscでコンパイルすると成功します。ちなみにtsconfig.jsonは以下のようにしてました。

{
  // Visit https://aka.ms/tsconfig to read more about this file
  "compilerOptions": {
    // File Layout
    "rootDir": "./src",
    "outDir": "./dist",

    // Environment Settings
    // See also https://aka.ms/tsconfig/module
    "module": "esnext",
    "target": "es2020",
    "types": [],

    // Other Outputs
    "sourceMap": true,
    "declaration": true,
    "declarationMap": true,

    // Stricter Typechecking Options
    "noUncheckedIndexedAccess": true,
    "exactOptionalPropertyTypes": true,

    // Recommended Options
    "strict": true,
    "jsx": "react-jsx",
    "verbatimModuleSyntax": true,
    "isolatedModules": true,
    "noUncheckedSideEffectImports": true,
    "moduleDetection": "force",
    "skipLibCheck": true,
    "moduleResolution": "node",
  },
  "include":["./src/**/*.ts"]
}

しかし、node dist/index.jsで実行してみると、以下のエラーが出ました。

throw new Error('@prisma/client did not initialize yet. Please run "prisma generate" and try to import it again.');

こちらによると、generateの出力先をデフォルトから変更した場合、importする方も変更が必要になるとのこと。

import { PrismaClient } from '../generated/prisma/index.js';

ようやくこれで動きました。

Copied title and URL