2015-03時点での、npmの使い方の勉強メモ。
勉強環境:
$ node --version
v0.11.16
$ npm --version
2.3.0
参考:
- https://docs.npmjs.com/
- https://docs.npmjs.com/misc/faq
npm help installnpm help rootnpm help binnpm help 5 foldersnpm help 7 config
パッケージインストールの考え方:
- ローカルインストール
- カレントディレクトリの
node_modules以下にパッケージをインストール。 - 開発プロジェクト固有で依存するパッケージをインストールしたい時に使いやすそう。
- カレントディレクトリの
- グローバルインストール
- システム共通の場所にパッケージをインストール。
- ビルドツールなど、システム全体で利用するツール・コマンド類をインストールしたい時はこっちも便利。
パッケージのインストールとアンインストール
ローカルインストールの流れ
-
npm initでpackage.jsonを生成しておく(オプション。開発プロジェクト固有のパッケージインストール前提になるなら、最初にやっておいたほうが良いかも)。- 名前, バージョン, 説明, Gitリポジトリ, キーワード, ライセンスなどひと通り聞かれる。全部デフォルトのままにして後から編集しても良い。
-
npm install パッケージ名でインストール。- デフォルトでカレントディレクトリの
node_modules以下にパッケージをインストール。 -
package.jsonに記録しておきたければ、npm install パッケージ名 --saveを実行。 -
--save-dev/--save-optionalというオプションもある。--saveとの違いについては後述
- デフォルトでカレントディレクトリの
ローカルインストールしたパッケージを削除
-
npm uninstall パッケージ名-
package.jsonからも依存関係削除したければ、npm uninstall パッケージ名 --save(or --save-dev or --save-optional)を実行。 -
npm rmでも一緒。
-
インストールしたパッケージを確認
-
npm list (or ls or la or ll)で、デフォルトだとローカルのパッケージ確認。設定でglobalインストールしたのも確認できるっぽい(今回は試さなかった)。
グローバルインストール/グローバルアンインストール
npm install -g パッケージ名npm uninstall -g パッケージ名
--save / --save-dev / --save-optional の違い
-
--saveはpackage.jsonのdependenciesに追記される。 -
--save-devはpackage.jsonのdevDependenciesに追記される。 -
--save-optionalはpackage.jsonのoptionalDependenciesに追記される。
それぞれの違いだが、package.jsonがモジュールとして外部に公開し、他の人がnpm installした時に影響する。
他の人が npm install した時に、dependencies に指定したパッケージが全てインストールされる。
devDependencies に追記したものは開発時にのみ使うパッケージを指定するのに使う。そのパッケージの利用者にとっては不要で、開発者のみが使うため、利用者が npm install パッケージ名 するときはこの依存パッケージはインストールされない。もし devDependencies もインストールしたい場合は、--dev 設定を有効化(これはnpm installのオプションではなく、 npm help 7 config にあるようにnpmの設定である)して、npm install パッケージ名 --dev とする。
ただし、利用者がpackage.json含めたソースコード全体をgitなどからcloneして開発する = 開発者と同等の立場として、追加パラメータ無しで package.json のあるディレクトリで npm install とだけした場合は、開発者の立場になるわけなので、devDependencies もインストールされる。というか、依存関係は全てインストールされるらしい。 --production つければ、package.jsonのところで npm install --production なら devDependencies はインストールされない。
dependencies と devDependencies の使い分けだが、パッケージやプロジェクトが実行時に必要となるのを dependencies に設定し、ビルド時だけしか使われないようなビルドツール・ライブラリなどは devDependencies に入れておくと良さそう。
optionalDependenciies に追記したものは、通常のnpm installでインストールされるが、インストールに失敗してもスルーされる。正直、使いドコロがよくわからない。
他にもdependencyの種類には何種類かあるため、package.jsonのドキュメントを参照のこと。
参考:
- http://stackoverflow.com/questions/19578796/what-is-the-save-option-for-npm-install
- http://stackoverflow.com/questions/18875674/whats-the-difference-between-dependencies-devdependencies-and-peerdependencies
- https://docs.npmjs.com/files/package.json#dependencies
各種ファイルのパスについて
# 基本的な説明は `npm-folders(5)` 参照
$ npm help 5 folders
# ローカルインストール先のディレクトリ確認
$ npm root
# ローカルインストール先の、コマンドディレクトリ(bin)確認
$ npm bin
# グローバルインストール先のディレクトリ確認
$ npm -g root
# グローバルインストール先の、コマンドディレクトリ(bin)確認
$ npm -g bin
ソースコードを取得した後、package.jsonから依存関係をインストールしたい
$ ls
... package.json ...
$ npm install
dependencies, devDependenciesが両方インストールされる。devDependenciesを除外したい場合は npm install --production とする。