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を強制で有効化したい場合などにはpreparehusky installを行うことでnpm installの実行時にGit hooksを有効化してくれたりする

{
  "scripts": {
    "prepare": "husky install",
    "lint-staged": "lint-staged"
  },
  "lint-staged": {
    "*.{js,ts,vue}": [
      "eslint --fix",
      "prettier --write"
    ]
  },
}

参考