Turborepo NestJS から内部パッケージを参照できない問題の対処方法
Turborepo NestJSから内部パッケージ(Prisma等)を参照できない場合の対処方法を説明します。
Turborepo プロジェクトで内部パッケージを利用する場合、Next.jsなどフロントエンドプロジェクトは、transpilePackages 構成オプションが機能して問題無く内部パッケージを利用することができます。
一方、NestJS などバックエンドプロジェクトは、そのまま内部パッケージをインポートするとエラーが発生してしまいます。
e.g. error
"C:\Program Files\nodejs\npm.cmd" run start
> nest@0.0.1 start
> nest start
Error: Cannot find module '@repo/database'
Require stack:
この問題は、内部パッケージをJavaScriptにコンパイルしてインポートすれば回避可能です。
対処方法
1. 内部パッケージにtsupをインストール
npm i -D tsup -w <workspace>
e.g. data-access-dbという内部パッケージの場合(PrismaClient を利用するパッケージなどを想定)
npm i -D tsup -w packages/data-access-db
2. 内部パッケージのpackage.jsonを変更
buildコマンドで、distフォルダにjsファイルをエクスポートするように設定します。
package.json
"main": "./dist/index.js",
"module": "./dist/index.mjs",
"types": "./dist/index.d.ts",
"scripts": {
"build": "tsup src/index.ts --format cjs,esm --dts",
"dev": "npm run build -- --watch"
},
3. NestJSプロジェクトを起動する前にビルド & インストール
npm run build -w <workspace>
npm i
e.g.
npm run build -w packages/data-access-db
毎回NestJSを立ち上げる際に内部パッケージをビルドするのは手間なため、トップディレクトリのpackage.jsonに、内部パッケージをビルド & インストールしてNestJSプロジェクトを起動するスクリプトを準備しておくと良いです。
関連コンテンツ
技術の記事をもっと見る →Nx Nestjs Mongodb Mongoose統合のセットアップ - 第3部
Nx Nest.js GraphQL統合の第3部です。パッケージのインストール、設定の更新、GraphQLクライアントの生成を通じてシームレスな統合を行い、データ管理とスケーラビリティを高めます。Nx、Nest.js、GraphQLの統合ガイドの完成、おめでとうございます!今後のチュートリアルもお楽しみに。
#nx#nestjs#mongodbNx Nestjs Mongodb Mongoose統合のセットアップ - 第2部
Nx Nest.js MongoDB Mongoose統合の第2部です。アプリケーションの効率性を高めるために、todosの生成、モジュールの作成、GraphQLモデル・リポジトリ・DTO・MongoDBスキーマの実装を行います。包括的な設定ガイドの続きにご期待ください。
#nx#nestjs#mongodbNx Nestjs Mongodb Mongoose統合のセットアップ - 第1部
スケーラビリティと効率性を高めるための、Nx、Nest.js、MongoDB、Mongooseの統合ガイドです。手順に従ってスムーズに開発を進められます。
#nx#nestjs#mongodb