😃
package.jsonを中身から理解したい
いつも、脳死でnpm initしてpackage.jsonを作ってから、npm installでパッケージをインストールしてっと手順を踏んでいましたが、そもそもpackage.jsonとは何なのでしょうか?
そして、その中身はどのようになっているのかをご紹介したいと思います。
package.jsonとは
package.jsonは、Node.jsプロジェクトの設定ファイルで、プロジェクトの依存関係や設定情報を管理するファイルです。
npm initで作成できますが、npm init -yと打つと初期設定をスキップできます。
例えば、中身は以下のようになっています。
{
"name": "my-project",
"version": "1.0.0",
"description": "My awesome project",
"main": "index.js",
"scripts": {
"start": "node index.js",
"test": "jest",
"build": "webpack"
},
"dependencies": {
"express": "^4.17.1",
"react": "^18.2.0"
},
"devDependencies": {
"jest": "^29.0.0",
"webpack": "^5.0.0"
}
}
依存関係とは
package.jsonは「Node.jsプロジェクトの設定ファイルで、プロジェクトの依存関係や設定情報を管理するファイル。」と説明しましたが、「依存関係」とはプロジェクトが正常に動作するために必要な外部のパッケージやライブラリのことです。
今回の例で言うとdependeciesとdevDependenciesに記述されているライブラリがそれにあたります。
package.jsonの中身
| キー | バリュー | 必須 |
|---|---|---|
| name | パッケージ名。小文字のみでスペース不可 | ⭕️ |
| version | パッケージのパージョン。セマンティックバージョニング(x.y.z)形式 | ⭕️ |
| description | パッケージの説明文 | ❌ |
| private | trueの場合npmに誤って公開するのを防げる | ❌ |
| main | パッケージの中で最初に呼ばれるスクリプトファイル | ❌ |
| scripts | 任意のshell scriptを実行するエイリアスコマンドを定義できる"scripts": { "start": "node index.js" }と定義されていた場合npm run startでアプリケーション起動など |
❌ |
| dependencies | 本番環境で必要なパッケージ | ❌ |
| devDependencies | 開発時のみ必要なパッケージ | ❌ |
| author | 作者の情報 | ❌ |
| license | ライセンスの種類(MITなど) | ❌ |
| engines | 必要なNode.jsやnpmのバージョンなどを定義 | ❌ |
| repository | ソースコードのリポジトリ情報 | ❌ |
package.jsonなしでnpm installするとどうなるのか
では、package.jsonなしでnpm installするとどうなるのでしょうか?
結果は、特にエラーなどは起きずにnode_modulesとpackage-lock.jsonが生成されます。
ただ、package.jsonがないと以下の弊害があります。
- どのパッケージをインストールしたのかの記述がどこにも記されないので、node_modulesの管理が難しくなる
- パッケージの依存関係がわからなくなる。
そのためpackage.jsonを作ってからnpm installするようにしましょう。
まとめ
今回はpackage.jsonについてまとめてみました。
普段、使っているものほど知らないことが多いなと最近気付かされます。
他の方の参考になれば幸いです。
参考
Discussion