OSSにちょっとだけ恩返しした話


ホントにちょっとだけ。

tsconfig.jsoncompilerOptions.paths

TypeScriptではtsconfig.jsonという設定ファイルで様々な設定ができますが、その中にpathsという項目があります。
モジュールロード時のプロジェクト内ディレクトリマッピングを設定するものですが、詳しくはここらへんここらへんを参照してください。

Jestで使う

JestはJavaScriptのテストプラットフォームですが、ts-jestを利用してTypeScriptも使えます。

TypeScript + Jestを使った開発を行なっていたのですが、pathsを使い始めた時にJestがpathsを認識しなくて困ったことがありました。
Jestにも設定があり、pathsに相当するmoduleNameMapperという項目があるので、これを設定すればいいのですが、同じ設定を複数箇所に書くのは好ましくありません。
どうにかならないものか・・・と思っていたところ、同じことを考えた人がいて、ライブラリとして公開してくれていました。
それがtsconfig-paths-jestです。
名前の通り、tsconfigからpathsの設定を拾ってJestのmoduleNameMapperにしてくれるものです。
これで解決、したかに思えました。

暗転

ところが、なぜかプロジェクトのコード以外の箇所でエラーが発生する事態に。
結構時間取られてしまったのですが、ようやく分かったのが、tsconfig-paths-jestが作ってくれるマッピングがマズイということ。

解決・・・?

ローカルで修正することも考えたのですが、同じ問題でハマる人もいるかも知れないので、Issueを作成しつつ、修正プルリクを出しました。

ところが、すぐに別の方法を発見しました。
なんとts-jestに同様のもの(pathsToModuleNameMapper)があったのです。
tsconfig-paths-jestのオーナーの方も

Thank you for letting me know. I guess we should use pathsToModuleNameMapper rather than this module.

(教えてくれてありがとう。このモジュールを使うよりpathsToModuleNameMapperを使った方がよさそうだね)

とのコメント。
そこに別の方が

Yeah, ts-jest added a helper for this in v23, I'm still on v22 for another issue

(そう、ts-jestがこのためのヘルパー(pathsToModuleNameMapperのこと)をバージョン23から追加したんだ。僕は別の問題があって、まだバージョン22を使ってるんだ)

そうなのです。理由があって古いバージョンのts-jestを使わなくてはいけない人にとっては、tsconfig-paths-jestは有用なツールで、僕の修正が役に立ったのです。

コミュニティ万歳。

その後、利用していた別のライブラリにも不具合報告して、PRを出してマージしてもらいました。