Nuxt3でビルド後にprismaの環境変数が読み込めない場合

症状

ビルド後に実行するとprisma/clientでfindUniqueなどのDBアクセスができなくなる。

構成

/
 ├prisma/
 │ └schema.prisma
 └.env
DATABASE_URL = "mysql://{user}:{pass}@{host}:{port}/{db}"
datasource db {
    provider = "mysql"
    url      = env("DATABASE_URL")
}

みたいな構成の場合のお話。

原因

nuxt devnuxt previewではちゃんと動いてたけどなして?

って思って調べてみました。

どうやらNuxt3ではビルド後は.envを読み込まなくなるかららしいですね。

ただしnuxt previewのときだけは読み込む。

なのでビルド後はprismaが.envを読み込めずにいたようです。

解決

.output/server/.envに配置してあげればいいので、ビルド用のnpm scriptを下記のように書き換えれば良さそうです。

"build": "cp node_modules/.prisma/client/package.json node_modules/.prisma && nuxt build && cp .env .output/server/.env",

前半のcp node_modules/.prisma/client/package.json node_modules/.prismaはそもそもビルドができないための修正。

今回の事象は後半のcp .env .output/server/.envで対応。

これでyarn build && yarn startで無事prisma/clientでDBへアクセスできるようになりました。