Node.js のパッケージ管理ができる npm の使い方についてまとめました。パッケージの開発については触れていません。
npmのインストール
npm は Node.js にインストールされています。Homebrew であればbrew install node
で直接インストールできますが Node.js のバージョン管理ツールであるnvm
やnodebrew
を使いたい場合は以下を参照してください。
Node.jsのバージョン管理ツールであるnvmのインストールと使い方
nodebrewのインストールとコマンドなど使い方まとめ
npm | GitHub の README に記述のあるインストールスクリプトは Node.js 自体がインストールされている必要があります。
npmのアップデート
Node.js にインストールされている npm はバージョンが古いためバージョンを上げるには以下のコマンドを実行します.
$ npm -v 3.10.10 $ npm install npm@latest -g $ npm -v 5.1.0
パッケージインストール
パッケージをインストールするにはinstall
またはエイリアスのi
を使用します。
Warning が表示されていますがpackage.json
(この後説明します)が無い状態で実行しているためです。この場合は最新のバージョンがインストールされます。
$ npm install lodash npm WARN saveError ENOENT: no such file or directory, open '/home/vagrant/npm_test/package.json' npm notice created a lockfile as package-lock.json. You should commit this file. npm WARN enoent ENOENT: no such file or directory, open '/home/vagrant/npm_test/package.json' npm WARN npm_test No description npm WARN npm_test No repository field. npm WARN npm_test No README data npm WARN npm_test No license field. + lodash@4.17.4 added 1 package in 1.731s
インストールしたパッケージはカレントディレクトリ配下のnode_modules
に格納されます。Ruby の Bundler に馴染みがあればグローバルにインストールされると思うかもしれませんがデフォルトはローカルです。
$ tree -a -L 2 . ├── index.js ├── node_modules │ └── lodash └── package-lock.json 2 directories, 2 files
インストールしたパッケージを使用するテストスクリプトindex.js
を作成します。
var lodash = require('lodash'); var output = lodash.without([1, 2, 3], 1); console.log(output);
node
コマンドでスクリプトファイルを実行しましょう。以下の結果になれば成功です。
$ node index.js [ 2, 3 ]
require
したパッケージはどのように読み込まれてるのか気になります。モジュールを探すパスは以下のようになっており、カレントディレクトリから始まりグローバルまでサーチしています。
$ node > global.module.paths [ '/home/vagrant/npm_test/repl/node_modules', '/home/vagrant/npm_test/node_modules', '/home/vagrant/node_modules', '/home/node_modules', '/node_modules', '/home/vagrant/.node_modules', '/home/vagrant/.node_libraries', '/home/vagrant/.nvm/versions/node/v6.11.0/lib/node' ] > .exit
CLI ツールなどをインストールした場合はnode_modules/.bin
配下に実行ファイルが格納されます。実行する場合は PATH を通す必要があります。
$ tree -a -L 3 . ├── index.js ├── node_modules │ ├── .bin │ │ └── bower -> ../bower/bin/bower │ └── bower ...
グローバルインストール
パッケージをグローバルにインストールするには-g
または--global
オプションを付けます。
$ npm install -g gulp /home/vagrant/.nvm/versions/node/v6.11.0/bin/gulp -> /home/vagrant/.nvm/versions/node/v6.11.0/lib/node_modules/gulp/bin/gulp.js + gulp@3.9.1 added 185 packages in 18.643s
パッケージ管理
ローカルにインストールされるパッケージを管理するにはpackage.json
を使用します。npm init
を実行すると対話形式で設定する項目を入力する必要がありますが、--yes
または-y
オプションを付けると現在のディレクトリの情報から作成されます。
$ npm init -y Wrote to /home/vagrant/npm_test/package.json: { "name": "npm_test", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC" }
init コマンドで作成される package.json のデフォルト値を設定しておくこともできます。
$ npm set init.author.email "hoge@example.com" $ npm set init.author.name "tasukujp" $ npm set init.license "MIT" $ cat ~/.npmrc init.author.email=hoge@example.com init.author.name=tasukujp init.license=MIT $ npm init -y ... "keywords": [], "author": "tasukujp <hoge@example.com>", "license": "MIT" }
package.json を作成した状態でパッケージをインストールするとdependencies
に自動で追加されます。
$ npm install lodash ... "dependencies": { "lodash": "^4.17.4" } }
install 時に--save-dev
オプションを使うとdevDependencies
に追加されますが、省略した場合のデフォルトは--save-prod
でdependencies
に追加されます。
package.json が存在している既存プロジェクトを開発する場合などは、npm install
のみ実行してください。ファイルに記述されている依存関係をみてパッケージがインストールされます。
init | npm Documentation
package.json | npm Documentation
ここまで触れていませんでしたがnpm install
すると生成されるpackage-lock.json
がある場合、npm install
するとファイルに書かれた固定バージョンでインストールされます。
lodash
の最新バージョンは4.17.4
なので package.json の指定が^4.17.0
であればマイナーバージョンの最新を取得してくるはずですが、package-lock.json に従って4.17.0
がインストールされます。
// package-lock.json "lodash": { "version": "4.17.0", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.0.tgz", "integrity": "sha1-k/RGblq3PlofEhbDTuoRU18KjfU=" } // package.json "dependencies": { "lodash": "^4.17.0" }
$ npm ls npm_test@1.0.0 /home/vagrant/npm_test └── lodash@4.17.0
package-lock.json | npm Documentation
パッケージのアップデート
バージョンのアップデートをしたい場合はnpm update
を実行します。package.json のバージョン指定に従って最新バージョンにアップデートされます。その前にnpm outdated
でバージョンの差異を確認してみましょう。
$ npm outdated Package Current Wanted Latest Location lodash 4.17.0 4.17.4 4.17.4 npm_test $ npm update + lodash@4.17.4 updated 1 package in 1.719s
最新のパッケージにアップデートされて package-lock.json のバージョンが更新されました。package.json は変わりません。
// package-lock.json "lodash": { "version": "4.17.4", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" }
outdated | npm Documentation
update | npm Documentation
グローバルアップデート
グローバルにインストールしたパッケージのアップデートはインストールと同様に-g
オプションを付けます。
$ npm outdated -g --depth=0 $ npm update -g <package>
パッケージのアンインストール
アンインストールはnpm uninstall
を実行します。
$ npm uninstall lodash removed 1 package in 0.314s
package.json の依存関係からも取り除かれています。
"dependencies": {}
グローバルアンインストール
グローバルにインストールしたパッケージのアンインストールはインストールと同様に-g
オプションを付けます。
$ npm uninstall -g gulp removed 185 packages in 2.139s