node_modules内パッケージのエントリーポイント定義方法
背景
最近node.jsを勉強しており、他者が作成したパッケージに含まれるファイルの中でどれがエントリーポイントとなるのかわからなかったので調べた。
パッケージのエントリーポイント
※Modules: Packages | Node.js v16.1.0 Documentationの一部を訳し以下に記す。
※訳に誤りがあれば指摘いただきたい。
パッケージ内のファイルpackage.json
はエントリーポイントを定義する2つのフィールドE、"main"
と"exports"
を定義することができる。
"main"
はどのバージョンにも対応しているがパッケージのメインエントリポイントのみ定義可能な制限を持つ。
"exports"
は"main"
の代替を提供する。 "exports"
はパッケージのメインエントリポイントを定義するのと同時に、パッケージをカプセル化し、"exports "で定義されたもの以外のエントリーポイントを防ぐ。
※この部分は訳した結果、完全には理解できていないです。
まとめるとpackage.json内の"main"もしくは"exports"フィールドで指定するようだ。
具体例
ここで今回の調査のきっかけになったパッケージを見てみる。
grpc-node/packages/grpc-js at master · grpc/grpc-node
このリポジトリはgrpcをjavascriptで使うために必要なパッケージらしい。
ここで var grpc = require('@grpc/grpc-js');
という一文が記載されている。
grpc-jsに含まれるpackage.jsonを見てみる。
ローカルの環境ではnode_modules/@grpc/grpc-js/package.json
に当たる。
エントリーポイントに関連する部分は"main": "build/src/index.js",
である(github上の対応する箇所)。
これによってnode_modules/@grpc/grpc-js/build/src/index.js
がエントリポイントと設定される。
まとめ
package.json
に含められた"main"
と"exports"
フィールドによってエントリポイントは定義される。
"main"
と"exports"
の違いがわかってないので、今後必要になったタイミングで調べていきたい。