「$ npm installが何してるかいまいち理解していないけれどもとりあえず書いてあったからやる」の状態を脱するために色々調べた記録。
この2つ見ておけば大体のことは解る。
https://www.webprofessional.jp/beginners-guide-node-package-manager/
https://qiita.com/righteous/items/e5448cb2e7e11ab7d477
パッケージとは?
Node.jsのプロジェクト1つはパッケージ1つと対応する。
package.jsonファイルを含むファイル群をパッケージと称し、package.jsonファイルがある階層がrootディレクトリとなる。
package.json
ローカルインストールする際に自動生成されるファイル。依存関係にあるパッケージがずらっと書かれる場所。
{
"name": "app",
"version": "0.1.0",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"test:unit": "vue-cli-service test:unit",
"test:e2e": "vue-cli-service test:e2e",
"lint": "vue-cli-service lint"
},
"dependencies": {
"axios": "^0.19.2",
:
"vuex": "^3.1.2"
},
"devDependencies": {
"@types/chai": "^4.2.5",
:
"vue-template-compiler": "^2.6.10"
}
}
private
"private": trueとすることで、プライベートリポジトリを意図せずに公開する誤りを防ぐことができる。
main
そのパッケージを外からインポートする際(require)に入り口となるjsファイルを指定する。
script
コマンドのエイリアス。npm run コマンド名として実行できるようになる。
ただし、以下は予約語。
| start | プログラムを実行するコマンド。npm startのみで可 |
| test | テストを実行するコマンド。npm testのみで可 |
| 接頭辞pre | 接頭辞を除いたコマンドが打たれた際、その直前に実行してくれる。 |
| 接頭辞post | 接頭辞を除いたコマンドが打たれた際、その直後に実行してくれる。 |
dependencies、devDependencies
パッケージが依存する別のパッケージ。dependenciesは実行時に必須のパッケージを書き、devDependenciesには、開発環境でのみ必要なパッケージ(テストツールなど)を記述する。
バージョンの指定
バージョン番号1.2.3はそれぞれ先頭から順にMajor、Minor、Patchと呼ばれている。
| 記号 | 意味 |
|---|---|
^ |
Majorは一致。MinorとPatchは指定されたもの以上 |
~ |
MajorとMinorは一致。Patchは指定されたもの以上 |
package-lock.jsonはパッケージのバージョンを固定する目的で使用されている。
これにより、複数のdeveloperが環境構築をする際に、依存関係のモジュールのversionが合わないといったケースを避けることができる。
-
package-lock.jsonがない場合
→npm installが実行されると条件を満たす最新のパッケージがインストールされる。 -
package-lock.jsonがある場合
→ 基本package-lock.jsonに基づいてインストールされるが、package.jsonと矛盾した場合、package.jsonが優先され、実際にインストールされたバージョンがpackage-lock.jsonに書かれる。
node_modules
node_modulesファイルは、package.jsonを元にしてインストールされる各種外部パッケージの置き場であり、これは各開発者のローカルにのみある。(通常gitignoreする。)
はじめにプロジェクトの環境を作るにはnpm installコマンドを実行し、必要なパッケージをnode_modulesへ取得する。(ローカルインストール)
$ npm install //dependenciesとdevDependenciesのパッケージをインストールする。(開発環境)
$ npm install --production //dependenciesのパッケージをインストールする。(本番環境)
プロジェクトに新たにパッケージを追加する場合にはnpm install パッケージ名とする。
$ npm install パッケージ名 // 自分のローカル環境にのみインストールされる。
$ npm install --save-dev パッケージ名 //package.jsonのdevDependenciesに追記される(開発環境)
$ npm install --save パッケージ名 //package.jsonのdependenciesに追記される。(本番環境)
npmインストール
グローバルインストールとローカルインストールの2種類がある。
グローバルインストール
グローバルインストールは{prefix}/lib/node_modules/にパッケージをインストールする。({prefix}は通常/usr/か/usr/local)
$ npm install --global "パッケージ名@バージョン"
(おそらくsudo必要)
なお、バージョン番号の指定はオプション。
ローカルインストール
カレントディレクトリのnode_modulesフォルダにインストールする。
npm init
npm install "パッケージ名@バージョン"
これにより、package.jsonとpackage-lock.jsonが自動生成する。
アップデートorアンインストールしたい場合は以下。
$ npm update
$ npm uninstall
その他npmコマンド
npm outdated
$ npm outdated
Package Current Wanted Latest Location
underscore 1.8.2 1.8.3 1.8.3 project
| Current | 現在のバージョン |
| Wanted | 修正なく動作可能な最新のバージョン |
| Location | 最新のバージョン |
npm list
パッケージの一覧表示。-gとすることでglobalの一覧表示。
$ npm list
エイリアス一覧
| エイリアス | 元のコマンド |
|---|---|
| $ npm i | $ npm install |
| $ npm un | $ npm uninstall |
| $ npm up | $ npm update |
| $ npm t | $ nom test |
| $ npm -v | $ npm --version |
| $ npm install -g | $ nom install --global |
キャッシュ
npmはパッケージをインストールするときにコピーを保持し、同じパッケージが必要になったとき、ネットワークへのアクセスなく、ホームディレクトリの.npmディレクトリのコピーがキャッシュされる。
## 確認
$ ls ~/.npm
## クリア
$ npm cache clean
