npmまとめ
NPMとは
Node.jsのパッケージ(Package )を管理する(Manager)ツール
目次
コマンド一覧
npm ci
npm install
npm ci
npm install
と同様にパッケージをインストールするコマンド
npm install
と違う点
node_modules/
を削除してインストールを行うpackage-lock.json
を参照してインストールを行うため、package.json
で最新版を取得するような記述をしていても、固定バージョンのパッケージがインストールされる
環境構築の際などはnpm install
よりもこちらのコマンドを使用する方が問題なく進めることができそう
インストールオプション
最初は使い分けができず、とりあえずnpm i
とか公式に載ってるコマンドをそのまま実行しがちな部分
--global
,-g
--save-dev
,-P
--save-prod
,-D
--save-optional
,-O
--global
npmのインストール場所(以下のターミナル結果)にパッケージをインストールします。
$ npm list -g /Users/makoto.kami/.nodebrew/node/v14.16.1/lib ├─┬ npm@6.14.12 │ ├── abbrev@1.1.1 │ ├── ansicolors@0.3.2 │ ├── ansistyles@0.1.3 │ ├── aproba@2.0.0 │ ├── archy@1.0.0 │ ├─┬ bin-links@1.1.8 │ │ ├── bluebird@3.5.5 deduped │ │ ├── cmd-shim@3.0.3 deduped │ │ ├── gentle-fs@2.3.1 deduped │ │ ├── graceful-fs@4.2.4 deduped │ │ ├── npm-normalize-package-bin@1.0.1 │ │ └── write-file-atomic@2.4.3 deduped
--save-dev
開発時に利用するパッケージの場合は--save-devを指定。例えばテストツールのjasmine-coreなんかを利用するときはこちら。
package.jsのdevDependenciesの項目に記述される。
デフォルトオプション
--loglevel verbose
--loglevel verbose
ログを出力してくれる
$ npm update protobuf-js --loglevel verbose npm info it worked if it ends with ok npm info using npm@6.14.12 npm info using node@v14.16.1 npm verb npm-session 7fab1f6345ffb170 npm verb update computing outdated modules to update npm timing stage:loadCurrentTree Completed in 5440ms npm timing stage:loadIdealTree:cloneCurrentTree Completed in 37ms npm timing stage:loadIdealTree:loadShrinkwrap Completed in 1621ms npm timing stage:loadIdealTree:loadAllDepsIntoIdealTree Completed in 5134ms npm timing stage:loadIdealTree Completed in 7546ms npm timing stage:generateActionsToTake Completed in 187ms npm timing stage:executeActions Completed in 510ms npm timing stage:rollbackFailedOptional Completed in 0ms npm timing stage:runTopLevelLifecycles Completed in 14390ms npm verb exit [ 0, true ] npm timing npm Completed in 20480ms npm info ok
ライフサイクルスクリプト
特定の状況でのみ発生する特別なライフサイクルスクリプトがいくつかあります。
- prepare
- 引数なしで
npm install
を実行した時 - パッケージ公開前
prepublish
の後、prepublishOnly
の前
- 引数なしで
- prepublish
- prepublishOnly
- prepack
- postpack
事例
以下のように全員の環境でGit hooksを強制で有効化したい場合などにはprepare
でhusky install
を行うことでnpm install
の実行時にGit hooksを有効化してくれたりする
{ "scripts": { "prepare": "husky install", "lint-staged": "lint-staged" }, "lint-staged": { "*.{js,ts,vue}": [ "eslint --fix", "prettier --write" ] }, }