npmパッケージマネージャー入門

npm入門

npmはNode.jsの標準的なパッケージマネージャーです。

2022年9月時点で、npmレジストリには210万を超えるパッケージが登録されており、地球上で最大の単一言語コードリポジトリとなっています。ほとんどすべてのものに対応するパッケージが存在すると言っても過言ではありません。

当初はNode.jsパッケージの依存関係のダウンロードと管理を目的としていましたが、その後、フロントエンドJavaScriptでも使用されるツールとなりました。

Yarnpnpmはnpm cliの代替手段です。こちらもご検討ください。

パッケージ

npmはプロジェクトの依存関係のダウンロードを管理します。

すべての依存関係のインストール

プロジェクトにpackage.jsonファイルがある場合、以下を実行すると

プロジェクトに必要なものがすべてnode_modulesフォルダにインストールされ、まだ存在しない場合は作成されます。

単一パッケージのインストール

特定のパッケージをインストールするには、以下を実行します。

npm install <package-name>

さらに、npm 5以降、このコマンドは<package-name>package.jsonファイルのdependenciesに追加します。バージョン5以前は、--saveフラグを追加する必要がありました。

このコマンドには、多くの場合、さらに多くのフラグが追加されます。

  • --save-devは、package.jsonファイルのdevDependenciesにエントリを追加してインストールします。
  • --no-saveはインストールしますが、package.jsonファイルのdependenciesにエントリを追加しません。
  • --save-optionalは、package.jsonファイルのoptionalDependenciesにエントリを追加してインストールします。
  • --no-optionalは、オプションの依存関係のインストールを防止します。

フラグの省略形も使用できます。

  • -S: --save
  • -D: --save-dev
  • -O: --save-optional

devDependenciesdependenciesの違いは、前者がテストライブラリなどの開発ツールを含んでいるのに対し、後者は本番環境でアプリにバンドルされることです。

optionalDependenciesについては、依存関係のビルドエラーがインストールエラーの原因にならない点が異なります。ただし、依存関係がないことを処理するのはプログラムの責任です。オプションの依存関係について詳しくはご覧ください。

パッケージの更新

更新も簡単で、以下を実行するだけです。

npmは、バージョン管理の制約を満たす新しいバージョンについて、すべてのパッケージをチェックします。

更新する単一パッケージを指定することもできます。

npm update <package-name>

バージョン管理

npmは、単純なダウンロードに加えて、**バージョン管理**も管理するため、パッケージの特定のバージョンを指定したり、必要とするバージョンよりも高い、または低いバージョンを要求したりできます。

ライブラリが別のライブラリのメジャーリリースとだけ互換性があることがよくあります。

または、最新のlibリリースのバグがまだ修正されておらず、問題を引き起こしている場合があります。

ライブラリの明示的なバージョンを指定すると、全員が同じ正確なバージョンのパッケージを使用できるようになり、package.jsonファイルが更新されるまで、チーム全体が同じバージョンを実行します。

これらの場合すべてにおいて、バージョン管理は非常に役立ち、npmはセマンティック バージョン管理(semver)標準に従います。

特定のバージョンのパッケージをインストールするには、以下を実行します。

npm install <package-name>@<version>

タスクの実行

package.jsonファイルは、以下を使用して実行できるコマンドラインタスクを指定するための形式をサポートしています。

npm run <task-name>

例:

{
  "scripts": {
    "start-dev": "node lib/server-development",
    "start": "node lib/server-production"
  }
}

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