npmってなんですか?

npmってなんですか?

とりあえず、「what is npm?」でググってみました。
what is npm?

世界一大きいソフトウェアライブラリ

  • npmは世界で最も大きいソフトウェアライブラリです。
  • 800000以上のパッケージが登録されています。
  • OSS開発者は開発したソフトウェアをシェアするためにnpmを使用しています。
  • たくさんの団体が開発の管理にnpmを使っています。

ソフトウェアパッケージマネージャー

  • npmはNode Package Managerの略です。
  • 全てのnpmパッケージはpackage.jsonというファイルで管理されます。
  • package.jsonJSON形式で記述されなければなりません。
  • package.jsonには最低限nameversionの情報がなければなりません。

多分、イメージとしてはJavaでいうgradleやmavenRubyのgemみたいなもの・・かな?

npmを使ってみる

どんなものなのかを知っただけではその技術や知識を身につけたとは言えません。
ので、実際にnpmのコマンドを叩きつつ学んでいきたいと思います。
なお、 こちら が本家のドキュメントになりますが、見ての通りたくさんのコマンドがありますので個人的によく使うコマンドに絞って紹介していきます。

npm init

npm initは、npmの初期化コマンドです。
npm initを実行するとpackage.jsonが作成されます。
なお、実際にコマンドラインnpm initを実行すると、packge nameversionなどを聞かれますが、わからなければひたすらEnterキーを連打すれば大丈夫です。
最後に、Is this OK? (yes)という表示が出たら、yesとタイプしてEnterを押せば完了です。
ここまで完了すると以下のようなファイルが作成されていると思います。

{
  "name": "javascript",
  "version": "1.0.0",
  "description": "",
  "main": "main.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

なお、一番上の"name":"javascript"については、npm initを実行したディレクトリの名前となりますので、実行環境によって差異が発生します。

オプション

一応オプションです。

-- y

後出しになりますが、npm init --yとすれば上記の質問は全てスキップされます。
(全て単にEnterを押した時と同じ挙動になります。)

npm install

それではpackage.jsonができたところで実際に何かパッケージをインストールしてみましょう。

基本の使い方

npm install <package name>
の形式で、<package name>にはインストールしたいパッケージ名を入力します。例えば、

npm install lodash

とすると、lodashというパッケージがインストールできます。 インストールが完了すると、package.jsonに下記のような追記がされます。

  "dependencies": {
    "lodash": "^4.17.20"
  }

また、package.jsonと同じディレクトリに、node_modulesというディレクトが作成され、以後npm installされたパッケージはこのディレクトリに追加されていきます。

オプションなど

--save-dev

--save-devを付けると、develop環境のみで使用可能な状態となるようパッケージがインストールされます。
実際に、npm install lodash --save-devと実行すると、

  "devDependencies": {
    "lodash": "^4.17.20"
  }

このように、dependenciesではなくdevDependenciesにインストールされていることがわかります。 *1

-g

-gをつけるとグローバルインストールとなります。

npm install lodash -g

グローバルにインストールされると、どこでもこのパッケージが使用できるようになります。
ただ、一般的にプロジェクトで使用するだけのパッケージはグローバルインストールしない方がいいでしょう。
他方で、例えばコマンドラインをインストールする(今回のnpmコマンドなど)はグローバルインストールするのが良いかと思います。

パッケージを指定しない場合

単に、

npm install

とすることもできます。
この場合、そのプロジェクトに必要な・・言い換えるとpackage.jsonに記述されている各種パッケージがインストールされます。
例えば、チーム開発をしている場合に他の方がパッケージを追加し、package.jsongithubなどの共有リポジトリにあげた後などに使用するかと思います。

エイリアス

  • npm i
  • npm add

最後にエイリアスも紹介しておきます。
エイリアスとは別名のことです。つまり、

npm install lodash
npm i lodash
npm add lodash

上記の3つのコマンドは全て同じ意味になります。

npm uninstall

npm uninstallは、コマンド名の通り、パッケージのアンインストールを行います。

基本の使い方

npm uninstall lodash

もし、「このパッケージ不要だな」と思ったらこちらのパッケージを使用しましょう。
間違っても、node_moduleディレクトリから直接削除しないように。
npm uninstall lodashを使用すれば安全にアンインストールができます。

オプション

--save

dependenciesからパッケージを削除します。

--save-dev

devDependenciesからパッケージを削除します。

--save-optional

optionalDependenciesからパッケージを削除します。

--no-save

pakcage.jsonファイルからは該当パッケージを削除しません。
→node_modulesディレクトリからは削除されますが、package.jsonには残ったままになります。(どういうシーンで使うのかはよくわかりません。 )

npm update

npm updateを使用すると、インストール済みのパッケージをアップデートすることができます。

npm update <package_name>

特定のパッケージをアップデートする場合は上記のコマンドを実行します。
また、下記のように特にパッケージを指定しなければ、全てのパッケージがアップデートされます。

npm update

npm help

ヘルプを見ることができます。 特定のコマンドのヘルプを見る場合はnpm <command> -hとします。

npm install -h

気になったエラー(ワーニング)

npm WARN <name@version> No repository field.

以下を追加することで解消されました。

  "repository": {
    "private": true
  }

この記事が参考になります。)

終わりに

とりあえず、基本的な使い方として、init install uninstallをまとめてみました。
他にもたくさんのコマンドがあるので、使う機会があれば適宜記事にしたいと思います。

参考

*1:dependenciesとdevDependenciesについてはそのうちまとめます。