業務でnpmライブラリのアップデートを行うにあたって、package.json
についてちゃんと調べてみたので忘備録としてまとめました。
まずnpmとは
意味としては大きく2種類あると思います。
①npm.Inc社のサービス
https://www.npmjs.com/
npm.Incという会社が提供している上記のサービスことをnpmといいます。今年3月にGithubに買収された会社ですね。このサービス内に、Javascript
で書かれたライブラリが豊富に存在しています。ここに存在するライブラリを、次に説明するnpmコマンドを使って操作している訳です。
②パッケージを操作するためのCLINode.js
のライブラリを管理するためのコマンドで、ライブラリを生成したり、npm上のライブラリをローカルにインストールしたりするツールです。
ライブラリとは
ライブラリを使えば、自分で一からコードを書かなくても簡単に機能を実現することができます。
外部ライブラリは自分のプロジェクトに含めるのではなく、「このプロジェクトはnpmのこのライブラリを使っている」という情報だけを「宣言」します。これを宣言しているのがpackage.json
です。
例えばRails
では、昔はvendor
というディレクトリの配下にに外部パッケージをコピペして使用していましたが、それだとバージョンを管理するのが面倒になるため、package.json
で宣言する方法が主流になってきているそうです。
ライブラリをインストールする
npmでライブラリをインストールすると、それらはルートディレクトリ直下のnode_modules
ディレクトリに仮置場としてダウンロードされます。package.json
があるディレクトリで以下のコマンドを実行すると生成されるのが確認できると思います。
npm install
このファイルは基本的に.gitignore
で除外されるため、編集する機会はほぼ無いと思います。
package-lock.json
とは
package.json
に記載された、それぞれライブラリの依存先が宣言されています。
インストールされるべき厳密なバージョン番号、モジュールの場所、必要とされるライブラリのリストなどが書かれており、かなり膨大な行になりがちです。
ライブラリをインストールする際は、package-lock.json
に書き込まれたバージョンのパッケージがインストールされます。
わかりやすい例があったので紹介します。
- package.jsonは買うものリスト
100円のりんごを買いたいと書かれている
- package-lock.jsonは実際に買ってきた領収書
実際には120円のりんごを買いましたと書かれている
devDependencesとdevendencesについて
devDependences
開発に必要なライブラリのみを記述します。
開発者がこのpackage.json
があるディレクトリでnpm install
を行うと、dependencies
に書かれているライブラリのみではなく、devDependencies
に書かれているライブラリもインストールされます。
dependences
ライブラリを使いたい人がnpm install
したときにはdependencies
に書かれているライブラリのみがインストールされます。
バージョン表記について
バージョン表記は以下のようになっています。左から順に、メジャーバージョン、マイナーバージョン、パッチバージョンと呼びます。
0.1.2
名前 | 内容 |
---|---|
メジャー | 仕様そのものの変更。upgradeする場合はアプリケーションの改修が必要になる可能性あり。 |
マイナー | 仕様を維持した状態での機能追加。upgradeしてもアプリケーションは壊れない。 |
パッチ | バグ修正。upgradeしてもアプリケーションは壊れない。 |
まとめ
- npmはオンライン上のライブラリレジストリと、ライブラリを操作するためのCLIの2つを指す。
package.json
とはライブラリをアプリで使用するときに、その依存関係を管理するファイルpackage-lock.json
で使用するバージョンを固定できる。- バージョンは3種類あり、左から順にメジャー、マイナー、パッチという。
今回はじめてpackage.json
のライブラリのバージョンアップをした新米なので、もし間違っている箇所等あればコメントよろしくお願いします!