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.json
の scripts
項目に定義されたスクリプトは 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
参照
- npm (公式サイト), npm (Wikipedia)
- クジラ飛行机 "いまどきのJSプログラマーのための Node.jsとReactアプリケーション開発テクニック, ソシム (2017)
- 穴井宏幸, 柴田和祈, 石井直矢, 三宮肇 "React入門 React・Reduxの導入からサーバサイドレンダリングによるUXの向上まで翔泳社 (2018)