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 install
npm help root
npm help bin
npm help 5 folders
npm 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
とする。