package.jsonのmainとexports
from package.jsonのexports
package.jsonのmainとpackage.jsonのexports
Modules: Packages | Node.js v22.9.0 Documentation
全部読みましょう
package.jsonにはpackageのentry pointを定義するfieldが2つある
つらmrsekut.icon
これらは、EMSとCJSの両方に適用される
package.jsonのmainとexportsの違い
package.jsonのmain
1つのentry pointのみを指定する
全てのversionのNode.jsでサポートされている (昔からある)
機能が限定的である
package.jsonのexports
mainより新しく、できることが多い
複数のentry pointを指定できる
環境ごとの条件付き解決ができる
基本的にこっちを使うべき
どっちを使うべきか?
package.jsonのexportsの使用が推奨される ref
Node.js v10以下をサポートするならmainも必要
両方指定した場合
exportsとmainの両方が定義されている場合は、exportsが優先される
当然、Node.js v10以下ならmainのみが見られる
mainからexportsへ移行する際の注意点
この節に書いてる
元のmainの書き方で参照できた箇所を全てexportsに列挙しないと破壊的変更になる
例えば、そのpackageの利用者が
require('your-package/package.json')のような使い方をしていた場合、
exports内に./package.jsonも明示していないと
ERR_PACKAGE_PATH_NOT_EXPORTEDエラーが発生する