Sonatype Nexus 3 als NPM-Repository einsetzen

lager

In diesen Blog-Post möchte ich euch zeigen, wie ihr euer Sonatype Nexus 3 als NPM-Repository einrichtet könnt. Ähnliche Funktionalität bietet ein Nexus auch für Apache-Maven-Pakete an. Folgende Dinge werden wir erledigen:

  1. Wir legen ein privates (hosted) Repository für unsere eigenen NPM-Pakete an. Über dieses Repository können interne Unternehmens-NPM-Pakete verwaltet und zur Verfügung gestellt werden.
  2. Ein Proxy Repository dient als interner Cache für das öffentliche und offizielle NPM-Repository.
  3. Ein drittes Repository (group) dient als Zusammenfassung der beiden ersten Repositories. Über dieses Repository können später über eine URL sowohl öffentliche als auch private NPM-Pakete geladen werden.
  4. Ihr könnt eurer Entwicklungssystem so einrichten, dass selbst entwickelte Pakete in das Nexus hochgeladen werden können. Außerdem sollen alle öffentlichen Pakete über das Proxy Repository geladen werden.

Private Repository

Dieses Repository wird die Heimat aller NPM-Pakete, die dein Team selbst entwickelt. Diese sollen und werden nicht im Internet veröffentlicht. Erzeuge ein neues npm- (hosted) Repository.

​Folgende Einstellungen sind notwendig. Den Namen und die URL des Repositories könnt ihr natürlich für euer Unternehmen anpassen.

Proxy Repository

Das npm- (proxy) Repository ist mit den nachfolgenden Einstellungen ebenfalls schnell angelegt.

Group Repository

Zu guter Letzt brauchen wir das npm- (group) Repository. Natürlich müssen hier die beiden zuerst angelegten Repositories als "Member" hinzugefügt werden. Dadurch können gleich alle Pakete, die den "Member-Repositories" bekannt sind, über eine einzelne URL bezogen werden.

Nexus als npm-Dependency-Cache einrichten

Nun können wir mit der Arbeit beginnen, damit öffentliche NPM-Pakete nicht mehr aus dem Internet geladen werden müssen. Denn das ist unter anderem deutlich langsamer. 
Der nachfolgende Inhalt muss in die .npmrc-Datei. Diese Datei kann im Home-Verzeichnis oder in das Projektverzeichnis abgelegt werden. Liegt die Datei im Home-Verzeichnis, wird diese Konfiguration für alle Projekte und npm-Befehle herangezogen​. Liegt die Datei im Projektverzeichnis, gibt es nur Auswirkungen für das jeweilige Projekt.

Die URL muss auf das npm- (group) Verzeichnis zeigen. Danach werden die Pakete über das npm- (group) Nexus Repository geladen.

registry=http://HOST:8091/nexus/repository/npm-group/ 

Eigene Pakete hochladen

Um ein Paket in das Nexus-System hochzuladen (npm publish), müssen noch weitere Einträge in die .npmrc-Datei hinzugefügt werden. Diese Angaben können wieder in eurem Home-Verzeichnis oder Projektverzeichnis abgelegt werden. Außerdem braucht es Angaben zu deinem Namen und deiner E-Mail Adresse.

Weiter müsst ihr euch dem Nexus gegenüber authentifizieren. Dazu müsst ihr euren Benutzernamen und Passwort base64 kodiert in der .npmrc-Datei ablegen. Folgenden Befehl könnt ihr z.B. über die git-bash ausführen. Mit diesem Befehl könnt ihr euren Benutzernamen/euer Passwort kodieren.

 echo -n 'MaikKrawinkel:MaiksPasswort' | openssl base64
# Bitte ein Leerzeichen vor dem echo mit angeben. Dadurch landet der Befehl (inklusive eures Passworts) nicht in der History der Bash! 
Der Inhalt der Datei sollte dann etwa so aussehen:

Vorbereitung des Projektes

In der package.json Datei eines Projekts muss noch angegeben werden, wohin das Build-Artefakt hochgeladen werden soll. Das erreicht man durch folgenden Eintrag. Wichtig! Hier wird das private npm-Repository angegeben.
"publishConfig": {
    "registry": "http://HOST:8091/nexus/repository/npm-ordix-private/"
} 

Paket veröffentlichen

​Der letzte Schritt ist das Bauen und Veröffentlichen des Projekts. Hierbei gehe ich davon aus, dass das kompilierte Artefakt im dist/ -Verzeichnis liegt.

npm build
npm publish dist 

Das Ende vom Lied

That's it. Die Einrichtung ist abgeschlossen. Folgende Dinge haben wir erreicht:
  1. Öffentliche Pakete werden über das Nexus Proxy Repository geladen.
  2. Private Pakete können im Nexus Private Repository abgelegt und für alle zur Verfügung gestellt werden.
  3. Über ein Nexus Group Repository erhält man einen Repository, um öffentliche und private NPM-Pakete zu laden.
 

Kommentare

Derzeit gibt es keine Kommentare. Schreibe den ersten Kommentar!
Gäste
Donnerstag, 21. November 2019

Sicherheitscode (Captcha)