メインコンテンツまでスキップ

絶対パスインポートとモジュールパスエイリアス

MBC CQRS Serverless フレームワークには、tsconfig.json ファイルの "paths" および "baseUrl" オプションのサポートが組み込まれています。

これらのオプションを使用すると、プロジェクト ディレクトリに絶対パスのエイリアスを付けることができ、モジュールのインポートが容易になります。例えば:

// 変更前
import { Role } from "../../../auth/role.enum";

// 変更後
import { Role } from "@/auth/role.enum";

絶対パスインポート

「baseUrl」設定オプションを使用すると、プロジェクトのルートから直接インポートできます。

以下が設定例です。

tsconfig.json
{
"compilerOptions": {
"baseUrl": "."
},
"include": ["src/*", "src/**/*"]
}

モジュールエイリアス

baseUrlの設定に加えて、"paths"オプションでモジュールパスエイリアスを設定できます。MBC CQRS Serverlessの慣例では@/*src/*にマップします:

tsconfig.json
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": ["src/*"],
"@shared/*": ["src/shared/*"]
}
},
"include": ["src/**/*"]
}

これにより、クリーンでリファクタリングしやすいインポートが書けます:

// エイリアスなし
import { OrderService } from "../../../orders/order.service";

// エイリアスあり
import { OrderService } from "@/orders/order.service";

Jestの設定

TypeScriptのパスエイリアスはJestにも登録する必要があります。jest.config.jsonmoduleNameMapperを追加してください:

jest.config.json
{
"moduleNameMapper": {
"^@/(.*)$": "<rootDir>/src/$1",
"^@shared/(.*)$": "<rootDir>/src/shared/$1"
}
}
備考

moduleNameMapperのパターンをtsconfig.jsonpathsエントリと同期させてください。マッパーが欠けていると、テストのみでCannot find moduleエラーが発生し、原因の特定が難しくなります。

関連ドキュメント