NPM Skripts
Genau, das Thema heute sind die Skripts (scripts) in der package.json. Auf den ersten Blick sieht es so aus, als ob dahinter nur normale Command-Line/Bash-Aufrufe stecken. Wer sich aber etwas tiefer mit der Materie auseinandersetzt, wird feststellen, dass damit interessante Dinge gemacht werden können.
Grundsätzlich ist es so, dass man seinen eigenen Skripts dort einfügen kann und sie dann mittels
npm run $SKRIPT_NAME
startet. Dabei hat man nicht nur Zugriff auf die Befehle des jeweiligen Betriebssystems, sondern kann auch die lokal installierten Node-Module verwenden. Nehmen wir an das Paket „rimraf“ zum Löschen von Dateien und Verzeichnissen ist installiert. Somit kann man beispielsweise einen Skript „del“ hinzufügen, der ein Verzeichnis löscht:
"scripts": {
"del": "rimraf ./data"
}
Oder wir rufen einfach andere definierte Skripte auf. Dafür wird einfach der Befehl npm mit dem Parameter run und dem entsprechenden Skript angegeben.
"scripts": {
"del": "rimraf ./data",
"date": "date",
"go": "npm run del && npm run date"
}
Wie im obigen Beispiel gezeigt, können auch zwei oder mehrere Skripte hintereinander aufgerufen werden, indem dazwischen zwei & gesetzt werden.
Weiters ist es auch möglich eigene JavaScript-Dateien aufzurufen. Dafür wird die Anwendung node und der entsprechenden JavaScript-Datei angegeben:
"scripts": {
"work": "node work.js TEST"
}
Im obigen Fall würde die Datei work.js gestartet. Als weiterer Parameter wird TEST übergeben. In der JavaScript-Datei können die einzelnen Parameter mittels „process.argv[2]“, „process.argv[3]“, … ausgelesen werden. Dass ich mit 2 starte ist Absicht, da 0 der Node-Prozess ist und 1 die JavaScript-Datei.
Kommen wir zu etwas spannenderem, den Hooks. Es gibt sogenannte pre und post-Hooks. Wie der eine oder andere bereits erraten hat, werden die pre-Hooks vor dem eigentlichen Befehl aufgerufen und die post-Hooks danach.
"scripts": {
"prework": "rimraf ./test && mkdir test",
"work": "node work.js TEST",
"postwork": "echo Fertig"
}
Es gibt aber noch ein paar Skripts, die direkt von npm verwendet werden. Beispielsweise ist es damit möglich, dass nach einem „npm install“ ein Skript gestartet wird.
"scripts": {
"postinstall": "echo FERTIG"
}
Die Auflistung über diese Skripts findest du unter https://docs.npmjs.com/misc/scripts.
Wie man sieht, ist es nicht für jeden Fall notwendig Gulp, Grunt oder wie sie alle heißen einzusetzen. Manchmal reichen auch schon die vorhandenen Bordmittel sehr gut aus 😉.
Danke Max, für deine tatkräftige Unterstützung an diesem Beitrag …