【Nexus】Nexusでnpmのパッケージを管理する
Nexusとは
個人単位のフロントエンド開発におけるパッケージ管理では、package.json
に依存関係を書いて、外部のnpmレジストリからnpm install
等でパッケージを取得する等が一般的な方法かと思います。
企業などでは、Nexusなどのリポジトリ管理ツールを利用することも多いと思います。
Nexusを使うメリットは以下があります。
- 依存関係の一貫性
- 開発者同士で環境が統一される。
- プライベートパッケージの管理
- 組織のプライベート管理を外部に公開せずにNexus上で管理でき、他の外部パッケージと同じ場所で管理できる。
- セキュリティの向上
- Nexusのセキュリティ管理機能を使うと脆弱性のスキャンを実施でき、プロジェクトで管理しているパッケージのセキュリティリスクを検知できる。
- キャッシュによるパッケージダウンロード速度の向上
-
npm install
時のライブラリ取得先が、外部リポジトリではなくNexusになるため、通信速度の向上を期待できる。
-
Nexusのリポジトリの種類
- Proxyリポジトリ
- 外部リポジトリ(例: https://registry.npmjs.org/) からパッケージを取得し、キャッシュする。
- Hostedリポジトリ
- 自分たちで作成したnpmパッケージを保存する。
- Groupリポジトリ
- 複数のリポジトリ(ProxyやHosted)を一つにまとめる。
package.jsonの用意
- npmのパッケージを利用する
packge.json
を用意します。
{
"name": "nexus-example-project",
"version": "1.0.0",
"dependencies": {
"lodash": "^4.17.21"
}
}
Nexusの環境構築
- ここでは、ホスティングしたいサーバー上で、dockerで動かすことを想定します。
-
docker-compose.yml
に以下のような定義をし、Nexusサーバーを作成します。
services:
nexus:
image: sonatype/nexus3:latest
container_name: nexus
restart: always
ports:
- "8082:8081"
volumes:
- ./nexus-data:/nexus-data
Nexusでリポジトリの作成
-
Adminアカウントでログインし、「設定」 > 「Repositories」 > 「Create repository」を選択します。
-
npm(proxy)を選択し、設定を入力し、Create repositoryをします。必須項目はName(Nexus上での識別子)とRemote registory(例:https://registry.npmjs.org)です。
-
npm(group)を選択します。Member repositoriesで、一つ前で作成した"npm-proxy"を加えたらCreate repositoryをします。
-
Brawseタブにいくと、追加したnpm(proxy)とnpm(groug)が作成されています。
パッケージの取得先をNexusに変更し、npm install実行
Nexusでリポジトリを作成しましたが、どうすればローカルでnpm install
をしたとき取得先がNexusになるでしょうか?
ローカルでのnpmレジストリの向き先は、以下のコマンドで確認することができます。
$ npm get registry
https://registry.npmjs.org/
これを、先ほど作成したNexusのパッケージに変更します。
$ npm set registry http://localhost:8082/repository/npm-group/
その状態でnpm installを実行すると、package.jsonが作成されました。
{
"name": "nexus-example-project",
"version": "1.0.0",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "nexus-example-project",
"version": "1.0.0",
"dependencies": {
"lodash": "^4.17.21"
}
},
"node_modules/lodash": {
"version": "4.17.21",
"resolved": "http://localhost:8082/repository/npm-group/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDE3QVlnxzowRzzkK+/W+8xFXthFvSDk+0axZlgz+E46kL3L9VYZP9cxlVOa6b7LfGxkEnGwvHc55XTOwZKw==",
"dev": false
}
},
"dependencies": {
"lodash": {
"version": "4.17.21",
"resolved": "http://localhost:8082/repository/npm-group/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDE3QVlnxzowRzzkK+/W+8xFXthFvSDk+0axZlgz+E46kL3L9VYZP9cxlVOa6b7LfGxkEnGwvHc55XTOwZKw=="
}
}
}
resolved
というのが、パッケージの取得先を表しています。
このpackage-lock.json
をプロジェクトで管理することで、他の人も同じバージョンのパッケージをNexusから取得するようになります。
さらに、Nexus上では先ほどまで空だったnpm-proxyにパッケージがキャッシュされていることが確認できました。
Discussion