Immer häufiger greife ich für Anpassungen nicht mehr zu Visual Studio, sondern zu „einfachen“ Editoren, mit denen ich „mal eben“ ein paar Anpassungen in JavaScript machen – oder doch die eine oder Anwendung komplett in HTML & JavaScript schreibe.
Auch wenn man alles nur mit Notepad machen kann, so ist das doch irgendwie auf die Dauer etwas lästig. Immer wieder man man JavaScript Dateien auf den Server kopieren oder man muss Coffee-Script Dateien auf der Kommandozeile durch den entsprechenden Compiler jagen und dann mit den anderen Scripten zum Server kopieren.
Mit Notepad++ kann man das schon etwas verbessern, indem man Plugins wie NppExec verwendet. Wie man mit NppExec Dateien deployen kann, habe ich ja in einem früheren Post schon mal beschrieben. Aber irgendwann hat man auch dort Grenzen erreicht.
Lange habe ich mich gefragt, ob ich Node wirklich brauche. Ich finde JavaScript toll, aber muss ich das mit Node auch auf dem Server ausführen? Inzwischen habe ich erkannt: Node ist doch irgendwie total cool, gerade um HTML & JavaScript basierte Lösungen zu erstellen.
Im Folgenden will ich einmal einen Eindruck geben, wie so ein Projekt exemplarisch aussehen kann.
Zunächst muss man natürlich Node installiert haben. Das geht am besten via Chocolatey. Hat man Chocolatey installiert kann man mit choco install nodejs
Node installieren.
Für unsere neues Projekt muss als erstes ein Arbeitsverzeichnis erstellt werden und das für die Arbeit mit Node vorbereitet werden
mkdir html_app
cd html_app
git init & npm init
Als Ergebnis erhält man eine package.json
Datei.
{
"name": "html_app",
"version": "1.0.0",
"description": "",
"main": "index.html",
"author": "Henning Eiben",
}
Diese Datei beschreibt das aktuelle Projekt/Paket und dient auch dazu um alle verwendeten Pakete zu speichern. Nun kann man mit npm
sich Node Pakete installieren. Als erstes installiere ich bower. Das ist ein Paket um JavaScript-Bibliotheken für Anwendungen zu verwalten. Da ich Bower häufiger gebrauche installiere ich das gleich global.
npm install -g bower
Nun kann ich mir mit Bower ein paar Bibliotheken für meine JavaScript-Anwendung laden. In diesem Fall will ich Bootstrap und Knockout verwenden. Zuvor initialisiere ich mit bower init
noch eine bower.json
. Sie dient ähnlich wie die packages.json
dazu um alle verwendeten Pakate zu speichern. Mit
bower install bootstrap knockout --save
Kann ich nun die beiden Bibliiotheken installieren. Durch das --save
werden die Bibliotheken in der bower.json
als Abhängigkeit gespeichert. Die bower.json
sieht dann so aus:
{
"name": "html_app",
"version": "0.0.0",
"authors": [
"Henning Eiben <eiben@busitec.de>"
],
"ignore": [
"**/.*",
"node_modules",
"bower_components",
"test",
"tests"
],
"dependencies": {
"bootstrap": "~3.3.5",
"knockout": "~3.3.0"
}
}
Dabei wurde neben bootstrap und knockout auch jquery in der Version 2.1.4 installiert, weil das von Bootstrap benötigt wird – ohne dass ich mich darum kümmern musste.
D:\projects\html_app>bower install bootstrap knockout --save
bower cached git://github.com/twbs/bootstrap.git#3.3.5
bower validate 3.3.5 against git://github.com/twbs/bootstrap.git#*
bower cached git://github.com/SteveSanderson/knockout.git#3.3.0
bower validate 3.3.0 against git://github.com/SteveSanderson/knockout.git#*
bower cached git://github.com/jquery/jquery.git#2.1.4
bower validate 2.1.4 against git://github.com/jquery/jquery.git#>= 1.9.1
bower install knockout#3.3.0
bower install bootstrap#3.3.5
bower install jquery#2.1.4
knockout#3.3.0 bower_components\knockout
bootstrap#3.3.5 bower_components\bootstrap
└── jquery#2.1.4
jquery#2.1.4 bower_components\jquery
Nun kann mit dem Editor der Wahl begonnen werden die Anwendung zu erstellen. Die Bibliotheken, die über bower installiert wurden liegen dabei in dem Verzeichnis bower_components
, die Node-Pakete liegen in node_modules
.
Wenn man nun die Anwendung z.B. in git einchecked oder jemand anderem zur Verfügung stellt, dann muss man diese beiden Verzeichnissen nicht mit weitergeben.
Stattdessen reicht es mit npm install & bower install
einfach die in der packages.json
und bower.json
gespeicherten Pakete und Bibliotheken wieder herzustellen.