npmでインストールする場合、オプションが複数存在しています。技術ブログ等でnpmを利用したパッケージのインストール方法を提示されている際、オプション付きのコマンドが用意されている場合がありますが、皆さんは何も考えずにそのまま実行していませんか?
自身が開発しているプロジェクトのパッケージ管理を有効に行うためには、インストールのオプション等を理解した上で行うのがベストです。今回はnpm installの各オプションの説明とグローバルインストールをしない方が良い理由をご紹介したいと思います。
ローカルインストールとグローバルインストールの違い
ローカルインストールは、カレントディレクトリの node_modules 配下にインストールします。つまり、ターミナルからnpm installを実行した場合、その時に開いているディレクトリ直下にnode_modulesという名前のディレクトリが作成され、その中にパッケージがインストールされていきます。
グローバルインストールは、システムディレクトリの node_modules 配下にインストールします。システムディレクトリは環境によって異なるのですが、例えば/usr/local/lib/node_modulesというディレクトリにパッケージがインストールされます。
これらの違いは、ローカルインストールの場合はプロジェクト内のpackage.jsonに必要なパッケージとして自動的に記載されますので、誰かがあなたのプロジェクトを引き継いだ時にパッケージ不足等の問題に遭遇する可能性が無くなります。それに比べて、グローバルインストールされたパッケージがプロジェクト内で利用している場合、それがプロジェクトに必要なパッケージという事を他者が気付くのは困難です。
つまり、あなたしか利用しないパッケージである事が分かっている、もしくは他者が必要なパッケージを把握できる場合、グローバルインストールで問題はありませんが、他者が利用する可能性のあるものは、ローカルインストールを利用するのが好ましいと言えます。
ローカルインストールが好ましい理由
すでに察しの良い方は理解していると思いますが、ローカルインストールが好ましい理由としては、プロジェクトが依存しているパッケージをpackage.jsonにて管理する事ができるため、必要なパッケージを平易に用意する事ができます。言い方を変えれば、グローバルインストールを利用しない事でプロジェクトを様々な環境で動かしやすい状態にする事が出来ます。
npm installを実行すれば、必要なパッケージを自動で揃えてくれる。とてもストレスフリーで素晴らしいと思いませんか?
npm installのオプション
npm installを実行する際、いくつかのオプションを設定する事が可能です。
npm install パッケージ名 –no-save
package.json に書き込まない場合に指定します。npm4 までは package.json に書き込まないのがデフォルトでしたが、npm5 からは –save がデフォルトとなりました。
npm install パッケージ名 –save
依存パッケージの場合に指定します。package.json の dependencies に記録されます。このパッケージを誰かがnpm installしたときに依存パッケージとしてインストールされます。
こちらはnpm5からデフォルトで使用されているオプションとなります。npmが5以上であれば、指定する必要はありません。
npm install パッケージ名 –save-optional
依存はするけれど必須ではないパッケージの場合に指定します。package.json の optionalDependencies に記録されます。npm installでインストールされますが、インストールに失敗してもスルーされます。
npm install パッケージ名 –save-dev
テストツールなど、開発者が使用するパッケージの場合に指定します。package.json の devDependencies に記録されます。このパッケージを npm install しても、インストールされません。ただし、パッケージを Git から clone して npm install した場合は開発者とみなされ、インストールされます。