🤖

package.jsonファイルの学習まとめ

2023/07/06に公開

package.jsonファイルについて学習したことのまとめ記事です。
パッケージマネージャ-にはyarnを使用しています。

description

プロジェクトの説明を文字列で指定します。Yarnのウェブサイトやパッケージ検索の結果で表示されます。

"description": "My awesome Node.js project"

private

このフィールドをtrueに設定すると、パッケージが誤って公開されるのを防ぐことができます。通常、個人的なプロジェクトやアプリケーションに使用します。

"private": true

type

このフィールドは、パッケージのルートレベルにある.jsファイルがどのモジュールシステムを使用するかを指定します。値は"commonjs"または"module"が一般的です。

"type": "module"

engines

プロジェクトが必要とするNode.jsやYarnのバージョンを指定します。これはエンジンの互換性を明示的に示すもので、特定のバージョンのエンジンで動作することを要求することができます。一部の環境では、この指定を満たしていないと警告が表示されたり、インストールが失敗したりすることがあります。

"engines": {
  "node": ">=18.12.1",
  "yarn": ">=1.22.19"
}

バージョンの指定方法について

  1. 特定のバージョンを指定する
"engines": {
"node": "18.12.1",
"yarn": "1.22.19"
}

上記の例では、Node.jsのバージョンが18.12.1、yarnのバージョンが1.22.19であることが必要となります。

  1. バージョンの範囲を指定する
"engines": {
"node": ">=18.0.0 <18.12.1",
"yarn": "1.x"
}

上記の例では、Node.jsのバージョンは18.0.0以上で、かつ18.12.1未満であることが必要となります。yarnのバージョンは1.x系であることが必要となります(つまり1.0.0以上2.0.0未満)。

  1. 最新バージョンを指定する
"engines": {
"node": "*",
"yarn": "latest"
}

上記の例では、Node.jsのバージョンは任意(*)で、yarnのバージョンは最新版(latest)であることが必要となります。

バージョン範囲の指定にはセマンティックバージョニング(semver)が使用されます。これはバージョン番号をメジャー、マイナー、パッチの3つの部分に分けて表現する方法で、バージョンの互換性を示すための規約です。>=<=><~^などの記号を使って、特定のバージョンまたは範囲を指定できます。

なお、これらのバージョン指定は推奨環境を示すものであり、必ずしも強制的にそれらのバージョンを使用するわけではありません。しかし、パッケージの開発者がテストを行った環境や最適な動作を保証する環境を示すため、指定に従って環境を構築することが推奨されます。

scripts

Yarnスクリプトを定義します。これは特定のタスクを実行するためのショートカットで、yarn script-nameというコマンドで実行できます。

"scripts": {
  "start": "node index.js",
  "dev": "nodemon index.js"
}

上記の例では、yarn startでアプリケーションをNode.jsで起動し、yarn devでnodemonを使って開発モードで起動します。

devDependencies

プロジェクトの開発時にのみ必要となるパッケージを指定します。これは通常、テストフレームワークやビルドツールなど、本番環境では不要なパッケージを含みます。例えば、nodemonは開発時にのみ必要なので、devDependenciesに含まれます。

"devDependencies": {
  "nodemon": "^2.0.12"
}

author

プロジェクトの作者の情報を指定します。名前、メールアドレス、ウェブサイトのURLなどを含めることができます。一人の作者の場合、文字列で情報を記述できます。複数の作者の場合、配列形式で指定します。

"author": "鈴木一郎 <ichiro.suzuki@example.com> (http://example.com)"

または

"authors": [
    "鈴木一郎 <ichiro.suzuki@example.com> (http://example.com)",
    "佐藤花子 <hanako.sato@example.com> (http://hanakosato.com)"
]

Discussion