Dual Package
#WIP
ESMとCJSの両方に対応したpackageを作る
関連
CJSのprojectをESMに移行する
ライブラリを作成する側の視点
ライブラリをESMとCJSに対応する
Dual Packageと呼ぶらしい
https://blog.cybozu.io/entry/2020/10/06/170000
https://qiita.com/yuta-katayama-23/items/e72698698d96beb6e002
https://www.wantedly.com/companies/wantedly/post_articles/410531
パッケージによってはCJSとESMの両方のバージョンを提供している場合があります (Dual Packages)。Native ESM と Fake ESM の違いにより、Dual Packagesも2種類あるので注意が必要です。
Dual Packageの困難
複雑性が上がる
https://www.wantedly.com/companies/wantedly/post_articles/410531#:~:text=index.js"%0A}-,パッケージ形式の今後について,-2022年時点
Dual Package Hazard
https://nodejs.org/api/packages.html#dual-package-hazard
こういう困難があるから、Dual Packageの対応のステップを飛ばして、一気にPure ESM packageにするという発想に繋がる
https://zenn.dev/uhyo/articles/typescript-module-option#型定義とエコシステムの問題
このツールではnpmで公開されている型定義を検査し、問題がないか調べることができます。例えばこのツールはMasquerading as CJSという問題を検出できます。これは、ランタイムにimportで読み込まれるのはESMなのに、型定義はTypeScriptからCommonJSとして認識されるという問題です。主に、package.jsonの書き方が良くないと発生します。
arethetypeswrong.github.io
https://github.com/arethetypeswrong/arethetypeswrong.github.io