絶対パスインポートとモジュールパスエイリアス
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.jsonにmoduleNameMapperを追加してください:
jest.config.json
{
"moduleNameMapper": {
"^@/(.*)$": "<rootDir>/src/$1",
"^@shared/(.*)$": "<rootDir>/src/shared/$1"
}
}
備考
moduleNameMapperのパターンをtsconfig.jsonのpathsエントリと同期させてください。マッパーが欠けていると、テストのみでCannot find moduleエラーが発生し、原因の特定が難しくなります。