dependency-cruiserがtypescriptを認識しない問題の解決
dependency-cruiserが .tsx? を認識しなかったので調査した。
dependency-cruiserは基本的に .js 以外を自動的に認識するが、その挙動は実行時に「 require('typescript') が成功するか」といった方法で行われている。 (今回は基本的に .tsx? しか使ってなかったので調べていないが、 .jsx 等も同じ方法で検証されていたはず)
そのため、以下のようなディレクトリ構成で、 sub2 で depcruise を実行してもtypescriptの認識が行われない。 ( package-name/node_modules/dependency-cruiser 以下で require('typescript') しても package-name/sub2/node_modules/typescript が読み込めないため)
package-name ├── node_modules │ └── dependency-cruiser ├── package.json ├── sub1 │ ├── node_modules │ └── package.json └── sub2 ├── node_modules │ └── typescript └── package.json
上記のような構成の場合、以下のような方法で解決する。
yarn workspace 等で package-name/node_modules にまとめる (この場合でもバージョン違い等で dependency-cruiser と typescript が違う node_modules 以下に保存されないように注意)
それぞれ実行される階層の package.json に dependency-cruiser を追加する
1はなんらかの理由で突然 dependency-cruiser が typescript を認識しなくなるので注意が必要( renovatebot 等で全体のバージョンを固定していれば問題ない可能性も高い)
2は上記の挙動を知らないとぱっと見無駄な指定がされているように見えるので注意
この挙動に関しては知らないと混乱する可能性が高いが、他に解決策もなさそうなのでバグ報告はしていない












