その他

【Node.js】npmでグローバルインストールをしない方が良い理由

投稿日:

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 した場合は開発者とみなされ、インストールされます。

-その他
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

Gulpで複数ディレクトリのSCSSを自動コンパイルする方法!

Gulpは様々なタスクを実行するためのNode.jsで開発されているアプリケーションです。今回はGulpを利用して、SCSSを自動コンパイルする方法をご紹介したいと思います。 準備 プロジェクトのルー …

【Mac】npmでpermission deniedが発生した場合の対処方法

“npm install”や”npm install -g”で何かをインストールしようとした際に”permission denied&#82 …

【WordPress】使いにくい新エディタをプラグインで旧式に戻そう!

2018年12月にWordpressのバージョンが5.0へアップデートされましたが、とにかく使いづらいの一言です。久しぶりにブログ投稿でもしようかと思った時、新バージョンにアップグレードしておくかと思 …

CSSフレームワークのメリットとデメリットについて

今更感が少しある内容ですが、CSSフレームワークと言えば、Bootstrap、UIkit、Bulmaなどが有名ですよね。その他でも、ミニマムフレームワークとして、最小限の機能が備えられた物もありますね …

【レビュー】Softbank Airの速度は速いのか?それとも遅い?

最近、引っ越しをする機会があったのですが、インターネット回線をどうしようと悩んでいたところ、ソフトバンク光と契約する事になりました。ソフトバンク光にしたきっかけとしては、Softbank Airが開通 …