npm installの使い方とnpm ciの使い方と違い
npm installコマンド,npm ciコマンドの使い方です。
$ npm init
という使い方です。ここから始まります。
この配下をnpm管理下にするということです。package.jsonが作成されます。
次にツール(パッケージとかモジュールとか呼ばれる)を入れます。gulpを入れてみます。
$ npm install --save-dev gulp
とタイプします。
「node_modules」というフォルダが作成され、その配下にgulpとそれに依存するツールが全てインストールされます。
「npm install
」は、「npm i
」と省略することが可能です。
--save-dev
npm installする際に「–save-dev」を付けると、「開発中のみ使用するツール」という意味になります。
このインストールをすると、package.jsonが変わっていると思います。
見て分かるように、gulpは「dependencies」ではなく、「devDependencies」に追加されているのがわかります。
本番の時にいらないツール類(mocha,sinon,chaiなどテストで使用するものなど)は「--save-dev
」を付けてインストールします。
ちなみに、--save-dev
は-Dと短縮することが可能です。(-Dオプションは案外知られていません)
アンインストール
$ npm uninstall --save-dev gulp
とタイプします。
-g
「-g」をつけると、グローバルインストール、というインストールになります。通常通りインストールされ、パスも通るのでどこのディレクトリに移動してもそのまま使えます。package.jsonに変更はありません。
$ npm install chai -g
「-g」をつけないインストールを、ローカルインストールといいます。
この場合もアンインストールはinstallをuninstallに変えるだけです。
$ npm uninstall chai -g
グローバルインストールしたモジュールを確認するにはlsコマンドを使用します。
$ npm ls -g --depth=0
npm install
このコマンドを実行すると、package.jsonの依存関係(dependenciesやdevDependencies)を見て、全てインストールします。
チームで開発する場合はpackage.jsonの依存関係はよく追加されるので、コミット対象となると思います。
誰かが追加した依存関係をインストールする為には、npm install
と実行する必要がでてくるのです。※開発時に困るケースが多々あるのでnpm i
は使用しない場合が多いです
バージョン指定してインストールする
パッケージのバージョン最新をインストールしたくない場合ってありますよね。
そう言う場合はバージョン指定してインストールすることが出来ます。
npm install class-validator@0.9.0
@バージョンとすればそのバージョンをインストールする事が可能です。
ここで言葉の定義についてです。
0.9.1のそれぞれについて以下のように呼ぶことが多いです。セマンティックバージョニングと言います。
バージョン | 呼称 |
---|---|
0 | メジャーバージョン |
9 | マイナーバージョン |
1 | パッチバージョン |
^(キャレット)と~(チルダ)の違い
npmのメジャーバージョンが5になってからパッケージをインストールするとデフォルトで^(キャレット)がつくようになりました。
~0.9.1と書いていると、0.9.1から0.9.9までバージョンが上がることを許容します。
^1.1.1と書いていると、1.1.1から1.9.9までバージョンが上がることを許容します。
バージョン固定したい
npm install
すると勝手に^(チルダ)がつきますが、これは「オープンソースの開発者がマイナーバージョンアップで互換性を壊すような真似はしない」ことが前提です。ですが、実際そうでもないモジュールが存在します。
なのでバージョン固定したい、というケースがあります。
package-lock.jsonがnpm ver5.x.xから追加されましたが、こちらもバージョンを固定する追加機能です。
npm shrinkwrap
コマンドでnpm-shrinkwrap.jsonを作成することによってバージョンが固定されるようになります。
npmのバージョン確認方法
npm -v
で確認できます。
$ npm -v 9.5.1
npm ciの使い方とnpm installとの違い
npm install
するとnode_modulesが更新される可能性があるため、package-lock.jsonが変更される可能性があります。
このnode_modulesが曲者で、更新されてしまうと動作が変わってしまったりすることが多々あるので、npm installするよりnpm ciした方が良い場合があります。
npm ci
はpackage-lock.jsonからnode_modulesを作成します。
例えばプロジェクトに新規参画者はpackage.jsonからnpm install
してnode_modulesを作成するよりもpackage-lock.jsonからnode_modulesを再作成するnpm ci
する方が良いです。
理由は以下です。
- node_modulesを削除してからインストールする
- package-lock.jsonが更新されない(package-lock.jsonを元にnode_modulesを再作成するため)
- package.jsonとpackage-lock.jsonの整合性チェックが行われる
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント