まず結論
package.jsonは、プロジェクト名、使うパッケージ、実行できる作業を記録する設定ファイルです。 まずname、scripts、dependenciesを読みます。
{
"name": "my-app",
"scripts": { "dev": "astro dev", "build": "astro build" },
"dependencies": { "astro": "^6.0.0" },
"devDependencies": { "eslint": "^9.0.0" }
}

scripts:よく使う作業の名前
scriptsはコマンドに短い名前を付ける場所です。上の例ならnpm run devで開発サーバー、npm run buildで公開用ファイルを作ります。実行前に内容を読むと、何が動くかを確認できます。
dependencies と devDependencies
| 項目 | 入れるもの |
|---|---|
dependencies | 公開したアプリの実行時にも必要なもの |
devDependencies | 開発、テスト、ビルドにだけ使うもの |
分類はフレームワークの配布方法で変わることがあります。既存プロジェクトの方針を優先し、迷ったらそのパッケージが公開後の実行時に必要かを確認します。
engines と type
enginesは必要なNode.jsやnpmの版を示す目安です。"type": "module"は.jsをES Modulesとして扱う設定で、importとrequireの使い方に影響します。
読む順番
nameとdescriptionで何のプロジェクトかを知るscriptsで起動・テスト・ビルド方法を確認するdependenciesで中心となる技術を確認するenginesとlockfileで実行環境と再現方法を確認する
まとめ
package.jsonはプロジェクトを読む入口です。項目を丸暗記せず、まずは実行コマンドと依存関係を、lockfileと組み合わせて確認します。