きっかけ
2017/3にnpmモジュールを公開した時に、そのモジュールのpackage.jsonを編集する必要が生じて、今までなんとなくしか理解してなかった各プロパティの意味を調べた。
全てのプロパティを網羅しているわけではない。随時更新していく。
name
モジュールの名前。必須項目。
ソース内でimportやrequire()でモジュール読み込みで利用される。npmモジュールはname
とversion
で一意となることが想定されているので、他のライブラリと名前が重複してはいけない。
{ "name": "react-native-card-media" }
version
モジュールのバージョン。必須項目。
npmモジュールはname
とversion
で一意となることが想定されている。バージョンアップのnpm公開するときは、バージョン番号の更新を忘れないように。
{ "version": "0.0.5" }
private
このプロパティがtrue
になっていると、モジュールの公開ができない。公開しないプロジェクトは誤って公開しないようにtrue
にしておく。
{ "private" : true }
description
モジュールの説明。
npm search
で表示されるので、人々があなたの作ったパッケージを見つけ、理解するのに役に立つ。
{ "description": "Card Media component for React Native. Also supports multiple image layout." }
main
モジュールの中で最初に呼ばれるスクリプトファイルを指定。
例えばモジュールにfoo
と名前をつけ、それをユーザーがインストールし、require("foo")
を実行した時にmain
で指定したモジュールのexportsオブジェクトが返される。
パッケージルートからの相対パスを指定しなければいけない。
{ "main": "index.js" }
scripts
任意のshell scriptを実行するエイリアスコマンドを定義できる。
{
"scripts": {
"test": "eslint *.js ./components/*.js ./example/*/*.js",
"start": "node app.js",
"production": "NODE_ENV=production node app.js"
}
}
キーはnpm test
、npm start
のようにエイリアスとして利用できる名前となり、値にはshell scriptをワンラインで指定する。
ただし、test
やstart
などの予約語以外をエイリアスコマンドとして、登録した場合はnpm run production
と実行する。
ワンラインのshell scriptを記述する際はdependencies
やdevDependencies
に入っているモジュールの bin は、自動的に PATH に入る。
{
"devDependencies": {
"eslint": "^3.18.0"
}
}
と、していれば
{
"scripts": {
"test": "node_modules/.bin/eslint *.js"
}
}
ではなく
{
"scripts": {
"test": "eslint *.js"
}
}
のように書ける。
scripts
は、もっとたくさんの機能があるみたいなので、今後追記していきたい。
repository
ソースコードが管理されている場所を指定する。
{
"repository": {
"type": "git",
"url": "git+ssh://git@github.com/dondoko-susumu/react-native-card-media.git"
}
}
author
author
は一人だけを指定し、 contributors
は複数の人を配列指定する。
このような省略形で書くのが一般的みたいだ。
{ "author": "Ken Kubota <kkbt2003@gmail> (https://github.com/dondoko-susumu/)" }
license
ライセンス情報。
{ "license" : "MIT" }
bugs
プロジェクトの問題やバグ追跡を見る url とそれらの報告を行う email アドレス。
GitHubであればIssueのURLを載せるのが一般的なようだ。
{
"bugs": {
"url": "https://github.com/dondoko-susumu/react-native-card-media/issues",
"email" : "project@hostname.com"
}
}
homepage
プロジェクトのホームページURL。
{
"homepage": "https://github.com/dondoko-susumu/react-native-card-media#readme"
}
dependencies
依存するモジュールとバージョンを記述する。
package.json
が置かれているディレクトリでnpm install
すると、dependencies
と(devDependencies
)に記述されたモジュールがnode_module
ディレクトリにインストールされる。
インストールされたモジュールの中にも依存しているモジュールがあれば、それもインストールされる。数珠つなぎのようにdependencies
に記載された依存関係にあるモジュールがインストールされていく。
テストスクリプトを自動実行するようなものやトランスパイラー(リリースモジュールをビルどするためのモジュール)をdependencies
に書いてはいけない。そういうものは後述するdevDependencies
に記述する。
--saveオプション
$ npm install --save co
--save
オプションを付けると、package.json
に勝手に次のように登録される。
{
"dependencies": {
"co": "^4.6.0"
}
}
バージョンの記法
^ (Caret Ranges)
--save
オプションで自動で登録されるバージョン指定(^(カレット)
と呼ぶらしい)
^1.2.3 := >=1.2.3 <2.0.0
^0.2.3 := >=0.2.3 <0.3.0
^0.0.3 := >=0.0.3 <0.0.4
devDependencies
npmに公開するモジュールを開発するときに必要なものを定義する。
devDependencies
に記載されたものは、自分自身が別プロジェクトの外部モジュールとしてnpm install
される場合にはインストールされない。
対して、プロジェクトをGitでクローンしてnpm install
した場合は、インストールされる。開発時のみに必要なライブラリで、実行時には役に立たないので、含める必要がない。
テストスクリプト、コンパイラ、タスクランナーなど モジュールとして読み込む際はいらないもの を定義していく。
ちなみに、エンドユーザとしてnpm install
するとdependencies
とdevDependencies
は両方ともインストールされる。
jest
package.jsonのトップレベルのjest
キーでjest
の設定を書くことができる。
設定にpresetを指定
preset
にはjest-preset.json
をトップレベルでexportsしているnpmモジュールを指定する。
{
"jest": {
"preset": "react-native"
}
}
参考
公式 npm
公式 semver
npm package.json 取扱説明書
npm-scriptsについて
ちゃんと使い分けてる? dependenciesいろいろ。
3分でできるnpmモジュール
jest configuration