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

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

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エラーが発生し、原因の特定が難しくなります。

関連ドキュメント​