TL;DR

  • npm の依存には dependencies、devDependencies、peerDependencies などの種類がある。
  • TypeScript は開発ツールで、型情報は実行時に存在しないので、TypeScript も @types も devDependencies に入れる。

内容

npm の依存の種類

npm の package.json では、依存パッケージをいくつかの種類に分けて書く。

dependencies は、実行時に必要なパッケージである。npm に公開したパッケージをインストールすると、その dependencies もインストールされる(推移的依存関係)。

devDependencies は、開発やテストでは必要だが、実行時には要らないパッケージである。dependencies とは違い、推移的にはインストールされない。

peerDependencies は、実行時に必要だが、そのバージョン管理の責任は負いたくないパッケージである。たとえば React のコンポーネントを公開する場合、コンポーネント側で React のバージョンを指定すると、利用者のページで複数のバージョンの React が動くおそれがある。そこで React を peerDependencies に入れて互換性のあるバージョンだけを指定すれば、実際に使うバージョンの選択を利用者に任せられる。

TypeScript と @types は devDependencies に入れる

TypeScript は開発ツールであり、型情報は実行時に存在しない。そのため、TypeScript は一般に devDependencies に入れる。同じ理由で、@types も devDependencies に入れるべきである。

ほかにも理由がある。

キーワード