まず、「package.json の imports / exports フィールド」については、
TyepScriptの設定でもモジュール名マップ〈エイリアス〉ができるらしい。使っている例が次にあるが、オーバーキルしてるように思う。"#/" のような記号がモジュール名として出現するとドキッっとする。あまり良くない。
インポートエイリアス設定:
tsconfig.json
{ "compilerOptions": { "baseUrl": "./src/", "paths": { "#/*": ["*"] }, } }
package.json
{ "jest": { "moduleNameMapper": { "^#/(.+)": "<rootDir>/src/$1" } } }
これで #/some/module は ${projectRoot}/src/some/module にマップされます。
NPMパッケージとモジュールシステムでは、ややこしい現象も起きるらしい。
- https://rushjs.io/pages/advanced/npm_doppelgangers/ NPMドッペルゲンガー
- https://zenn.dev/hankei6km/articles/test-dual-package-hazard デュアルパッケージ・ハザード
デュアルパッケージについては:
- https://blog.cybozu.io/entry/2020/10/06/170000
- https://typescriptbook.jp/reference/advanced-topics/tsconfig-for-dual-package-developers
- https://zenn.dev/hankei6km/articles/unified-plugin-to-dual-package
ブラウザは考えないことしても、関連する事柄達が:
- node.js のモジュールシステム
- package.json のモジュール関係フィールド imports/exports
- TypeScriptのtsconfig.jsonの$.compilerOptions.pathsフィールド(オブジェクト値)
これらが絡まってややこしいことに。