npm

Takami Torao Node.js 8 npm 5 #nodejs #npm
  • このエントリーをはてなブックマークに追加

概要

npm (Node package manager) は JavaScript 用のパッケージマネージャで世界最大級のソフトウェアレジストリ。JavaScript 実行環境である Node.js のデフォルトのパッケージマネージャとして使用されている。公開されている再利用可能なコードを検索したり、それらをダウンロードしプロジェクトで利用することができる。Java/Scala での Maven や Ruby の gem、Python の pip などに相当する。

npm は npm コマンドラインクライアントと npm リポジトリ (公開または有料の非公開) からなり npm, Inc. が管理している。レジストリに登録されているパッケージ数は多い。ただし審査プロセスがないため品質が低かったり、脆弱性や悪意のあるものが含まれている可能性がある。npm はそういったパッケージを取り下げるためにユーザレポートを用意している。

パッケージのスコープ

npm で導入するパッケージは実行環境のグローバルとプロジェクト固有のローカルでスコープを分けることができる。

グローバルスコープのパッケージ保存場所は通常 OS のシステムディレクトリ (全ユーザ共通) かユーザごとのディレクトリに設定されている。これは環境変数 NODE_PATH で変更することができる。グローバルスコープで参照されているディレクトリは npm root -g で表示することができる。

ローカルスコープのパッケージ保存場所はディレクトリ単位であるためプロジェクトごとにバージョンの異なるパッケージを同じ開発環境に共存させることができる。通常はプロジェクトディレクトリごとに package.json を用意しその node_modules/ 以下にパッケージが保存される。

使い方

すべてのコマンドは npm help command でリファレンスを参照することができる。

インストール

version 8 系

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
## Installing the NodeSource Node.js v8.x LTS Carbon repo...
...
sudo apt-get install -y nodejs
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
...
node --version
v8.9.4
npm --version
5.6.0

アップデート

npm のアップデート方法は以下の通り。

npm install -g npm
C:\Users\torao\AppData\Roaming\npm\npx -> C:\Users\torao\AppData\Roaming\npm\node_modules\npm\bin\npx-cli.js
C:\Users\torao\AppData\Roaming\npm\npm -> C:\Users\torao\AppData\Roaming\npm\node_modules\npm\bin\npm-cli.jste.js
+ npm@5.6.0
added 1149 packages in 225.334s
npm --version
5.6.0

プロジェクトの作成

プロジェクト用の空ディレクトリを作成し npm init で初期設定を行う。コマンドを起動するとプロジェクトに必要な情報を対話形式で入力し結果を package.json に出力する。プロジェクト情報の変更が必要であればこのファイルを修正すればよい。

>npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
package name: (playbox)
version: (1.0.0)
description:
entry point: (index.js)
test command:
git repository:
keywords:
author:
license: (ISC)
About to write to C:\Users\torao\playbox\package.json:
...
Is this ok? (yes) yes

この操作によって以下の package.json が出力される。

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

パッケージ管理

インストール

プロジェクトで使用するパッケージをインストールには npm install を使用する。グローバルスコープにインストールする場合は -g オプションを使用する (デフォルトはローカルスコープ)。--save オプションを付けるとカレントディレクトリに存在する package.json に自動で依存性の設定を追加する。

npm install --save kuromoji
+ kuromoji@0.1.1
added 5 packages in 17.155s

このコマンドで package.json には以下の項目が追加される。dependencies 項目にはプロジェクトで使用するパッケージとそのバージョンを記述する。

"dependencies": {
  "kuromoji": "^0.1.1"
}

すでに依存性の記述された package.json が存在する場合、npm install のみですべてのパッケージがインストールされる。

また開発環境時のみで必要なライブラリ (例えば Babel やテストフレームワークなど) であれば --save-dev を使用する。これは devDependencies にパッケージエントリが追加される。

パッケージ確認

npm list でローカルスコープにインストールされているパッケージを表示する。グローバルスコープは -g オプションを使用する。

npm list -g
C:\Users\torao\AppData\Roaming\npm
`-- kuromoji@0.1.1
  +-- async@2.6.0
  | `-- lodash@4.17.5
  +-- doublearray@0.0.2
  `-- zlibjs@0.2.0

アンインストール

npm uninstall package でパッケージを削除する。

npm list
playbox@1.0.0 C:\Users\torao\playbox
`-- kuromoji@0.1.1
  +-- async@2.6.0
  | `-- lodash@4.17.5
  +-- doublearray@0.0.2
  `-- zlibjs@0.2.0

npm uninstall --save kuromoji

removed 5 packages in 1.718s

--save オプションを使用することにより package.json 内の dependencies 項目からも消去する。

"dependencies": {}

コマンドの実行

package.jsonscripts 項目に定義されたスクリプトは npm run command で実行することができる。

"scripts": {
  "hello": "echo \"hello, world\""
}
npm run hello

> playbox@1.0.0 hello C:\Users\torao\playbox
> echo "hello, world"

"hello, world"

npm run のみで実行可能なスクリプトを表示する。

npm run
Scripts available in playbox via `npm run-script`:
  hello
    echo "hello, world"

設定

npm config set project:key value

npm config set playbox:port 8088

参照

  1. npm (公式サイト), npm (Wikipedia)
  2. クジラ飛行机 "いまどきのJSプログラマーのための Node.jsとReactアプリケーション開発テクニック, ソシム (2017)
  3. 穴井宏幸,‎ 柴田和祈,‎ 石井直矢,‎ 三宮肇 "React入門 React・Reduxの導入からサーバサイドレンダリングによるUXの向上まで 翔泳社 (2018)