前提
ベースはangular-cliで作成したプロジェクトで、なんとなく下記のような構成(になるよね?)。
※今回の話題に関係ないファイルは省略
ちなみにsharedはプロジェクト全体で共有して使うモジュール。
projectRoot
├── src
│ └── app
│ ├── moduleA
│ │ └──components
│ │ └── hoge.component.ts
│ ├── moduleB
│ └── shared
│ └── services
│ ├── moge.service.ts
│ └── index.ts (export * './moge.service.ts')
└── tsconfig.json
問題点
hoge.component.ts内でMogeServiceをimportをしようと思うと
hoge.comopnent.ts
imoprt { MogeService } from '../../shared/services';
と書く必要がある。
moduleの外側への参照……
moduleって言ってるにくせに密結合な依存になってるようで個人的にすごい気持ち悪さがぬぐえない。
解決策
tsconfig.json
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"my-shared/*": [
"app/shared/*"
]
}
}
}
これで
hoge.comopnent.ts
import { MogeService } from 'my-shared/services';
こう書ける!
これなら(オレオレ)ライブラリな感じでimportできてすっきり。
※逆に言うとライブラリと見分けが付くような名前を付けないと紛らわしいかも
なんならホントにライブラリとして公開することになっても(ならないだろうけど)コードの変更がほぼない。