<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de-x-formal">
	<id>https://glossar.hs-augsburg.de/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Anfe96</id>
	<title>GlossarWiki - Benutzerbeiträge [de-formal]</title>
	<link rel="self" type="application/atom+xml" href="https://glossar.hs-augsburg.de/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Anfe96"/>
	<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/Spezial:Beitr%C3%A4ge/Anfe96"/>
	<updated>2026-07-17T15:18:24Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.3</generator>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=HTML5-Tutorium:_JavaScript:_Entwicklungsumgebung:_Node.js&amp;diff=43649</id>
		<title>HTML5-Tutorium: JavaScript: Entwicklungsumgebung: Node.js</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=HTML5-Tutorium:_JavaScript:_Entwicklungsumgebung:_Node.js&amp;diff=43649"/>
		<updated>2017-10-06T10:26:40Z</updated>

		<summary type="html">&lt;p&gt;Anfe96: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HTML5-Tutorium:JavaScript:Entwicklungsumgebung:Menü}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Musterlösung&#039;&#039;&#039;: [https://glossar.hs-augsburg.de/beispiel/tutorium/es6/test/WK_Test01/ SVN-Repository]&lt;br /&gt;
&lt;br /&gt;
Zur Unterstützung der Entwicklung von Web-Anwendungen kann [[Node.js]]&amp;lt;ref&amp;gt;Node.js: https://nodejs.org/en/&amp;lt;/ref&amp;gt; eingesetzt werden: &lt;br /&gt;
automatische Übersetzung von [[ECMAScript|ECMAScript 6/7/8]] (genauer ECMAScript 2015/2016/2017) in ECMAScript 5.1, automatische Generierung der&lt;br /&gt;
Dokumentation, automatisches Testen der Anwendung etc.&lt;br /&gt;
&lt;br /&gt;
Das heißt, auch wenn man keine Node.js-Server-Anwendung erstellt, ist Node.js ein &lt;br /&gt;
sehr wertvolles und universell einsetzbares Werkzeug.&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
===Unix-Shell===&lt;br /&gt;
Web-Entwickler verwenden unter Windows {{iAllg}} ein Terminal, das eine [[Unix]]-[[Shell]] simuliert.&lt;br /&gt;
Unter Linux und Mac OS X ist es nicht notwendig, eine separate Unix-Shell zu installieren, da&lt;br /&gt;
diese dort sowieso schon existiert (Unix: bash, Mac OS X: terminal).&lt;br /&gt;
&lt;br /&gt;
Installieren Sie „Git for Windows“ (&amp;lt;code&amp;gt;https://git-for-windows.github.io/&amp;lt;/code&amp;gt;; wählen Sie bei jeder Frage die Default-Werte, außer Sie haben einen triftigen Grund, davon abzuweichen). In diesem Paket ist die „Git BASH“ enthalten.&lt;br /&gt;
Das ist eine Terminal-Anwendung, die eine Linux-Bash emuliert und zahlreiche nützliche Befehle wie &amp;lt;code&amp;gt;which&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[vi]]&amp;lt;/code&amp;gt; ( :-) ) etc. zur&lt;br /&gt;
Verfügung stellt.&lt;br /&gt;
&lt;br /&gt;
Unter [[HTML5-Tutorium: JavaScript: Entwicklungsumgebung: WebStorm|WebStorm]] steht ebenfalls ein Terminal zur Verfügung, &lt;br /&gt;
in dem Sie Kommandozeilen-Befehle absetzen können:&lt;br /&gt;
* Menü am unteren Festerrand: Klick auf &amp;lt;code&amp;gt;Terminal&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn Sie das Web-Storm-Terminal verwenden, befinden Sie sich automatisch im Wurzelverzeichnis des zugehörigen Projektes. &lt;br /&gt;
Bei Im Allgemeinen müssen Sie jedoch mit Hilfe des Unix-Befehls &amp;lt;code&amp;gt;cd&amp;amp;nbsp;&amp;amp;lt;PFAD&amp;amp;gt;&amp;lt;/code&amp;gt; in das Wurzelverzeichnis des&lt;br /&gt;
Projektes wechseln, wenn Sie Befehle absetzen wollen, die sich auf ein bestimmtes Projekt beziehen.&lt;br /&gt;
&lt;br /&gt;
Achtung: Unter Windows stehen Ihnen in WebStorm nur die Windows-Kommandozeilen-Befehle zur Verdügung,&lt;br /&gt;
unter Linux und Mac können (und müssen) Sie dort Linux-Kommandozeilen-Befehle eingeben.&lt;br /&gt;
&lt;br /&gt;
===Node.js===&lt;br /&gt;
Installieren Sie nun Node.js: &amp;lt;code&amp;gt;https://nodejs.org/en/&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;https://nodejs.org/dist/latest01/&amp;lt;/code&amp;gt;, Version 8.x. &lt;br /&gt;
Achten Sie darauf, dass die Option &amp;lt;code&amp;gt;Add to PATH&amp;lt;/code&amp;gt; ausgewählt wurde.&lt;br /&gt;
&lt;br /&gt;
Starten Sie ein Unix-Terminal ({{zB}} Mac-OS-X-Terminal, &amp;lt;code&amp;gt;bash&amp;lt;/code&amp;gt; oder auch WebStorm: Klick auf Icon in der linken unteren Ecke → Klick auf &amp;lt;code&amp;gt;Terminal&amp;lt;/code&amp;gt;).&lt;br /&gt;
Öffnen Sie das Terminal, um zu testen, ob &amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt; funktioniert:&lt;br /&gt;
&lt;br /&gt;
* Geben Sie Folgendes in die Konsole ein: &amp;lt;code&amp;gt;node -v&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn Node.js korrekt installiert und der Pfad mit den &amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt;-Binaries in die Systemvariable &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt; eingetragen wurde,&lt;br /&gt;
sollte die Versionsnummer von &amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt; ausgegeben werden.&lt;br /&gt;
&lt;br /&gt;
Sie werden feststellen, das Node.js zum Großteil über Terminal-Befehle gesteuert wird. &lt;br /&gt;
Zu Beginn mag das für eingefleischte [[Klickibunti]]-Fans ungewohnt sein, aber Sie werden sich schnell daran gewöhnen.&lt;br /&gt;
&lt;br /&gt;
===Wichtige Node.js-Pakete===&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe von &amp;lt;code&amp;gt;npm&amp;lt;/code&amp;gt;&amp;lt;ref&amp;gt;npm: https://www.npmjs.com/&amp;lt;/ref&amp;gt; (npm = node package manager) können beliebige Node.js-Pakete installiert werden.&lt;br /&gt;
Viele dieser Pakte könnte man global auf dem Rechner installieren.&lt;br /&gt;
Die globale Installation hätte zur Folge, dass jedes Projekt auf diese Pakete zugreifen kann, Pakete also nicht mehrfach installiert werden müssen.&lt;br /&gt;
&lt;br /&gt;
Im Allgemeinen ist es alledings besser, die Pakete für jedes Projekt separat, {{dh}} projektlokal zu installieren. &lt;br /&gt;
Die kostet zwar mehr Platz, hat aber den Vorteil, dass man für verschiedene Projekte verschiedene Pakete verwenden kann. Es kann durchaus sein, dass &lt;br /&gt;
zwei verschiedene Pakete ein drittes benötigen, doch jeweils in einer anderen Version. Außerdem stehen einem anderen Entwickler, der eine Kopie&lt;br /&gt;
Ihres Projektes erhält, dann sofort alle Pakete in der jeweils benötigten Version zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Um ein neues Projekt zu erstellen, legt man zunächst einen leeren Ordner an. Es kann ein beliebiger Ordner gewählt werden.&lt;br /&gt;
Im Folgenden wählen wir &amp;lt;code&amp;gt;/C/mmprog/test01&amp;lt;/code&amp;gt; als Beispielsordner. (Beachten Sie, dass in der GIT Bash wie auch im HTML-Umfeld immer Linux-Pfad-Bezeichner verwendet werden, auch unter Windows.)&lt;br /&gt;
&lt;br /&gt;
Öffnen Sie nun ihr bevorzugtes Unix-Terminal&lt;br /&gt;
und geben Sie folgenden Befehle ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
                          # Erzeugen Sie ein neues (leeres!) Projektverzeichnis.&lt;br /&gt;
                          # Bitte passen Sie diesen Pfad an Ihre Gegebenheiten an.&lt;br /&gt;
mkdir -p /C/mmprog/test01 # Achten Sie darauf, dass es diesen Pfad vorher nicht gegeben hat.&lt;br /&gt;
cd /C/mmprog/test01       # Hier müssen Sie den von Ihnen zuvor definierten Pfad angeben.  &lt;br /&gt;
npm init -y               # Erzeugen Sie ein neues Node.js-Projekt unter Kontrolle von npm.&lt;br /&gt;
                          # Installieren Sie nun die Node.js-Pakete grunt (Task-Manager) &lt;br /&gt;
                          # und babel (JavaScript-Transpiler) projektlokal.&lt;br /&gt;
npm install --save-dev grunt&lt;br /&gt;
ls -al                    # Sehen Sie sich an, welche Dateien und Ordner erzeugt wurden.&lt;br /&gt;
ls -al node_modules/.bin&lt;br /&gt;
                          # Damit WebStorm den Befehl &#039;node_modules/.bin/grunt&#039; findet,&lt;br /&gt;
                          # muss noch das Grunt-Command-Line-Interface global&lt;br /&gt;
npm install -g grunt-cli  # installiert werden. &lt;br /&gt;
less package.json         # Sehen Sie sich den Inhalt der Konfigurationsdatei an.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sie können das Projekt in WebStorm öffenen, um die zugehörigen Dateien mit dem&lt;br /&gt;
WebStorm-Editor bearbeiten zu können:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Open&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;File&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;WebStorm&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Open&amp;lt;/code&amp;gt;&lt;br /&gt;
* Zum zuvor angelegten Testordner navigieren und diesen mit &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt; öffnen. Die Frage, ob Sie das Projekt im selben oder in einem neuen Fenster öffnen wollen, können Sie nach Belieben beantworten. &lt;br /&gt;
&lt;br /&gt;
Sie können Ihre JavaScript-Projekt-Dateien auch mit jedem beliebigen anderen Code-Editor (Atom, Sublime, Nodepad++, Emacs etc. pp.) bearbeiten. &lt;br /&gt;
Das liegt ganz bei Ihnen. WebStorm ist sehr angenehm zu bedienen und enthält einen kleinen Web-Server, der die Entwicklung von JavaScript-Code erleichtert. &lt;br /&gt;
(Es gibt allerdings auch für Node.js einen einfachen HTTP-Server, der bei der Entwicklung von HTML-Anwendungen zu &lt;br /&gt;
Testzwecken eingesetzt werden kann: https://github.com/indexzero/http-server)&lt;br /&gt;
Das Terminalfenster von WebStorm ist auch sehr praktisch. Insbesondere Node.js-Befehle können&lt;br /&gt;
dort direkt eingegeben werden. Unter Windows verwende ich allerdings für komplexere Aufgaben die (Git-)Bash.&lt;br /&gt;
&lt;br /&gt;
Sie sollten sich angewöhnen, in der Datei &amp;lt;code&amp;gt;package.json&amp;lt;/code&amp;gt; sofort nachdem Sie sie&lt;br /&gt;
erstellt haben, ein paar projektspezifische Informationen zu ergänzen, wobei Sie die Werte&lt;br /&gt;
natürlich an Ihre Gegebenheiten anpassen müssen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;quot;kewords&amp;quot;: [&amp;quot;test&amp;quot;],&lt;br /&gt;
  &amp;quot;author&amp;quot;: &amp;quot;Wolfgang Kowarschick&amp;quot;,&lt;br /&gt;
  &amp;quot;license&amp;quot;: &amp;quot;CC-BY-NC-SA-4.0&amp;quot;,&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ändern Sie dagegen nicht die Paketinformationen, die im Attribut &amp;lt;code&amp;gt;devDependencies&amp;lt;/code&amp;gt; gespeichert sind.&lt;br /&gt;
Diese werden mittels &amp;lt;code&amp;gt;npm&amp;lt;/code&amp;gt; verwaltet.&lt;br /&gt;
Der Node-Paket-Manager &amp;lt;code&amp;gt;npm&amp;lt;/code&amp;gt; ist ein sehr nützliches Hilfsprogramm,&lt;br /&gt;
mit dem Sie neue Node-Projekte erstellen (&amp;lt;code&amp;gt;npm init -y&amp;lt;/code&amp;gt;), Pakete installieren (&amp;lt;code&amp;gt;npm install&amp;lt;/code&amp;gt;) und&lt;br /&gt;
wieder löschen (&amp;lt;code&amp;gt;npm uninstall&amp;lt;/code&amp;gt;) sowie vieles mehr machen können (Dokumentation: https://docs.npmjs.com/).&lt;br /&gt;
&lt;br /&gt;
Wichtig ist auch der Befehl&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm update&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Mit diesem können Sie die lokal gespeicherte Versionen der im Attribut &amp;lt;code&amp;gt;devDependencies&amp;lt;/code&amp;gt; aufgeführte Node.js-Pakete&lt;br /&gt;
jederzeit auf die neueste Version aktualisieren. Die aktuell installierten Versionen können Sie mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm -g list # globale Node.js-Pakete&lt;br /&gt;
npm list    # projektlokale Node.js-Pakete&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
erfragen.&lt;br /&gt;
&lt;br /&gt;
Sie können Pakete auch lokal löschen und dann mittels &amp;lt;code&amp;gt;npm install&amp;lt;/code&amp;gt; wieder herstellen.&lt;br /&gt;
Versuchen Sie es (Achtung: Die Unix-Befehle &amp;lt;code&amp;gt;ls&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;rm&amp;lt;/code&amp;gt; funktionieren &lt;br /&gt;
unter Windows nur in der Bash. In einem Windows-Terminal heißen die entsprechenden Befehle  &amp;lt;code&amp;gt;dir&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;del&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -al node_modules # Liste alle Dateien und Verzeichnisse auf,&lt;br /&gt;
                    # die im Ordner node_modules enthalten sind.&lt;br /&gt;
rm -rf node_modules # Lösche diesen Ordner samt Inhalt.&lt;br /&gt;
npm list&lt;br /&gt;
ls -al node_modules&lt;br /&gt;
npm install&lt;br /&gt;
ls -al node_modules&lt;br /&gt;
npm list&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sie können auch überprüfen, ob Sie in Ihrem Projekt irgendwelche veralteten Pakete benutzen (https://docs.npmjs.com/cli/outdated):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm outdated    # projektspezifische Node.js-Pakete&lt;br /&gt;
npm -g outdated # globale Node.js-Pakete&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kein Ergebnis ist hier ein gutes Ergebnis!&lt;br /&gt;
&lt;br /&gt;
Node.js-Pakete können, wie wir gesehen haben, mittels der npm-Option &amp;lt;code&amp;gt;-g&amp;lt;/code&amp;gt; auch global gespeichert werden, werden aber normalerweise projektlokal abgelegt.&lt;br /&gt;
Durch die projektlokale Speicherung von Node.js-Paketen bläht sich ein Projekt sehr stark auf. Es enthält dann &lt;br /&gt;
meist mehrere Tausend Dateien, auch wenn das eigentliche Projekt nur aus ein paar wenigen Dateien besteht. Dies ist vor allem beim Speichern eines derartigen Projektes in eine Repository ([[SVN]], [[Git]] etc.)&lt;br /&gt;
sehr störend. Dennoch sollte man nur ein Paket wie &amp;lt;code&amp;gt;grunt-cli&amp;lt;/code&amp;gt;, dessen einzige Aufgabe es ist, die jeweils projektlokale Version von Grunt auszuführen, global installieren.&lt;br /&gt;
&lt;br /&gt;
Um das Repository-Problem zu vermeiden, muss man die Speicherung von Node.js-Bibliotheken im Repository ausschließen und&lt;br /&gt;
diese Dateien bei Bedarf automatisch von den entsprechenden Servern herunterladen. Wie das geht, haben wir gerade gesehen:&lt;br /&gt;
Man läd das Projekt auf seinen Arbeitsrechner, öffnet ein Terminal, wechselt mittels &amp;lt;code&amp;gt;cd&amp;lt;/code&amp;gt; ins Wurzelverzeichnis des Projektes &lt;br /&gt;
(beim WebStorm-Terminal befindet man sich standardmäßig immer im Root-Verzeichnis des Projektes) und führt&lt;br /&gt;
&amp;lt;code&amp;gt;npm install&amp;lt;/code&amp;gt; aus. &lt;br /&gt;
&lt;br /&gt;
===Grunt===&lt;br /&gt;
&lt;br /&gt;
Als nächstes initialisieren Sie Grunt (https://gruntjs.com/) &amp;lt;ref&amp;gt;Grunt: https://gruntjs.com/&amp;lt;/ref&amp;gt;.&lt;br /&gt;
Grunt ist ein “JavaScript Task Runner”, also ein Programm, das Aufgaben (&#039;&#039;tasks&#039;&#039;) wie {{zB}} das Übersetzen von [[ECMAScript|ECMAScript 2015/16/17]] in &lt;br /&gt;
ECMAScript 5.1 oder das Komprimieren von Programmdateien automatisch durchführt. &lt;br /&gt;
&lt;br /&gt;
Die Initialisierung erfolgt durch die Bereitstellung zweier Dateien &amp;lt;code&amp;gt;package.json&amp;lt;/code&amp;gt;&lt;br /&gt;
und &amp;lt;code&amp;gt;gruntfile.json&amp;lt;/code&amp;gt; im Root-Verzeichnis der Web-Anwendung. Die Datei &amp;lt;code&amp;gt;package.json&amp;lt;/code&amp;gt;&lt;br /&gt;
haben Sie schon mittels &amp;lt;code&amp;gt;npm init&amp;lt;/code&amp;gt; erstellt.&lt;br /&gt;
&lt;br /&gt;
In der Datei &amp;lt;code&amp;gt;package.json&amp;lt;/code&amp;gt; gibt es das Attribut &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
Es enthält den Namen der Konfigurationsdatei von Grunt: &amp;lt;code&amp;gt;gruntfile.js&amp;lt;/code&amp;gt;. &lt;br /&gt;
Diese fehlt allerdings noch. Also legen Sie sie im Wurzelverzeichnis des Projektes mit einem Texteditor Ihrer Wahl an&lt;br /&gt;
(WebStorm: &amp;lt;code&amp;gt;File&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;WebStorm&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;New&amp;lt;/code&amp;gt;  → &amp;lt;code&amp;gt;File&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;code&amp;gt;gruntfile.js&amp;lt;/code&amp;gt;&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
module.exports = function(grunt)&lt;br /&gt;
{&lt;br /&gt;
  // Project configuration.&lt;br /&gt;
  grunt.initConfig&lt;br /&gt;
  ({&lt;br /&gt;
    pkg: grunt.file.readJSON(&#039;package.json&#039;),&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Datei ist noch ziemlich leer, aber das wird sich ändern.&lt;br /&gt;
&lt;br /&gt;
Vorausschauend sollten Sie eine überflüssige WebStorm-Fehlerprüfung deaktivieren, da anderenfalls künftige&lt;br /&gt;
Änderungen an der Datei &amp;lt;code&amp;gt;gruntfile.js&amp;lt;/code&amp;gt; jedes Mal eine Fehlermeldung zur Folge haben, wenn die&lt;br /&gt;
Datei in ein SVN-Repository geschrieben werden soll:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;File&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;WebStorm&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Settings&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;Preferences&amp;lt;/code&amp;gt;  → &amp;lt;code&amp;gt;Editor&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Inspections&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;JavaScript&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;General&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;Unsued global symbols&amp;lt;/code&amp;gt; deselektieren&lt;br /&gt;
* &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Babel===&lt;br /&gt;
&lt;br /&gt;
Das Compiler „Babel“&amp;lt;ref&amp;gt;Babel: https://babeljs.io/&amp;lt;/ref&amp;gt; wurde geschaffen, da die meisten Browser zwar ECMAScript 5.1&lt;br /&gt;
unterstützten&amp;lt;ref&amp;gt;ECMAScript 5 compatibility table: https://kangax.github.io/compat-table/es5/&amp;lt;/ref&amp;gt;, &lt;br /&gt;
aber nicht die Nachfolgesprachen  ECMAScript 2015, ECMAScript 2016 und ECMAScript 2017.&lt;br /&gt;
Dies hat sich in jüngster Zeit deutlich gebessert. Die meisten Browser unterstützen diese Sprachen in der Zwischenzeit&lt;br /&gt;
sogar besser als Babel.&amp;lt;ref&amp;gt;ECMAScript 6 compatibility table: https://kangax.github.io/compat-table/es6/&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;ECMAScript 2016+ compatibility table: http://kangax.github.io/compat-table/es2016plus/&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Allerdings verstehen die meisten Browser derzeit die sehr wichtigen Export- und Import-Befehle noch nicht.&amp;lt;ref&amp;gt;Export-Statement: https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Statements/export&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Import-Statement: https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Statements/import&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In solchen Fällen kommt Babel zum Einsatz. Babel übersetzt moderneren ECMAScript-Code in älteren ECMAScript-Code. &lt;br /&gt;
(Da „Babel“ den Code nicht in eine  maschinennähere Sprache sondern nur in eine alternative ECMAScript-Version übersetzt, &lt;br /&gt;
sagen viele Nutzer „Transpiler“ an Stelle von „Compiler“.) Auf diese Weise wird erreicht, dass eine deutlich größere Anzahl von Browsern&lt;br /&gt;
den Code ausführen kann. &lt;br /&gt;
&lt;br /&gt;
Babel wurde selbst in ECMAScript geschrieben und liegt  in Form von Node.js-Paketen vor.&amp;lt;ref&amp;gt;babel-cli: https://www.npmjs.com/package/babel-cli&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;babel-preset-env: https://github.com/babel/babel-preset-env&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;grunt-babel: https://github.com/babel/grunt-babel&amp;lt;/ref&amp;gt; &lt;br /&gt;
Installieren Sie diese zunächst:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install --save-dev grunt babel-cli babel-preset-env grunt-babel&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun muss Babel noch konfiguriert werden. Theoretisch könnten Sie den Übersetzer einfach von der Kommandozeile aus&lt;br /&gt;
aufrufen (da ein Command Line Interface – CLI vorliegt). Aber das ist auf dauer etwas mühsam. Besser ist es&lt;br /&gt;
einen Grunt-Task zu definieren, der diese Aufgabe übernimmt.&lt;br /&gt;
&lt;br /&gt;
Andern Sie den Inhalt der Datei &amp;lt;code&amp;gt;gruntfile.js&amp;lt;/code&amp;gt;:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
module.exports = function(grunt)&lt;br /&gt;
{&lt;br /&gt;
  // Project configuration.&lt;br /&gt;
  grunt.initConfig&lt;br /&gt;
  ({&lt;br /&gt;
    pkg: grunt.file.readJSON(&#039;package.json&#039;),&lt;br /&gt;
&lt;br /&gt;
    babel:&lt;br /&gt;
    {&lt;br /&gt;
      options:&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;sourceMap&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      dist:&lt;br /&gt;
      {&lt;br /&gt;
        files:&lt;br /&gt;
        [{&lt;br /&gt;
          &amp;quot;expand&amp;quot;: true,&lt;br /&gt;
          &amp;quot;cwd&amp;quot;:    &amp;quot;src/js&amp;quot;,&lt;br /&gt;
          &amp;quot;src&amp;quot;:    [&amp;quot;**/*.js&amp;quot;],&lt;br /&gt;
          &amp;quot;dest&amp;quot;:   &amp;quot;web/js/&amp;quot;,&lt;br /&gt;
          &amp;quot;ext&amp;quot;:    &amp;quot;.js&amp;quot;&lt;br /&gt;
        }]&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  // Register task(s)&lt;br /&gt;
  grunt.loadNpmTasks(&amp;quot;grunt-babel&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  // Default task(s).&lt;br /&gt;
  grunt.registerTask(&amp;quot;default&amp;quot;, [&amp;quot;babel&amp;quot;]);&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Babel-Konfiguration bewirkt, dass alle Dateien mit der Endung &amp;lt;code&amp;gt;.js&amp;lt;/code&amp;gt;, die sich&lt;br /&gt;
vom Projekt-Wurzelverzeichnis &amp;lt;code&amp;gt;&amp;amp;lt;ROOT&amp;amp;gt;&amp;lt;/code&amp;gt; aus gesehen im Ordner &amp;lt;code&amp;gt;src/js&amp;lt;/code&amp;gt; oder einem darin enthaltenen Unterordner befinden,&lt;br /&gt;
mit Hilfe von Babel übersetzt und in den Ordner  &amp;lt;code&amp;gt;&amp;amp;lt;ROOT&amp;amp;gt;/web/js&amp;lt;/code&amp;gt; kopiert werden. Dort erhalten sie ebenfalls die Endung &amp;lt;code&amp;gt;.js&amp;lt;/code&amp;gt;.&amp;lt;ref&amp;gt;Grunt – Building the files object dynamically: https://gruntjs.com/configuring-tasks#building-the-files-object-dynamically&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe des Befehle &amp;lt;code&amp;gt;grunt.loadNpmTasks(&amp;quot;grunt-babel&amp;quot;);&amp;lt;/code&amp;gt; wird &lt;br /&gt;
der Task registriert. Er kann ab sofort im Wurzelverzeichnis des Projektes mit dem &lt;br /&gt;
Befehl &amp;lt;code&amp;gt;grunt babel&amp;lt;/code&amp;gt; aktiviert werden. Der Befehl&lt;br /&gt;
&amp;lt;code&amp;gt;grunt.loadNpmTasks(&amp;quot;grunt-babel&amp;quot;);&amp;lt;/code&amp;gt; sorgt dafür, dass &lt;br /&gt;
der Task &amp;lt;code&amp;gt;babel&amp;lt;/code&amp;gt; zur Liste der Default-Aktionen von Grunt hinzugefügt wird.&lt;br /&gt;
Das heißt, wenn man &amp;lt;code&amp;gt;grunt&amp;lt;/code&amp;gt; ohne Argument aufruft, wird der&lt;br /&gt;
Babel-Task ebenfalls ausgeführt.&amp;lt;ref&amp;gt;Grunt API: https://gruntjs.com/api/grunt&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um Babel zu testen erzeugen Sie die Datei &amp;lt;code&amp;gt;src/js/main.js&amp;lt;/code&amp;gt;:&lt;br /&gt;
* &amp;lt;code&amp;gt;File&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;WebStorm&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;New&amp;lt;/code&amp;gt;  → &amp;lt;code&amp;gt;Directory&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;File&amp;lt;/code&amp;gt;&lt;br /&gt;
Fügen Sie folgenden EcmaScript-6-Code ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
let evens = [0, 2, 4, 6, 8],&lt;br /&gt;
    odds  = evens.map(langer_parameter_name =&amp;gt; langer_parameter_name + 1),&lt;br /&gt;
    pairs = evens.map(v =&amp;gt; ({ even: v, odd: v + 1 }));&lt;br /&gt;
&lt;br /&gt;
let name = &amp;quot;Anna&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
console.log(evens);&lt;br /&gt;
console.log(odds);&lt;br /&gt;
console.log(pairs);&lt;br /&gt;
console.log(`Hello ${name}!`);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Datei können Sie in WebStorm direkt ausführen:&lt;br /&gt;
* Im Dateibaum Rechtsklick auf &amp;lt;code&amp;gt;src/js/main.js&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Run &#039;main.js&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
Das Ergebnis sehen Sie im Konsolfester von WebStorm, da Node.js schon zu 99% ECMAScript-2015-kompatibel ist.&amp;lt;ref&amp;gt;Node.js ES2015 Support: http://node.green/&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Nun können Sie die Datei &amp;lt;code&amp;gt;src/js/main.js&amp;lt;/code&amp;gt; mit Hilfe von Babel übersetzen.&lt;br /&gt;
Rufen Sie einfach einmal im Terminal einen der beiden Befehle &amp;lt;code&amp;gt;grunt babel&amp;lt;/code&amp;gt; oder einfach nur &amp;lt;code&amp;gt;grunt&amp;lt;/code&amp;gt;  im&lt;br /&gt;
Wurzelverzeichnis des Projektes auf. Sie werden anschließend feststellen, dass ein Ordner &lt;br /&gt;
&amp;lt;code&amp;gt;web/js&amp;lt;/code&amp;gt; angelegt und in diesen eine Datei namens &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt;&lt;br /&gt;
eingefügt wurde. Wenn Sie sich den Inhalt dieser Datei ansehen, stellen Sie fest,&lt;br /&gt;
dass sich sich nicht von der Datei &amp;lt;code&amp;gt;src/js/main.js&amp;lt;/code&amp;gt; unterscheidet. &lt;br /&gt;
&lt;br /&gt;
Das ist nicht weiter verwunderlich, das Babel default-mäßig gar keine Veränderungen vornimmt.&lt;br /&gt;
Sie können sehr feingranular bestimmen, welche Übersetzungen stattfinden sollen.&lt;br /&gt;
Erstellen Sie im Wurzelbezeichnis des Projektes die Datei &amp;lt;code&amp;gt;.babelrc&amp;lt;/code&amp;gt;&lt;br /&gt;
und fügen Sie folgenden Code ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;presets&amp;quot;: [&amp;quot;env&amp;quot;]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Wenn Sie jetzt den Befehl &amp;lt;code&amp;gt;grunt&amp;lt;/code&amp;gt; noch einmal ausführen, werden Sie feststellen,&lt;br /&gt;
dass sich &amp;lt;code&amp;gt;src/js/main.js&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;web/js/main.js&amp;lt;/code&amp;gt; deutlich unterscheiden.&lt;br /&gt;
Die Datei &amp;lt;code&amp;gt;web/js/main.js&amp;lt;/code&amp;gt; enthält nun astreinen ECMAScript-5-Code. Diesen können Sie&lt;br /&gt;
in WebStorm natürlich auch problemlos ausführen. Und in der Konsole werden dieselben Informationen &lt;br /&gt;
ausgegeben wie zuvor von &amp;lt;code&amp;gt;src/js/main.js&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Babel kann den erzeugten Code auch noch gleich komprimieren, das heißt, überflüssige &lt;br /&gt;
Kommentare, Leerzeichen und Zeilenumbrüche entfernen, lange Variablen-, Funktions- und Parameternamen&lt;br /&gt;
durch kurze ersetzen, wann immer dies möglich ist, etc. Dafür benötigt man die &lt;br /&gt;
Node.js-Pakete &amp;lt;code&amp;gt;babel-minify&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;babel-preset-minify&amp;lt;/code&amp;gt;.&amp;lt;ref&amp;gt;babel-minify: https://github.com/babel/minify&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;babel-preset-minify: https://www.npmjs.com/package/babel-preset-minify&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install --save-dev babel-minify babel-preset-minify&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun den Inhalt der Datei &amp;lt;code&amp;gt;.babelrc&amp;lt;/code&amp;gt; durch Folgenden Code ersetzen,&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;presets&amp;quot;: [&amp;quot;env&amp;quot;, &amp;quot;minify&amp;quot;]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
wird &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt;mittels &amp;lt;code&amp;gt;grunt babel&amp;lt;/code&amp;gt; nicht nur in ECMAScript 5 übersetzt, sondern auch noch komprimiert.&lt;br /&gt;
&lt;br /&gt;
Wird dagegen &lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;presets&amp;quot;: [&amp;quot;minify&amp;quot;]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
geschrieben, wird die Datei nur komprimiert, der ECMAScript-2015-Code bleibt hingegen erhalten.&lt;br /&gt;
&lt;br /&gt;
===Automatische Dateierzeugung mittels Grunt===&lt;br /&gt;
&lt;br /&gt;
Einen Nachteil hat die Lösung mit der Übersetzung von Dateien noch.&lt;br /&gt;
Jedesmal wenn man eine Änderung an &amp;lt;code&amp;gt;src/js/main.js&amp;lt;/code&amp;gt; vornimmt, muss man&lt;br /&gt;
den Befehl &amp;lt;code&amp;gt;grunt&amp;lt;/code&amp;gt; aufrufen, um &amp;lt;code&amp;gt;web/js/main.js&amp;lt;/code&amp;gt; zu erzeugen.&lt;br /&gt;
Das ist lästig und fehleranfällig. Besser ist es, bei jeder Änderung der Datei &amp;lt;code&amp;gt;src/js/main.js&amp;lt;/code&amp;gt;&lt;br /&gt;
die Datei &amp;lt;code&amp;gt;web/js/main.js&amp;lt;/code&amp;gt; automatisch zu erstellen. Dies geht mit Hilfe des Node.js-Pakets&lt;br /&gt;
&amp;lt;code&amp;gt;grunt-contrib-watch&amp;lt;/code&amp;gt;&amp;lt;ref&amp;gt;grunt-contrib-watch: https://github.com/gruntjs/grunt-contrib-watch&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install --save-dev grunt-contrib-watch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fügen Sie nun in die Datei &amp;lt;code&amp;gt;gruntfile.js&amp;lt;/code&amp;gt; hinter &lt;br /&gt;
dem &amp;lt;code&amp;gt;babel&amp;lt;/code&amp;gt;-Block folgenden&lt;br /&gt;
Block ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
 watch:&lt;br /&gt;
 { &lt;br /&gt;
   js:&lt;br /&gt;
   { files:   [&#039;src/js/**/*.js&#039;],&lt;br /&gt;
     tasks:   [&#039;babel&#039;]&lt;br /&gt;
   }&lt;br /&gt;
 },&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend müssen Sie den Watch-Task in derselben Datei noch mittels&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
grunt.loadNpmTasks(&#039;grunt-contrib-watch&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
registrieren. Das war es schon. Wenn Sie jetzt den Watch-Task mittels&lt;br /&gt;
&amp;lt;code&amp;gt;grunt watch&amp;lt;/code&amp;gt; in einer Konsole im Wurzelverzeichnis des Projekts starten,&lt;br /&gt;
wird jedesmal, wenn Sie eine Änderung an der Datei &amp;lt;code&amp;gt;src/js/main.js&amp;lt;/code&amp;gt;&lt;br /&gt;
vornehmen und diese speichern, wird die Datei &amp;lt;code&amp;gt;web/js/main.js&amp;lt;/code&amp;gt; automatisch erstellt.&lt;br /&gt;
Versuchen Sie es.&lt;br /&gt;
&lt;br /&gt;
Sie können noch diverse weitere Grunt-Tasks automatisch ausführen lassen,&lt;br /&gt;
wenn Sie sie in die Watch-Liste eintragen. Solange der  Watch-Task läuft, brauchen &lt;br /&gt;
Sie also nichts weiter zu tun, als Ihre Sourcen zu bearbeiten und die erzeugten&lt;br /&gt;
Dateien ({{iAllg}} im Browser) zu testen. Sie können den Watch-Task jederzeit&lt;br /&gt;
beenden um andere Befehle im WebStorm-Terminal auszuführen.&lt;br /&gt;
Sie können aber auch ein zweites Terminal öffnen ({{zB}} eine Git-Bash) und diesen&lt;br /&gt;
Prozess daurthaft laufen lassen, solange Sie an Ihrem Projekt arbeiten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
npm install --save-dev babel-plugin-transform-es2015-modules-commonjs&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
==Quellen==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li value=&amp;quot;18&amp;quot;&amp;gt; {{Quelle|Kowarschick, W.: Multimedia-Programmierung}}&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
[[Kategorie: HTML5-Tutorium: JavaScript: Entwicklungsumgebung]]&lt;br /&gt;
[[Kategorie: HTML5-Beispiel]]&lt;br /&gt;
[[Kategorie:Kapitel:Multimedia-Programmierung:Beispiele]]&lt;br /&gt;
[[Kategorie:Praktikum:MMProg]]&lt;/div&gt;</summary>
		<author><name>Anfe96</name></author>
	</entry>
</feed>