package.jsonの位置づけや設定可能な内容が分からなかったので調べた範囲でまとめる。
ついでにnpxについても簡単にまとめる。
package.jsonとは?
Node.jsのプロジェクトは公開の有無に関わらず1つのパッケージとして扱われる。
package.jsonはパッケージに関する諸々の情報が記載されているファイルである。
パッケージは、package.jsonが格納されているディレクトリがルートディレクトリとして扱われ、npmのコマンドは基本的にルートディレクトリで実行する必要がある。
package.jsonにはパッケージ名やパッケージの説明、ライセンス表記などパッケージの情報や、パッケージの依存関係、エイリアスやテストの定義などコマンドや実行に影響を与える情報などが含まれている。
package.jsonの生成
package.jsonはnpm initコマンドで生成できる。
以下はnpm initコマンドで生成したpackage.jsonの例。
{
"name": "test",
"version": "1.0.0",
"description": "test package",
"main": "test.js",
"dependencies": {
"acorn": "^8.12.1",
},
"devDependencies": {
},
"scripts": {
"test": "jest"
},
"author": "",
"license": "ISC"
}
scripts
コマンド名とそのコマンドを指定した際に実行される内容を定義できる。
ここで定義されたコマンドはnpm run <command name>で実行可能。
startやtestなどいくつかのコマンド名は特別扱いされ、npm startやnpm testのような形で実行可能。
dependenciesとdevdependencies
dependenciesはパッケージの実行に必要なパッケージ。
devdependenciesは開発やテストに必要なパッケージ。
これらの追加・更新・削除は通常、npm install <package>コマンドを通して行う。
devdependenciesに反映したい場合は、npm install --save-dev <package>とする。
package.jsonのこれらの項目を変更した場合はnpm installコマンドで反映する必要がある。
package-lock.jsonとは?
npm installした際に生成されるファイル。
依存パッケージのバージョンを固定するために使用される。
package-lock.jsonが存在する状態でnpm installした場合はこのファイルの内容を基にパッケージのインストールを実施する。
その際、node_modulesの削除を伴う。
package-lock.jsonの内容を優先してインストールしたい場合は、npm ciを使用する。
npm ciを使用した場合は、package.jsonとの内容に矛盾があった場合、エラーとなる。
npxとは?
パッケージを一時的に実行するためのコマンド。
一時的にパッケージを利用でき、使用後はパッケージが残らない。
参考