Packetmanager für’s Frontend

Historie 📺

Installation von Dependencies früher

  • Download Link raussuchen
  • Händisch über Browser herunterladen
  • Händisch ins Projekt auf der kopieren

Nachteile

  • Kein Überblick über Dependencies der Dependencies
  • Keine Möglichkeit Updates aller Dependencies zu überprüfen
  • Bei Updates händischer Vorgang erneut auszuführen 

Grundprinzip bei allen gleich

 

Am Beispiel von npm

$ npm init

Projekt initialiseren

{
  "name": "projectname",
  "version": "1.0.0",
  "description": "My project description",
  "main": "index.js",
  "scripts": {
    "test": "npm test"
  },
  "author": "Michael Kühnel",
  "license": "MIT"
}

Erzeugt package.json im Verzeichnis

$ npm install normalize.css --save
$ npm install bootstrap --save
$ npm install knockout --save

Dependencies hinzufügen

{
  "name": "projectname",
  "version": "1.0.0",
  "description": "My project description",
  "main": "index.js",
  "scripts": {
    "test": "npm test"
  },
  "author": "Michael Kühnel",
  "license": "MIT",
  "dependencies": {
    "bootstrap": "^3.3.7",
    "knockout": "^3.4.1",
    "normalize.css": "^5.0.0"
  }
}

Update der package.json

.
└── node_modules
    ├── bootstrap
    ├── knockout
    └── normalize.css

Update im File system

$ npm install

Dependencies nach Checkout installieren

Bower

Der erste Packetmanager für’s Frontend

Besonderheiten

  • Flat depency Tree
    • Konflikte
      • müssen selbst gelöst werden
      • können in der bower.json persisitiert werden
  • Keine eigene Registry
    • Ablageort für Pakete kann jeder Git Endpunkt sein
  • Inzwischen schlecht maintained
  • Wird immer weniger genutzt
    • Projekte nutzen npm anstattdessen

Inzwischen nicht mehr der »node package manager«

Besonderheiten

  • Kann Shell Befehle auslösen
  • Kann (theoretisch) auch Versionen von sub dependencies locken
    • npm shrinkwrap – relativ kaputt 
  • Private registries möglich
  • Deduplication – Inzwischen dependency tree per default so flach wie möglich

Don’t panic 😱

Nur eine alternative CLI für npm

Besonderheiten

  • 100% Kompatibilität zum npm Eco system
    • Registry und package.json
  • Locken der sub dependencies per default
    • yarn.lock
  • Sehr sehr viel schneller als das npm CLI
  • Checksummenprüfung
  • Offline-fähig 

Packetmanager fürs Frontend

By Michael Kühnel

Packetmanager fürs Frontend

  • 1,136