npmの使い方について

Kazunori Kamiya
13 min readNov 17, 2017

--

ここでは、以下の記事を元にnpmの使い方について解説していきます。

一部省略していますが、その点についてはご理解ください。

Installing Node.js

このページから、必要なバージョンのものをインストールしてください。
Linuxの場合はパッケージマネージャーを使ってインストールすることも可能で、その方法についてはここを見てください。

インストールが済んだら、どこにインストールされたのかとバージョンの確認をしてみましょう。

インストールがきちんと完了したことを確認するには、NodeのREPLを実行してみるのがオススメです。

Node.jsの方が問題なくできているなら、今度はnpmの方も確認してみましょう。

Node Packaged Modules

npmは、ローカルあるいはグローバルモードでパッケージをインストールすることができます。
ローカルモードでは、現在使用しているディレクトリの親のところのnode_modulesフォルダにパッケージをインストールします。
この場所は、カレントユーザーによって所有されています。
グローバルパッケージは、{prefix}/lib/node_modules/というルート({prefix}は大抵/usr/か/usr/localのどちらか)が所持しているところにインストールされます。
これは、グローバルモードでパッケージをインストールするにはsudoを使う必要があるということで、このことによりセキュリティ問題と同じような第三者の依存性を解決している時にパーミッションエラーを引き起こします。
そのため、これを変更する必要があります。

Changing the Location of Global Packages

まず、npm configの出力がどうなるか見てみましょう。

これはインストールに関する情報を示してくれるもので、続いて現在のグローバルロケーションを知っておくことが重要になります。

これこそが我々が変更したい接頭辞で、ホームディレクトリにグローバルパッケージをインストールすることについても同様です。
これを実行するには、ホームフォルダに新しくディレクトリを作成する必要があります。

この変更を行うことで、グローバルノードパッケージがインストールされる場所を変えることができました。
これはまた、.npmrcファイルをホームディレクトリに作成しています。

まだルートが所持している場所にあるnpmがありますが、我々が有利に扱える場所にグローバルパッケージのロケーションを変更しました。
ここでもう一度npmをインストールする必要があるのですが、今回は新たにユーザーが保持している場所で行います。
これにより、最新バージョンのnpmをインストールすることも可能です。

最後に、.node_modules_global/binを$PATHの環境変数に加える必要があり、そうすることでコマンドラインからグローバルパッケージを実行できるようになります。
また、以下の行を.profileか.bash_profileもしくは.bashrcに加えて、ターミナルを再起動してください。

export PATH="$HOME/.node_modules_global/bin:$PATH"

ここまでくれば、.node_modules_global/binが最初に見つかってnpmの正しいバージョンが使えるようになっているはずです。

Installing Packages in Global Mode

グローバルモードでは、最初はnpmパッケージ自身1つしかインストールできません。
そのため、それを変更してUglifyJSをインストールしましょう。
— globalというフラッグを使いますが、それは-gと省略可能です。

上の画像を見ると追加でパッケージがインストールされていますが、これはUglifyJSの依存性になります。

Listing Global Packages

npm listコマンドを使うと、インストールしたグローバルパッケージをリスト化できます。

$ npm list --global
home/sitepoint/.node_modules_global/lib
├─┬ npm@5.0.2
│ ├── abbrev@1.1.0
│ ├── ansi-regex@2.1.1
│ ├── ansicolors@0.3.2
│ ├── ansistyles@0.1.3
....................
└─┬ uglify-js@3.0.15
├─┬ commander@2.9.0
│ └── graceful-readlink@1.0.1
└── source-map@0.5.6

ただこれは非常に長ったらしいので、 — depth=0というオプションを使いましょう。

こうすることで、インストールしたパッケージとその情報だけを表示することができます。

グローバルモードでインストールしたパッケージは全てコマンドラインから使用可能で、例えばUglifyパッケージを使ってexample.jsをexample.min.jsに小さくするには以下のようにします。

$ uglifyjs example.js -o example.min.js

Installing Packages in Local Mode

ローカルでパッケージをインストールするには、通常package.jsonファイルを使用します。
実際にやってみましょう。

Enterキーを押していき、最後にyesと打つことでpackage.jsonプロジェクトのルート部分でpackage.jsonファイルが作成されます。

注意:package.jsonファイルをササっと生成するには、npm init — yというコマンドを使ってみてください。

では、次にUnderscoreをインストールしてみましょう。

ここで、ロックファイルが生成されたことに注意してください。
後ほど、この場所にまた戻ってきます。

ここでpackage.jsonファイルを確認すると、dependenciesフィールドが追加されたことが確認できるはずです。

Managing Dependencies with package.json

ここまでで、アンダースコアのv1.8.3がインストールされたことが確認できたと思います。

プロジェクトのルートのところでtest.jsファイルを作成し、以下のものをそのファイルに追加してみてください。

const _ = require('underscore');
console.log(_.range(5));

更にnode test.jsでそのファイルを実行して、[0, 1, 2, 3, 4]という結果が出力されることを確認してください。

Uninstalling Local Packages

npmはパッケージマネージャーなので、パッケージを消去することもできます。
現在のアンダースコアのパッケージに問題があると仮定して、それを消去して1つ古いバージョンのものをインストールしてみましょう。

Installing a Specific Version of a Package

では、続いて必要なバージョンのアンダースコアをインストールしましょう。
@を使うことで、バージョンを指定することができます。

Updating a Package

アンダースコアのパッケージにおいて、アップデートが可能かどうかチェックしてみましょう。

Searching for Packages

このチュートリアルでは、mkdirコマンドを何回か使っています。
同じことができるノードパッケージがあるかどうか、npm searchを使って探してみましょう。

mkdirpというものがあるので、インストールしましょう。

続いてmkdir.jsというファイルを作成して、以下のコードを貼り付けてください。

const mkdirp = require('mkdirp');
mkdirp('foo', function (err) {
if (err) console.error(err)
else console.log('Directory created!')
});

そしてそれを、ターミナルから実行しましょう。

Re-installing Project Dependencies

まず最初に、もう1つパッケージをインストールしましょう。

package.jsonをチェックしてみましょう。

ここで、依存性が自動でアップデートされたことに注意してください。
以前のバージョンのnpmでは、package.json内の依存性を保存するのにnpm install request — saveというコマンドを実行する必要がありました。
package.json内にそれを保存せずパッケージをインストールしたい場合は、 — no-saveという引数を使えばいいです。

ここでプロジェクトのソースコードを別のマシンにコピーしたと仮定して、依存性をインストールするとします。
node_modulesフォルダをまず削除して、続いてnpm installを実行しましょう。

$ rm -R node-modules
$ npm list
project@1.0.0 /home/sitepoint/project
├── UNMET DEPENDENCY mkdirp@^0.5.1
├── UNMET DEPENDENCY request@^2.81.0
└── UNMET DEPENDENCY underscore@^1.8.2

npm ERR! missing: mkdirp@^0.5.1, required by project@1.0.0
npm ERR! missing: request@^2.81.0, required by project@1.0.0
npm ERR! missing: underscore@^1.8.2, required by project@1.0.0

$ npm install
added 57 packages in 1.595s

node_modulesフォルダを見れば、これらが再生成されたことが確認できるはずです。
こうして、他者と簡単にコードをシェアすることができます。

Managing the Cache

npmでパッケージをインストールした場合それはコピーなので、次回それをインストールする場合は、ネットワークに繋ぐ必要はありません。
コピーは、ホームパス内の.npmディレクトリで見つかります。

$ ls ~/.npm
anonymous-cli-metrics.json _cacache _locks npm registry.npmjs.org

このディレクトリには古いパッケージが何度も溜められていくので、時折クリーンアップしてあげると効果的です。
npmのバージョン5以降は、 — forceのオプションが必須になりました。

npm cache clean --force

システム上にクリーンアップしたい多数のノードプロジェクトがある場合は、ワークスペースから全てのnode_moduleフォルダを消すこともできます。

find . -name "node_modules" -type d -exec rm -rf '{}' +

Aliases

ここまでやってきてわかるように、npmコマンドには色々な実行方法があります。
下に、よく使われるものをリストアップしました。

  • npm i <package> – ローカルパッケージをインストール
  • npm i -g <package> – グローバルパッケージをインストール
  • npm un <package> – ローカルパッケージをアンインストール
  • npm up – npmでパッケージをアップデート
  • npm t – テストを実行
  • npm ls – インストールされたモジュールをリスト化
  • npm ll or npm la – モジュールをリスト化すると同時に、追加できるパッケージ情報を表示

以下のようにすれば、一度に複数のパッケージをインストールできます。

$ npm i express momemt lodash mongoose body-parser webpack

npm helpコマンドを使えば、もっと色々なコマンドについて知ることができます。
この記事を読めば、もっと詳しく知ることもできるでしょう。

Version Managers

同じマシンで、Node.jsの多数のバージョンを管理できるツールがあり、その1つがnで、nvmというものもあります。
興味があれば、この記事をチェックしてみてください。

--

--