🙉
Next.js Prisma TypeScript で Seed作成するときに詰まった
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.json
のisolatedModules
がtrue
になっているのではないでしょうか.Next.jsではこの設定がデフォルトでtrue
なのである.
とはいえ,Seed作成のスクリプトのためだけにtsconfig.json
のisolatedModules
をfalse
にするのはちょっとあれなので,実行するときに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
ちょうど詰まっていたので、とても参考になりました。
ありがとうございます。
ドキュメントが更新された感じですかね?
ありがとうございます!