npmパッケージマネージャー入門
npm入門
npm
はNode.jsの標準パッケージマネージャーです。
2022年9月時点で、npmレジストリには210万を超えるパッケージが登録されており、地球上で最大の単一言語コードリポジトリとなっています。ほとんど何でも(ほぼ!)パッケージが存在すると言っても過言ではありません。
当初はNode.jsパッケージの依存関係のダウンロードと管理方法として始まりましたが、その後、フロントエンドJavaScriptでも使用されるツールとなっています。
TIP
Yarn
とpnpm
はnpm cliの代替手段です。こちらも検討してみてください。
パッケージ
全ての依存関係のインストール
package.json
ファイルにリストされているすべての依存関係をインストールするには、以下を実行します。
npm install
これにより、プロジェクトに必要なものがすべてnode_modules
フォルダにインストールされます。フォルダが存在しない場合は作成されます。
単一パッケージのインストール
単一パッケージをインストールするには、以下を実行します。
npm install <package-name>
さらに、npm 5以降、このコマンドは<package-name>
をpackage.json
ファイルの依存関係に追加します。バージョン5以前は、--save
フラグを追加する必要がありました。
このコマンドには、多くの場合、さらにフラグが追加されます。
--save-dev
(または-D
)は、パッケージをpackage.json
ファイルのdevDependencies
セクションに追加します。--no-save
は、パッケージをpackage.json
ファイルに保存することを防ぎます。--no-optional
は、オプションの依存関係のインストールを防ぎます。--save-optional
は、パッケージをpackage.json
ファイルのoptionalDependencies
セクションに追加します。
フラグの省略形も使用できます。
-S
:--save
-D
:--save-dev
-O
:--save-optional
devDependencies
とdependencies
の違いは、前者にはテストライブラリなどの開発ツールが含まれ、後者は本番環境でアプリケーションにバンドルされることです。
optionalDependencies
については、依存関係のビルド失敗がインストール失敗の原因にはなりません。ただし、依存関係の欠如を処理するのはプログラムの責任です。詳しくはオプションの依存関係をご覧ください。
パッケージの更新
更新も簡単に行えます。
npm update
を実行します。これにより、すべての依存関係が最新バージョンに更新されます。
特定のパッケージのみを更新することもできます。
npm update <package-name>
パッケージの削除
パッケージを削除するには、以下を実行します。
npm uninstall <package-name>
バージョン管理
npm
は、単純なダウンロードに加えて、バージョン管理も行います。そのため、パッケージの特定のバージョンを指定したり、必要なバージョンよりも高いバージョンまたは低いバージョンを要求したりすることができます。
多くの場合、ライブラリは別のライブラリのメジャーリリースのみに互換性があることがわかります。
または、最新のリリースのバグが修正されておらず、問題を引き起こしている場合があります。
ライブラリの明示的なバージョンを指定することで、全員がパッケージのまったく同じバージョンを使用できるようになり、package.json
ファイルが更新されるまで、チーム全体が同じバージョンを実行できます。
これらの場合、バージョン管理は非常に役立ちます。npm
はセマンティックバージョニング(semver)標準に準拠しています。
特定のバージョンのパッケージをインストールするには、以下を実行します。
npm install <package-name>@<version>
最新バージョンをインストールするには、以下を実行します。
npm install <package-name>@latest
タスクの実行
package.json
ファイルは、コマンドラインタスクを指定するためのフォーマットをサポートしており、以下を使用して実行できます。
npm run <task-name>
たとえば、以下の内容のpackage.json
ファイルがあるとします。
{
"scripts": {
"start": "node index.js",
"test": "jest"
}
}
Webpackを実行するために、この機能を使用することが非常に一般的です。
{
"scripts": {
"watch": "webpack --watch --progress --colors --config webpack.conf.js",
"dev": "webpack --progress --colors --config webpack.conf.js",
"prod": "NODE_ENV=production webpack -p --config webpack.conf.js"
}
}
そのため、忘れやすい、またはタイプミスしやすい長いコマンドを入力する代わりに、以下を実行できます。
npm run watch
npm run dev
npm run prod