概要
Node.jsを触り始めて1年が経ちました
きちんと理解しようしようと思っていたpackage.jsonの存在
今更ながらきちんと勉強して何のために存在するのか?どのように利用するのか?をまとめていこうと思います
対象者読者
- package.jsonについて知りたい初心者
- Node.jsを触り始めた初心者
本題
以下から調査内容をまとめていきます
ざっくとした概要
- あらゆる Node プロジェクトの中心的な存在
- NPMに公開する前に必要なプロジェクトに関する重要なメタデータを記録し、依存関係のインストール、スクリプトの実行、パッケージへのエントリポイントの識別に npm が使用するプロジェクトの機能属性も定義
- プロジェクトのルート ディレクトリにあるJSONファイル
- プロジェクトに関する重要な情報が含まれている
- メタデータ(プロジェクト名や説明)
- パッケージのバージョン番号
- アプリケーションにっ必要な依存関係のリスト
記載内容
記載例↓
package.json
{
"name": "my-project",
"version": "1.5.0",
"description": "Express server project using compression",
"main": "src/index.js",
"scripts": {
"start": "node index.js",
"dev": "nodemon",
"lint": "eslint **/*.js"
},
"dependencies": {
"express": "^4.16.4",
"compression": "~1.7.4"
},
"devDependencies": {
"eslint": "^5.16.0",
"nodemon": "^1.18.11"
},
"repository": {
"type": "git",
"url": "https://github.com/osiolabs/example.git"
},
"author": "Jon Church",
"contributors": [{
"name": "Amber Matz",
"email": "example@example.com",
"url": "https://www.osiolabs.com/#team"
}],
"keywords": ["server", "osiolabs", "express", "compression"]
}
main
- プロジェクトのエントリポイントを定義する
- パッケージ名がexample-libだった場合、このパッケージを使用するには
import * as example from example-lib
になる - 必須項目
scripts
- このパッケージ内で使用するコマンドを定義する
- scripts フィールドにコマンドを配置することで再利用できる
- 使用する際は
npm run <scriptName>
のように使用できる - 必須項目
以下のようにすることでCDKのsynthとdeployコマンドをまとめることができる
package.json
"scripts": {
"deploy": "cdk synth and cdk deploy"
}
repository
- プロジェクトが保存されているリポジトリを定義する
- 必須ではない
dependencies
- package.jsonで最も重要なフィールドの1つ
- 本プロジェクトが依存しているパッケージを定義する
- npm install とすると勝手に記載される
- npm install --productionとするとdependenciesに記載されたパッケージのみがインストールされる(インストール時間短縮やディスク容量の削減の効果がある)
- 必須項目
devDependencies
- 開発時にのみ必要な依存パッケージ(eslint,prettier,puppeteerなど)を定義する
- アプリ開発に必要なツールを文書化するために使用する
name
- パッケージの名前を定義
- NPMに公開する場合は必須項目
version
- パッケージのバージョンを定義
- NPMに公開する場合は必須項目(公開しない場合も使用することを強く推奨されている)
license
- ライセンスを定義する
- 必須ではないが、何かしら記載することを推奨されている(NPMに公開しない場合は必要ない)
author & contributors
- 著者名や寄稿者名を定義する
- 必須ではない
description
- パッケージの説明を定義する
- 必須ではない
keywords
- パッケージに関連する言葉を定義する
- NPMでパッケージを検索する際に役立つ
- 必須ではない