🙉

Next.js Prisma TypeScript で Seed作成するときに詰まった

2022/03/20に公開3

Next.js Prisma TypeScript で Seed作成するときに詰まった

詰まって,ムカついて,理解して,喜んだから殴り書く.
ゴリ押しな気がしていて,他に良い方法があったら知りたいです.

Next.js Prisma TypeScriptでSeed作成すると何が詰まるのか?

通常のSeed作成

prisma/seed.jsにDBの全削除と初期値の保存のコードを書く→node prisma/seed.jsでスクリプトが実行されてSeed作成できる.イェイ.

TypeScriptで同様に

prisma/seed.tsにDBの全削除と初期値の保存のコードを書く→ts-node prisma/seed.jsでスクリプトが実行されてSeed作成できる.できないです😡

実際に起きた様々なエラー

私は,こんなエラーたちを巡りました.

Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for ...
error TS1208: 'seed.ts' cannot be compiled under **'--isolatedModules'**
because it is considered a global script file. Add an import, export,
or an empty 'export {}' statement to make it a module.

知識なさすぎてどれも「は?」です.

一応色々調べて勉強になりました.

解決のヒントとなったのは**'--isolatedModules'**の部分でした.

原因

おそらく多くの場合は,tsconfig.jsonisolatedModulestrueになっているのではないでしょうか.Next.jsではこの設定がデフォルトでtrueなのである.

とはいえ,Seed作成のスクリプトのためだけにtsconfig.jsonisolatedModulesfalseにするのはちょっとあれなので,実行するときにoptionを指定してts-nodeを実行したいですよね.

解決方法

こいつを実行すればできた.

ts-node --compilerOptions '{"isolatedModules":false}' prisma/seed.ts

package.jsonのscriptsに加える場合はこんな感じですね.

"seed": "ts-node --compilerOptions '{\"isolatedModules\":false}' prisma/seed.ts"

また,prisma/seed.tsが自動チェックのエラーに引っかからないようにexcludeして起きましょう.

"exclude": ["prisma/seed.ts"]

Discussion

takataka

ちょうど詰まっていたので、とても参考になりました。
ありがとうございます。