npmについてまとめました。
npmについて理解すべきことは以下です。
- npmはJavaScript、Node.jsのパッケージ管理システム
- npmを使うことで、パッケージの依存関係を解決して管理できたり、ビルドやテストなどのスクリプトを実行できる
- npmはNode.jsをインストールすることで一緒にインストールされる
- npmの基本的なコマンド
- パッケージをインストールする方法は、npmのコマンドで直接インストールする方法と、
package.json
に記述してコマンドを実行する方法の2種類ある - パッケージはシステム全体で使えるようにするグローバルインストールと、プロジェクト内で使うためのローカルインストールがある
npm i
に--save-dev
か-D
をつけて実行すると、開発時のみ使うパッケージをインストールし、オプションをつけないと主に本番環境で使うパッケージをインストールするpackage.json
はnpmの設定ファイルで、プロジェクトの情報や、インストールしたパッケージのリスト、スクリプトなどが記述されるpackage-lock.json
はインストールされたパッケージのバージョンや依存関係が記述されるファイルで、基本的に直接編集しないpackage-lock.json
がディレクトリに存在する状態でnpm i
を実行することで、パッケージを再現できる- 実際にインストールされたパッケージは
node_modules
に格納される - パッケージをインストールするときのバージョン指定の記法
npx
というコマンドを使うことで、ローカルにパッケージがインストールされてなくても一時的にパッケージを実行できる
npmとは
npmとはNode.jsのパッケージ管理システム。JavaScriptでも使えて、ReactやNext.jsなどを使うためにも必須のツール。
パッケージとは、何らかの機能がまとまったものでライブラリともいう。パッケージ管理システムはそれらのパッケージをインストールしたり、削除したりできるツール。
npmを使う目的
npmを使う主な目的は以下のもの。
依存関係とは、Aというパッケージを使うためには別のBやCというパッケージが必要であるというパッケージ同士の関係のこと。
npmが使われる前は必要になるすべてのパッケージを1つずつインストールしなければならなかったが、npmによって依存関係も含めてインストールできるようになった。
インストール
npmはNode.jsをインストールすると一緒にインストールされて使えるようになる。
Node.jsはnodenvというNode.jsをインストールするためのツールを使うのがおすすめ。
nodenvはプロジェクトごとでインストールするNode.jsのバージョンを切り替えることができる。
npmの基本的なコマンド
コマンド | 意味 |
---|---|
npm init | npmを初期化して、package.jsonを作成する |
npm init -y | npm init実行時に聞かれる質問をスキップして初期化する |
npm install [package] または npm i [package] | パッケージをインストールする |
npm i -g [package] | パッケージをグローバルにインストールする |
npm i --save-dev [package] または npm i -D [package] | 開発時に必要なパッケージをインストールする |
npm remove [package] | パッケージを削除する |
npm run [script] | npm scriptを実行する |
npm update [package] | 特定のパッケージのバージョンを最新の安定版に更新する(package-lock.jsonのバージョンは更新しない) |
npm upgrade | 全てのパッケージのバージョンを最新の安定版に更新し、package-lock.jsonのバージョンも更新する |
npm -v | npmのバージョンを確認する |
グローバルインストールとローカルインストール
npmのパッケージをインストールするとき、npm i -g
でシステム全体にインストールするグローバルインストールと、npm i
でプロジェクト内にインストールするローカルインストールの2種類の方法がある。
基本的にはローカルインストールを使う。
package.jsonとは
package.json
とは、npmの設定ファイル。
package.json
はnpm init
を実行すると作られる。
デフォルトでは以下の内容で作られる。
{ "name": "react-environment-practice", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC" }
name
name
はプロジェクトの名前を記述する。
version
version
はプロジェクトのバージョンを指定する。
description
description
はプロジェクトの説明を記述する。
main
main
はパッケージが外部に公開されたときに、どのファイルがそのパッケージのメインとなるファイルであるかを指定する。
scripts
scripts
はプロジェクトで実行可能なスクリプトを指定する。
npm run [script]
とすることで、スクリプトを実行できる。
スクリプトを使うことで、ビルドやテストなどのコマンドを設定して実行することができる。
dependencies
dependencies
はnpm i
でインストールしたパッケージが記述される。
devDependencies
devDependencies
はnpm i -D
でインストールした開発時のみに必要なパッケージが記述される。
主にビルドやテスト、デバッグなどに使うパッケージは-D
をつけてインストールする。
keywords
keywords
はプロジェクトに関連するキーワードのリストを指定するためのもの。
author
author
はプロジェクトの作者の名前が記述される。
license
licence
はプロジェクトのライセンスを指定する。
パッケージのバージョンについて
パッケージをインストールするときにはバージョンを指定することができる。記号を使うことでさまざまなバージョンの指定の仕方ができる。
npmのパッケージのバージョンは3つの数字をピリオドで区切る。 3つの数字はそれぞれ[major.minor.patch]という意味を持つ。これをセマンティックバージョンという。
majorは互換性のない大規模な変更が行われた場合に数字が上がる。
minorは後方互換性のある機能の追加や変更が行われたときに数字が上がる。
patchはバグの修正や既存の機能に対する小さな変更などが行われたときに数字が上がる。
# バージョンを指定しないと最新のバージョンがインストールされる npm i yarn # 指定したバージョンがインストールされる npm i yarn@1.0.0 # 指定したバージョンより新しい最新のバージョンがインストールされる npm i yarn@>1.0.0 # 指定したバージョンより古いもので最新のバージョンがインストールされる npm i yarn@<1.0.0 # 指定したバージョン以上の最新のバージョンがインストールされる npm i yarn@>=1.0.0 # 指定したバージョン以下の最新のバージョンがインストールされる npm i yarn@<=1.0.0 # マイナーバージョンが固定された範囲でのインストールを指定する npm i yarn@~1.0.0 # 1.0.0 ~ 1.1.0の中で最新のものがインストールされる # マイナーバージョンとパッチバージョンが固定された範囲でのインストールを指定する npm i yarn@^1.0.0 # 1.0.0 ~ 2.0.0未満の範囲の中で最新のものをインストールする
package-lock.jsonとは
package-lock.json
はnpm i
実行時にインストールしたパッケージのバージョンや依存関係が記述されるファイルで、基本的に触らない。
package-lock.json
を使ってnpm i
でパッケージをインストールすることで、別の環境でも必要なパッケージとバージョンを再現でき、環境を統一できる。
node_modules
node_modules
はnpm i
実行時に作成される、インストールしたパッケージが実際に格納されるディレクトリ。
node_modules
はnpm i
を実行すると作成できるので、Gitでバージョン管理する場合、.gitignore
ファイルにnode_modules
を記述し、Gitの管理から外す。
npx
npxはローカルにインストールされていないパッケージを一時的に実行するコマンド。
# 使用例
npx create-react-app my-app
上記のようにnpxでコマンドを実行することで、create-react-app
をインストールせずに使える。