HTML5-Tutorium: JavaScript: Entwicklungsumgebung: Node.js: Unterschied zwischen den Versionen

aus GlossarWiki, der Glossar-Datenbank der Fachhochschule Augsburg
Keine Bearbeitungszusammenfassung
 
(95 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{HTML5-Tutorium:JavaScript:Entwicklungsumgebung:Menü}}
{{HTML5-Tutorium:JavaScript:Entwicklungsumgebung:Menü}}


Zur Unterstützung der Entwicklung von Web-Anwendungen kann [[Node.js]]<ref>https://nodejs.org/en/</ref> eingesetzt werden:
'''Musterlösung''': [https://gitlab.multimedia.hs-augsburg.de/kowa/WK_Test01 GIT-Repository]
automatische Übersetzung von [[ECMAScript|ECMAScript 6/7/8]] (genauer ECMAScript 2015/2016/2017) in ECMAScript 5.1, automatische Generierung der
Dokumentation, automatisches Testen der Anwendung etc.


Das heißt, auch wenn man keine [[Node.js-Server]]-Anwendung erstellt, ist Node.js ein  
Zur Unterstützung der Entwicklung von Web-Anwendungen kann [[Node.js]]<ref>Node.js: https://nodejs.org/en/</ref> eingesetzt werden.
Typische Aufgaben von Node.js sind dabei:
Generierung von statischen HTML-Seiten aus HTML-Templates, Komprimierung von HTML-/CSS-/JavaScript-Code für den Client (Browser), automatische Generierung der Dokumentation, automatisches Testen der Anwendung etc. pp.
 
Das heißt, auch wenn man keine Node.js-Server-Anwendung erstellen sollte, ist Node.js ein  
sehr wertvolles und universell einsetzbares Werkzeug.
sehr wertvolles und universell einsetzbares Werkzeug.


==Installation==
==Installation==
===Unix-Shell===
Web-Entwickler verwenden unter Windows {{iAllg}} ein Terminal, das eine [[Unix]]-[[Shell]] simuliert.
Unter Linux und Mac OS X ist es nicht notwendig, eine separate Unix-Shell zu installieren, da
diese dort sowieso schon existiert (Unix: bash, Mac OS X: terminal).
Installieren Sie „Git for Windows“ (<code>https://git-for-windows.github.io/</code>; 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.
Das ist eine Terminal-Anwendung, die eine Linux-Bash emuliert und zahlreiche nützliche Befehle wie <code>which</code>, <code>[[vi]]</code> ( :-) ) etc. zur
Verfügung stellt.
Unter [[HTML5-Tutorium: JavaScript: Entwicklungsumgebung: WebStorm|WebStorm]] steht ebenfalls ein Terminal zur Verfügung,
in dem Sie Kommandozeilen-Befehle absetzen können:
* Klick auf Icon in der linken unteren Ecke → Klick auf <code>Terminal</code>
Wenn Sie das Web-Storm-Terminal verwenden, befinden Sie sich automatisch im Wurzelverzeichnis des zugehörigen Projektes.
Bei Im Allgemeinen müssen Sie jedoch mit Hilfe des Unix-Befehls <code>cd&nbsp;&lt;PFAD&gt;</code> in das Wurzelverzeichnis des
Projektes wechseln, wenn Sie Befehle ansetzen wollen, die sich auf ein bestimmtes Projekt beziehen.


===Node.js===
===Node.js===
Installieren Sie nun Node.js: <code>https://nodejs.org/en/</code>, <code>https://nodejs.org/dist/latest/</code>, Version 8.x.
Installieren Sie nun Node.js: <code>https://nodejs.org/en/</code>, Version 20.x.  
Achten Sie darauf, dass die Option <code>Add to PATH</code> ausgewählt wurde.


Starten Sie ein Unix-Terminal ({{zB}} Mac-OS-X-Terminal, <code>bash</code> oder auch WebStorm: Klick auf Icon in der linken unteren Ecke → Klick auf <code>Terminal</code>).
Starten Sie VSC neu und öffnen Sie ein Terminal, um zu testen, ob <code>node</code> funktioniert:
Öffnen Sie das Terminal, um zu testen, ob <code>node</code> funktioniert:


* Geben Sie Folgendes in die Konsole ein: <code>node -v</code>
* Geben Sie Folgendes in die Konsole ein: <code>node -v</code>  oder <code>node --version</code>


Wenn Node.js korrekt installiert und der Pfad mit den <code>node</code>-Binaries in die Systemvariable <code>PATH</code> eingetragen wurde,
Wenn Node.js korrekt installiert <!--und der Pfad mit den <code>node</code>-Binaries in die Systemvariable <code>PATH</code> eingetragen--> wurde,
sollte die Versionsnummer von <code>node</code> ausgegeben werden.
sollte die Versionsnummer von <code>node</code> ausgegeben werden.


Zeile 42: Zeile 25:
Zu Beginn mag das für eingefleischte [[Klickibunti]]-Fans ungewohnt sein, aber Sie werden sich schnell daran gewöhnen.
Zu Beginn mag das für eingefleischte [[Klickibunti]]-Fans ungewohnt sein, aber Sie werden sich schnell daran gewöhnen.


===Wichtige Node.js-Pakete===
===Ein Node.js-Test-Projekt ohne Funktionalität===


Mit Hilfe von <code>npm</code> (npm = node package manager, https://www.npmjs.com/) können beliebige Node.js-Pakete installiert werden.
Mit Hilfe von <code>npm</code><ref>npm: https://docs.npmjs.com/</ref> (node package manager) können beliebige Node.js-Pakete installiert werden.
Viele dieser Pakte könnte man global auf dem Rechner installieren.
Die globale Installation hätte zur Folge, dass jedes Projekt auf diese Pakete zugreifen kann, Pakete also nicht mehrfach installiert werden müssen.


Im Allgemeinen ist es alledings besser, die Pakete für jedes Projekt separat zu installieren. Insbesondere für den Webpack-Dev-Server ist dies zwingend
Viele dieser Pakete könnte man global auf dem Rechner installieren.
notwendig. Dazu muss man zunächst einen leeren Ordner anlegen, indem das neue Projekt liegt. Es kann ein beliebiger Ordner gewählt werden.
Die globale Installation hätte zur Folge, dass jedes Projekt auf diese Pakete zugreifen könnte und damit Pakete nicht mehrfach installiert werden müssten.
Im Folgenden wählen wir <code>/C/mmprog/test</code> als Beispielsordner. (Bachaten Sie, dass in der GIT Bash unter Windows Linux-Pfad-Bezeichner
Im Allgemeinen ist es allerdings besser, die Pakete für jedes Projekt separat, {{dh}} projektlokal zu installieren.  
anstelle von Window-Pfad-Bezeichnern verwendet werden.)
Die kostet zwar mehr Platz, hat aber den Vorteil, dass man für verschiedene Projekte verschiedene Pakete verwenden kann. Es kann durchaus sein, dass
zwei verschiedene Pakete ein drittes benötigen, doch jeweils in einer anderen Version. Außerdem stehen einem anderen Entwickler, der eine Kopie
Ihres Projekts erhält, dann sofort alle Pakete in der jeweils benötigten Version zur Verfügung.
 
Um ein neues Projekt zu erstellen, legt man zunächst einen leeren Ordner an. Es kann ein beliebiger Ordner gewählt werden.
Im Folgenden wählen wird <code>/C/webprog/test01</code> als Beispielsordner verwendet. (Beachten Sie, dass in der GIT Bash wie auch im HTML-Umfeld immer Linux-Pfad-Bezeichner verwendet werden, auch unter Windows.) Unter Mac OS X/Unix sollten Sie einen Pfad in Ihren Mac/Unix-Home-Verzeichnis wählen, {{zB}}
<code>~/webprog/test01</code>. (Die Tilde <code>~</code> ist in Unix und damit auch in Mac OS X ein kurzer Alternativname für das Home-Verzeichnis. Sie können auch den vollständigen Pfad zu Ihrem Benutzerverzeichnus verwenden. Mac: <code>/Users/MACBENUTZERNAME</code>, Unix: <code>/home/UNIXBENUTZERNAME</code>).


Öffnen Sie nun ihr bevorzugtes Unix-Terminal
Öffnen Sie nun das Terminal
und geben Sie folgenden Befehle ein:
und geben Sie folgenden Befehle ein:


<source lang="bash">
<source lang="bash">
                        # Erzeugen Sie ein neues (leeres!) Projektverzeichnis.
mkdir -p /C/webprog/test01      # bzw: mkdir -p ~/webprog/test01
                        # Bitte passen Sie diesen Pfad an Ihre Gegebenheiten an.
                                # Erzeugen Sie ein neues (leeres!)  
mkdir -p /C/mmprog/test  # Achten Sie darauf, dass es diesen Pfad vorher nicht gegeben hat.
                                # Projektverzeichnis.
cd /C/mmprog/test        # Hier müssen Sie den von Ihnen zuvor definierten Pfad angeben.   
                                # Bitte passen Sie diesen Pfad an  
npm init -y             # Erzeugen Sie ein neues Node.js-Projekt unter Kontrolle von npm.
                                # Ihre Gegebenheiten an.
                        # Installieren Sie nun die Node.js-Pakete grunt (Task-Manager)
 
                        # und babel (JavaScript-Transpiler) projektlokal.
cd /C/webprog/test01            # bzw: cd ~/webprog/test01
npm install --save-dev grunt babel-cli babel-preset-env grunt-babel
                                # Hier müssen Sie den von Ihnen  
ls -al                   # Sehen Sie sich an, welche Dateien und Ordner erzeugt wurden.
                                # zuvor definierten Pfad angeben.   
ls -al node-pagacke/.bin
npm init -y                     # Erzeugen Sie ein neues Node.js-
                          # Damit WebStorm den Befehl 'node-pagacke/.bin/grunt' findet,
                                # Projekt mit Hilfe von npm.
                          # muss noch das Grunt-Command-Line-Interface global
 
                          # installiert werden.
ls -al                         # Sehen Sie sich an, welche Dateien  
npm install -g grunt-cli
                                # und Ordner erzeugt wurden.
less package.json       # Sehen Sie sich den Inhalt der Konfigurationsdatei an.
 
</source><!--
less package.json               # Sehen Sie sich den Inhalt der
npm install --save-dev grunt babel-cli yuglify mincss jshint jsdoc ink-docstrap
                                # Konfigurationsdatei an.
npm install --save-dev grunt-babel babel-preset-env grunt-contrib-watch grunt-contrib-cssmin grunt-contrib-uglify
                                # Verlassen von "less":
npm install --save-dev grunt babel
                                #  Taste "q" drücken.
npm install --save-dev grunt-babel babel-preset-env
 
--><!--grunt-cli jsdoc yuglify mincss coffee-script jshint -->
                                # Installieren Sie nun testhalber
                                # zwei Node.js-Pakete projektlokal.
npm install --save-dev file-loader css-loader
npm i -D file-loader css-loader # hat denselben Effekt, ist aber kürzer
npm list
less package.json              # Durch Drücken der Taste "q" zur Konsole zurückkehren
 
npm install vue
npm list
less package.json
 
ls -al       
ls -al node_modules            # In diesem Ordner befinden sich nicht
                                # nur file-loader und css-loader, sondern
                                # auch alle Node.js-Pakete, die von diesen
                                # beiden Paketen benutzt werden!
                                # node_modules enthält schon nach kurzer
                                # Zeit Tausende von Ordnern und Dateien!
ls -al node_modules/file-loader
ls -al node_modules/css-loader
 
                                # Löschen Sie nun testhalber eines
                                # der beiden Pakete.
npm uninstall --save-dev file-loader
 
ls -al node_modules/file-loader
ls -al node_modules/css-loader


Sie können das Projekt in WebStorm öffenen, um die zugehörigen Dateien mit dem
less package.json
WebStorm-Editor bearbeiten zu können:


* <code>File</code>/<code>WebStorm</code> → <code>Open</code>
rm -rf node_modules              # Löschen Sie den gesamten Ordner
* Zum zuvor angelegten Testordner navigieren und diesen mit <code>OK</code> öffnen. Die Frage, ob Sie das Projekt im selben oder in einem neuen Fenster öffnen wollen, können Sie nach Belieben beantworten.  
                                # node_modules.
ls -al       
ls -al node_modules


Sie können Ihre JavaScript-Projekt-Dateien auch mit jedem beliebigen anderen Code-Editor (Atom, Sublime, Nodepad++, Emacs etc. pp.) bearbeiten.
less package.json
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.
less package-lock.json
(Es gibt allerdings auch für Node.js einen einfachen HTTP-Server, der bei der Entwicklung von HTML-Anwendungen zu
Testzwecken einegesetzt werden kann: https://github.com/indexzero/http-server)
Außerdem enthält WebStorm ein Terminalfenster (Menü am unternen Fensterrand), der unter Windows allerdings
nur Windows-Befehle ausführen kann. Unter Windows verwende ich daher für komplexere Aufgaben die (Git-)Bash.


Sie sollten sich angewöhnen, in der Datei <code>package.json</code> sofort nachdem Sie sie
npm i                            # Erzeugen Sie den Ordner node_modules
                                # neu (mit Hilfe der Informationen
                                # in den Dateien package.json und
                                # package-lock.json).
ls -al       
ls -al node_modules
 
touch .gitignore                # Datei .gitignore anlegen
echo node_modules > .gitignore  # Datei .gitignore mit Inhalt füllen
less .gitignore                  # Der Ordner node_modules wird NICHT im
                                # GIT-Repository gesichert!!!
git init                        # Initialisiere das zugehörige Git-Repository
git add .                        # Füge alle Dateien des aktuellen Ordners
                                # ins Repository
git commit                      # Aktualisiere das Repository
 
# Stellen Sie sicher, dass Sie in git Ihren "user.name" und Ihre "user.email" konfigurieren.
git config --global user.email "E-Mail-Adresse"
git config --global user.name  "Benutzername"
 
# Melden Sie sich mit Ihrem RZ-Account zunächst im Gitlab an,
# damit der Remote-Zugriff auf Gitlab funktioniert:
#  https://gitlab.multimedia.hs-augsburg.de
 
# Verknüpfen Sie nun Ihr Projekt mit Gitlab.
# Ersetzen Sie im folgenden Befehl umbefingt ACCOUNT
# durch Ihren Benutzernamen:
git remote add origin https://gitlab.multimedia.hs-augsburg.de/ACCOUNT/test01.git
                               
git remote -v                    # Zeige die aktuelle Verknüpfung an.
git push                        # Übertrage die aktuelle Version ins Repository
git push --set-upstream origin master
                                # Nur beim ersten Mal
</source>
 
Sie können das Projekt in VSC öffnen, um die zugehörigen Dateien mit dem
VSC-Editor zu betrachten und gegebenenfalls auch bearbeiten:
 
* <code>File</code>/<code>Code</code> → <code>Open Folder</code>
* Zum zuvor angelegten Testordner navigieren und diesen mit <code>Ordner auswählen</code> öffnen.
 
Sie könnten Ihre JavaScript-Projekt-Dateien auch mit jedem beliebigen anderen Code-Editor (Atom, Sublime, Nodepad++, Emacs etc. pp.) bearbeiten.
Das liegt ganz bei Ihnen. Im Praktikum wird VSC verwendet. Diese IDE ist ganz angenehm zu bedienen und enthält (via Extension) einen kleinen Web-Server,
der die Entwicklung von JavaScript-Code erleichtert.
 
Sie sollten sich angewöhnen, in der Datei <code>package.json</code>, sofort nachdem Sie sie
erstellt haben, ein paar projektspezifische Informationen zu ergänzen, wobei Sie die Werte
erstellt haben, ein paar projektspezifische Informationen zu ergänzen, wobei Sie die Werte
natürlich an Ihre Gegebenheiten anpassen müssen:
natürlich an Ihre Gegebenheiten anpassen müssen:


<source lang="json">
<pre>
  "kewords": ["test"],
"name": "test01",
  "author": "Wolfgang Kowarschick",
"version": "0.0.1",
  "license": "CC-BY-NC-SA-4.0",
"description": "Dies ist ein erster Test ohne weitere Funktionalität."
</source>
...
"keywords": ["test"],
"author": "Wolfgang Kowarschick",
"license": "MIT",
...
</pre>
 
Sie können auch noch, um lästigen NPM-Warnings vorzubeugen,
das Repository einfügen (vor <code>devDependencies</code>), in dem sich das Projekt später befinden wird.
 
{{pre|
"repository": {
  "type": "git",
  "url": "{{Git-Server}}/ACCOUNT/test01"
},
}}
 
Hier müssen Sie natürlich ebenfalls <code>ACCOUNT</code> durch Ihren RZ-Account ersetzen.


Ändern Sie dagegen nicht die Paketinformationen, die im Attribut <code>devDependencies</code> gespeichert sind.
Ändern Sie dagegen nie die Paketinformationen, die im Attribut <code>devDependencies</code> gespeichert sind.
Diese werden mittels <code>npm</code> verwaltet.
Diese werden mittels <code>npm</code> verwaltet.
Der Node-Paket-Manager <code>npm</code> ist ein sehr nützliches Hilfsprogramm,
Der Node-Paket-Manager <code>npm</code> ist ein sehr nützliches Hilfsprogramm,
mit dem Sie neue Node-Projekte erstellen (<code>npm init -y</code>), Pakete installieren (<code>npm install</code>) und
mit dem Sie neue Node-Projekte erstellen (<code>npm init -y</code>), Pakete installieren (<code>npm install</code>) und
wieder löschen (<code>npm uninstall</code>) und vieles mehr machen können (Dokumentation: https://docs.npmjs.com/).
wieder löschen (<code>npm uninstall</code>) sowie vieles mehr machen können (Dokumentation: https://docs.npmjs.com/).


Wichtig ist auch der Befehl
Wichtig ist auch der Befehl
Zeile 116: Zeile 189:


<source lang="bash">
<source lang="bash">
npm list
npm list   # projektlokale Node.js-Pakete
</source>
</source>


erfragen.
erfragen.


Sie können Pakete auch lokal löschen und dann mittels <code>npm install</code> wieder herstellen.
Sie können auch überprüfen, ob Sie in Ihrem Projekt irgendwelche veralteten Pakete benutzen (https://docs.npmjs.com/cli/outdated):
Versuchen Sie es (Achtung: Die Unix-Befehle <code>ls</code> und <code>rm</code> funktionieren
unter Windows nur in der Bash. In einem Windows-Terminal heißen die entsprechenden Befehle  <code>dir</code> und <code>del</code>):
 
<source lang="bash">
<source lang="bash">
ls -al node_modules # Liste alle Dateien und Verzeichnisse auf,
npm outdated    # projektlokale Node.js-Pakete
                    # die im Ordner node_modules enthalten sind.
rm -rf node_modules # Lösche diesen ORdner samt Inhalt.
npm list
ls -al node_modules
npm install
ls -al node_modules
npm list
</source>
</source>


Sie können auch überprüfen, ob Sie in Ihrem Projekt irgendwelche veralteten Pakete benutzen (https://docs.npmjs.com/cli/outdated):
Kein Ergebnis ist hier ein gutes Ergebnis! Ansonsten sollten die die veralteten Pakete aktualisieren:
 
<source lang="bash">
<source lang="bash">
npm outdated   # projektspezifische Node.js-Pakete
npm update   # projektlokale Node.js-Pakete  
npm -g outdated # globale Node.js-Pakete
</source>
</source>


Kein Ergebnis ist hier ein gutes Ergebnis!
Da <code>npm</code> global installiert wurde (was auch sinnvoll ist), müssen Sie zum Aktualisieren von <code>npm</code> zusätlich die Option <code>-g</code> angeben:


Node.js-Pakete können, wie wir gesehen haben, mittels der npm-Option <code>-g</code> auch global gespeichert werden.  
<source lang="bash">
Allerdings ist es meist besser, sie mittels der Option <code>--save-dev</code> projektlokal zu speicher.
npm -v                                # Gib die aktuelle Version von npm aus.
Die kostet zwar mehr Platz, hat aber den Vorteil, dass man für verschiedene Projekte verschiedene Pakete verwenden kann. Es kann durchaus sein, dass
npm install -g agentkeepalive --save # ist evtl. notwendig, um einen Fehler zu beheben
zwei verschiedene Pakete ein drittes benötigen, doch jeweils in einer anderen Version. Außerdem stehen einem anderen Entwickler, der eine Kopie
npm -g install npm                    # Mac OS X: sudo npm -g install npm
Ihres Projektes erhält, dann sofort alle Pakete in der jeweils benötigten Version zur Verfügung.Dies ist vor allem beim Speichern eines derartigen Projektes in eine Repository ([[SVN]], [[Git]] etc.)
npm -v                                # Gib die aktuelle Version von npm aus.
sehr störend. Ein Paket wie <code>grunt-cli</code>, dessen einzige Aufgabe es ist, die jeweils projektlokale
</source>
Version von Grunt auszuführen, kann und sollte man dagegen global installieren.
Das Tool <code>npm</code> kann sich also selbst aktualisieren. :-)


Node.js-Pakete können, wie wir gesehen haben, mittels der NPM-Option <code>-g</code> auch global gespeichert werden, werden aber normalerweise projektlokal abgelegt.
Durch die projektlokale Speicherung von Node.js-Paketen bläht sich ein Projekt sehr stark auf. Es enthält dann  
Durch die projektlokale Speicherung von Node.js-Paketen bläht sich ein Projekt sehr stark auf. Es enthält dann  
meist mehrere Hundert oder gar mehrere Tausend Dateien, auch wenn das eigentliche Projekt nur aus ein paar wenigen Dateien besteht.  
meist mehrere Tausend Dateien, auch wenn das eigentliche Projekt nur aus ein paar wenigen Dateien besteht. Dies ist vor allem beim Speichern eines derartigen Projekts in eine Repository ([[Git]], [[SVN]] etc.)
Um dieses Problem zu vermeiden, muss man die Speicherung von Node.js-Bibliotheken im Repository ausschließen und
sehr störend. Dennoch sollte man nur ein Paket wie <code>npm</code>, dessen einzige Aufgabe es ist, die Node.js-Pakete selbst zu verwalten, global installieren.
diese Dateien bei Bedarf auftomatisch von den entsprechenden Servern herunterladen. Wie das geht, haben wir gerade gesehen:
Man läd das Projekt auf seinen Arbeitsrechner, öffnet ein Terminal, wechselt mittels <code>cd</code> ins Wurzelverzeichnis des Projektes
(beim WebStorm-Terminal befindet man sich standardmäßig immer im Root-Verzeichnis des Projektes) und führt
<code>npm install</code> aus.  


===Grunt===
Um das Repository-Problem zu vermeiden, muss man die Speicherung von Node.js-Bibliotheken im [[Repository]] ausschließen und
diese Dateien bei Bedarf automatisch von den entsprechenden Servern herunterladen. Wie das geht, haben wir gerade gesehen:
Man lädt das Projekt auf seinen Arbeitsrechner, öffnet ein Terminal, wechselt mittels <code>cd</code> ins Wurzelverzeichnis des Projekts
(beim VSC-Terminal befindet man sich standardmäßig immer im Root-Verzeichnis des Projekts) und führt
<code>npm install</code> bzw. <code>npm i</code> aus. Dies ist viel effizienter, als Node.js-Module zwischen verschiedenen Speicherbereichen hin- und her zu kopieren.


Als nächstes initialisieren Sie Grunt (https://gruntjs.com/) <ref>https://gruntjs.com/</ref>.
=== Zugriff auf Gitlab mittels SSH ===
Grunt ist ein “JavaScript Task Runner”, also ein Programm, das Aufgaben (''tasks'') wie {{zB}} das Übersetzen von [[ECMAScript|ECMAScript 2015/16/17]] in
ECMAScript 5.1 oder das Komprimieren von Programmdateien automatisch durchführt.


Die Initialisierung erfolgt durch die Bereitstellung zweier Dateien <code>package.json</code>
Öffnen Sie ein Bash-Terminal und erzeugen Sie ein SSH-Key-Paar:
und <code>gruntfile.json</code> im Root-Verzeichnis der Web-Anwendung. Die Datei <code>package.json</code>
haben Sie schon mittels <code>npm init</code> erstellt.


In der Datei <code>package.json</code> gibt es das Attribut <code>main</code>.
<source lang="bash">
Es enthält den Namen der Konfigurationsdatei von Grunt: <code>gruntfile.js</code>.
ssh-keygen -t ed25519 -C "gitlab.multimedia.hs-augsburg.de"
Diese fehlt allerdings noch. Also legen Sie sie im Wurzelverzeichnis des Projektes mit einem Texteditor Ihrer Wahl an:
</source>


'''<code>gruntfile.js</code>'''  
Fügen Sie den '''öffentlichen''' Schlüssel in Gitlab ein.
<source lang="javascript">
Öffnen Sie die Url
module.exports = function(grunt)
<source lang="bash">
{
https://gitlab.multimedia.hs-augsburg.de/
  // Project configuration.
</source>
  grunt.initConfig
loggen Sie sich ein und navigieren Sie zu den SSH-Settings
  ({
<source lang="bash">
    pkg: grunt.file.readJSON('package.json'),
https://gitlab.multimedia.hs-augsburg.de/-/profile/keys
  });
(Icon rechts oben → Preferences → SSH Keys)
};
</source>
</source>
Fügen Sie den Text aus der Datei <code>id_ed25519.pub</code> in das
Textfeld <code>Key</code> und klicken Sie <code>Add key</code>.


Diese Datei ist noch ziemlich leer, aber das wird sich ändern.
Nun können Sie in Ihrer Bash den SSH-Zugang überprüfen. (Denken Sie daran,
dass der Gitlab-Server derzeit nur per VPN zugänglicg ist.)


Vorausschauend sollten Sie eine überflüssige WebStorm-Fehlerprüfung deaktivieren, da anderenfalls künftige
<source lang="bash">
Änderungen an der Datei <code>gruntfile.js</code> jedes Mal eine Fehlermeldung zur Folge haben, wenn die
mkdir -p ~/tmp
Datei in ein SVN-Repository geschrieben werden soll:
cd ~/tmp
ssh -T git@gitlab.multimedia.hs-augsburg.de
# Antwort: Welcome to GitLab, @ACCOUNT!
git clone git@gitlab.multimedia.hs-augsburg.de:ACCOUNT/hello_world_01.git
# Reaktion: Ihr Hello-World-01-Repository wird heruntergeladen.
ls -al hello_world_01
</source>


* <code>File</code>/<code>WebStorm</code> → <code>Settings</code>/<code>Preferences</code>  → <code>Editor</code> → <code>Inspections</code>
== Fortsetzung des Tutoriums ==
* <code>JavaScript</code> aufklappen → <code>General</code> aufklappen → <code>Unsued global symbols</code> deselektieren
* <code>OK</code>


<!--
Sie sollten nun [[HTML5-Tutorium: JavaScript: Hello World|Hello-World-Tutorium]] bearbeiten.
{{TBD}}
==Ausschließen diverser Dateien von automatischer Speicherung und/oder Überprüfung==
 
Sie sollten unbedingt verhindern das Node.js-Modulateien ins Repository geschrieben werden. Da ist, wie Sie zuvor gesehen haben,
überflüssig und nimmt '''sehr viel''' Zeit in Anspruch, da es sich um Hunderte von Dateien handelt:
 
* Rechtsklick im Dateibaum auf <code>node_modules</code>  → <code>Subversion</code> → <code>Ignore</code> → <code>node_modules</code>
* Sollte der vorangegangene Schritt schief gegangen sein (WebStorms Subversion-Tools sind in dieser Hinsicht ziemlich schlecht), müssen Sie den letzten Schritt gegebenenfalls mit einem anderen Tool bewerkstelligen. Unter Windows ist Tortoise dafür recht gut geeignet.
 
Außerdem sollten Sie die automatische Überprüfung auf Fehler für alle Ordner ausschalten, die nicht von Ihnen stammen:
 
* Rechtsklick im Dateibaum auf  <code>node_modules</code> → <code>Mark Directory as</code> → <code>excluded</code>
* Rechtsklick im Dateibaum auf  <code>doc</code> → <code>Mark Directory as</code> → <code>excluded</code>
 
Beide Ordner enthalten Dateien, die nicht von Ihnen stammen. Diese Dateien können Fehler und Hinweise enthalten,
veraltete (“deprecated”) Schnittstellen verwenden etc. (Oh ja, auch andere Programmierer machen Fehler. :-) )
Und wenn Sie diese beiden Ordner nicht als <code>excluded markieren</code>, prüft WebStorm bei jedem Commit die
darin enthaltenen Dateien und weist Sie auf jedes Problem hin. Das können so viele Probleme sein, dass Sie die
Probleme in Ihren eigenen Dateien vollkommen übersehen.
-->
 
 
 
 
 
[[Kategorie:Kapitel:Web-Programmierung]]
[[Kategorie:Web-Programmierung-HowTo]]
[[Kategorie:Praktikum:MMProg]]


==Quellen==
==Quellen==
<references/>
<references/>
<ol>
<ol>
<li value="1"> {{Quelle|Kowarschick, W.: Multimedia-Programmierung}}</li>
<li value="3">{{Quelle|Kowarschick (WebProg)}}</li>
</ol>
</ol>
<noinclude>[[Kategorie: HTML5-Tutorium: JavaScript: Entwicklungsumgebung]][[Kategorie: HTML5-Beispiel]][[Kategorie:Kapitel:Multimedia-Programmierung:Beispiele]]</noinclude>
[[Kategorie: HTML5-Tutorium: JavaScript: Entwicklungsumgebung]]
[[Kategorie:Kapitel:Multimedia-Programmierung:Beispiele]]
[[Kategorie:Praktikum:MMProg]]
[[Kategorie:Web-Programmierung-HowTo]]

Aktuelle Version vom 19. März 2024, 15:50 Uhr

Dieser Artikel erfüllt die GlossarWiki-Qualitätsanforderungen nur teilweise:

Korrektheit: 3
(zu größeren Teilen überprüft)
Umfang: 2
(wichtige Fakten fehlen)
Quellenangaben: 2
(wichtige Quellen fehlen)
Quellenarten: 3
(gut)
Konformität: 5
(ausgezeichnet)

Vorlesung WebProg

Inhalt | Visual Studio Code | Node.js

Musterlösung: GIT-Repository

Zur Unterstützung der Entwicklung von Web-Anwendungen kann Node.js[1] eingesetzt werden. Typische Aufgaben von Node.js sind dabei: Generierung von statischen HTML-Seiten aus HTML-Templates, Komprimierung von HTML-/CSS-/JavaScript-Code für den Client (Browser), automatische Generierung der Dokumentation, automatisches Testen der Anwendung etc. pp.

Das heißt, auch wenn man keine Node.js-Server-Anwendung erstellen sollte, ist Node.js ein sehr wertvolles und universell einsetzbares Werkzeug.

Installation

Node.js

Installieren Sie nun Node.js: https://nodejs.org/en/, Version 20.x.

Starten Sie VSC neu und öffnen Sie ein Terminal, um zu testen, ob node funktioniert:

  • Geben Sie Folgendes in die Konsole ein: node -v oder node --version

Wenn Node.js korrekt installiert wurde, sollte die Versionsnummer von node ausgegeben werden.

Sie werden feststellen, das Node.js zum Großteil über Terminal-Befehle gesteuert wird. Zu Beginn mag das für eingefleischte Klickibunti-Fans ungewohnt sein, aber Sie werden sich schnell daran gewöhnen.

Ein Node.js-Test-Projekt ohne Funktionalität

Mit Hilfe von npm[2] (node package manager) können beliebige Node.js-Pakete installiert werden.

Viele dieser Pakete könnte man global auf dem Rechner installieren. Die globale Installation hätte zur Folge, dass jedes Projekt auf diese Pakete zugreifen könnte und damit Pakete nicht mehrfach installiert werden müssten. Im Allgemeinen ist es allerdings besser, die Pakete für jedes Projekt separat, d. h. projektlokal zu installieren. Die kostet zwar mehr Platz, hat aber den Vorteil, dass man für verschiedene Projekte verschiedene Pakete verwenden kann. Es kann durchaus sein, dass zwei verschiedene Pakete ein drittes benötigen, doch jeweils in einer anderen Version. Außerdem stehen einem anderen Entwickler, der eine Kopie Ihres Projekts erhält, dann sofort alle Pakete in der jeweils benötigten Version zur Verfügung.

Um ein neues Projekt zu erstellen, legt man zunächst einen leeren Ordner an. Es kann ein beliebiger Ordner gewählt werden. Im Folgenden wählen wird /C/webprog/test01 als Beispielsordner verwendet. (Beachten Sie, dass in der GIT Bash wie auch im HTML-Umfeld immer Linux-Pfad-Bezeichner verwendet werden, auch unter Windows.) Unter Mac OS X/Unix sollten Sie einen Pfad in Ihren Mac/Unix-Home-Verzeichnis wählen, z. B. ~/webprog/test01. (Die Tilde ~ ist in Unix und damit auch in Mac OS X ein kurzer Alternativname für das Home-Verzeichnis. Sie können auch den vollständigen Pfad zu Ihrem Benutzerverzeichnus verwenden. Mac: /Users/MACBENUTZERNAME, Unix: /home/UNIXBENUTZERNAME).

Öffnen Sie nun das Terminal und geben Sie folgenden Befehle ein:

mkdir -p /C/webprog/test01      # bzw: mkdir -p ~/webprog/test01
                                # Erzeugen Sie ein neues (leeres!) 
                                # Projektverzeichnis.
                                # Bitte passen Sie diesen Pfad an 
                                # Ihre Gegebenheiten an.

cd /C/webprog/test01            # bzw: cd ~/webprog/test01
                                # Hier müssen Sie den von Ihnen 
                                # zuvor definierten Pfad angeben.  
npm init -y                     # Erzeugen Sie ein neues Node.js-
                                # Projekt mit Hilfe von npm.

ls -al                          # Sehen Sie sich an, welche Dateien 
                                # und Ordner erzeugt wurden.

less package.json               # Sehen Sie sich den Inhalt der
                                # Konfigurationsdatei an.
                                # Verlassen von "less": 
                                #   Taste "q" drücken.

                                # Installieren Sie nun testhalber
                                # zwei Node.js-Pakete projektlokal.
npm install --save-dev file-loader css-loader 
npm i -D file-loader css-loader # hat denselben Effekt, ist aber kürzer
npm list
less package.json               # Durch Drücken der Taste "q" zur Konsole zurückkehren

npm install vue
npm list
less package.json 

ls -al        
ls -al node_modules             # In diesem Ordner befinden sich nicht 
                                # nur file-loader und css-loader, sondern 
                                # auch alle Node.js-Pakete, die von diesen
                                # beiden Paketen benutzt werden!
                                # node_modules enthält schon nach kurzer
                                # Zeit Tausende von Ordnern und Dateien!
ls -al node_modules/file-loader
ls -al node_modules/css-loader

                                # Löschen Sie nun testhalber eines 
                                # der beiden Pakete.
npm uninstall --save-dev file-loader

ls -al node_modules/file-loader
ls -al node_modules/css-loader

less package.json

rm -rf node_modules              # Löschen Sie den gesamten Ordner
                                 # node_modules.
ls -al        
ls -al node_modules

less package.json
less package-lock.json

npm i                            # Erzeugen Sie den Ordner node_modules
                                 # neu (mit Hilfe der Informationen
                                 # in den Dateien package.json und 
                                 # package-lock.json).
ls -al        
ls -al node_modules

touch .gitignore                 # Datei .gitignore anlegen
echo node_modules > .gitignore   # Datei .gitignore mit Inhalt füllen
less .gitignore                  # Der Ordner node_modules wird NICHT im 
                                 # GIT-Repository gesichert!!!
git init                         # Initialisiere das zugehörige Git-Repository
git add .                        # Füge alle Dateien des aktuellen Ordners
                                 # ins Repository
git commit                       # Aktualisiere das Repository

# Stellen Sie sicher, dass Sie in git Ihren "user.name" und Ihre "user.email" konfigurieren.
git config --global user.email "E-Mail-Adresse"
git config --global user.name  "Benutzername"

# Melden Sie sich mit Ihrem RZ-Account zunächst im Gitlab an,
# damit der Remote-Zugriff auf Gitlab funktioniert:
#   https://gitlab.multimedia.hs-augsburg.de

# Verknüpfen Sie nun Ihr Projekt mit Gitlab.
# Ersetzen Sie im folgenden Befehl umbefingt ACCOUNT 
# durch Ihren Benutzernamen:
git remote add origin https://gitlab.multimedia.hs-augsburg.de/ACCOUNT/test01.git
                                 
git remote -v                    # Zeige die aktuelle Verknüpfung an.
git push                         # Übertrage die aktuelle Version ins Repository
git push --set-upstream origin master
                                 # Nur beim ersten Mal

Sie können das Projekt in VSC öffnen, um die zugehörigen Dateien mit dem VSC-Editor zu betrachten und gegebenenfalls auch bearbeiten:

  • File/CodeOpen Folder
  • Zum zuvor angelegten Testordner navigieren und diesen mit Ordner auswählen öffnen.

Sie könnten Ihre JavaScript-Projekt-Dateien auch mit jedem beliebigen anderen Code-Editor (Atom, Sublime, Nodepad++, Emacs etc. pp.) bearbeiten. Das liegt ganz bei Ihnen. Im Praktikum wird VSC verwendet. Diese IDE ist ganz angenehm zu bedienen und enthält (via Extension) einen kleinen Web-Server, der die Entwicklung von JavaScript-Code erleichtert.

Sie sollten sich angewöhnen, in der Datei package.json, sofort nachdem Sie sie erstellt haben, ein paar projektspezifische Informationen zu ergänzen, wobei Sie die Werte natürlich an Ihre Gegebenheiten anpassen müssen:

"name": "test01",
"version": "0.0.1",
"description": "Dies ist ein erster Test ohne weitere Funktionalität."
...
"keywords": ["test"],
"author": "Wolfgang Kowarschick",
"license": "MIT",
...

Sie können auch noch, um lästigen NPM-Warnings vorzubeugen, das Repository einfügen (vor devDependencies), in dem sich das Projekt später befinden wird.

"repository": {
  "type": "git",
  "url": "https://gitlab.multimedia.hs-augsburg.de/ACCOUNT/test01"
},

Hier müssen Sie natürlich ebenfalls ACCOUNT durch Ihren RZ-Account ersetzen.

Ändern Sie dagegen nie die Paketinformationen, die im Attribut devDependencies gespeichert sind. Diese werden mittels npm verwaltet.

Der Node-Paket-Manager npm ist ein sehr nützliches Hilfsprogramm, mit dem Sie neue Node-Projekte erstellen (npm init -y), Pakete installieren (npm install) und wieder löschen (npm uninstall) sowie vieles mehr machen können (Dokumentation: https://docs.npmjs.com/).

Wichtig ist auch der Befehl

npm update

Mit diesem können Sie die lokal gespeicherte Versionen der im Attribut devDependencies aufgeführte Node.js-Pakete jederzeit auf die neueste Version aktualisieren. Die aktuell installierten Versionen können Sie mit

npm list    # projektlokale Node.js-Pakete

erfragen.

Sie können auch überprüfen, ob Sie in Ihrem Projekt irgendwelche veralteten Pakete benutzen (https://docs.npmjs.com/cli/outdated):

npm outdated    # projektlokale Node.js-Pakete

Kein Ergebnis ist hier ein gutes Ergebnis! Ansonsten sollten die die veralteten Pakete aktualisieren:

npm update    # projektlokale Node.js-Pakete

Da npm global installiert wurde (was auch sinnvoll ist), müssen Sie zum Aktualisieren von npm zusätlich die Option -g angeben:

npm -v                                # Gib die aktuelle Version von npm aus.
npm install -g agentkeepalive --save  # ist evtl. notwendig, um einen Fehler zu beheben
npm -g install npm                    # Mac OS X: sudo npm -g install npm
npm -v                                # Gib die aktuelle Version von npm aus.

Das Tool npm kann sich also selbst aktualisieren. :-)

Node.js-Pakete können, wie wir gesehen haben, mittels der NPM-Option -g auch global gespeichert werden, werden aber normalerweise projektlokal abgelegt. Durch die projektlokale Speicherung von Node.js-Paketen bläht sich ein Projekt sehr stark auf. Es enthält dann meist mehrere Tausend Dateien, auch wenn das eigentliche Projekt nur aus ein paar wenigen Dateien besteht. Dies ist vor allem beim Speichern eines derartigen Projekts in eine Repository (Git, SVN etc.) sehr störend. Dennoch sollte man nur ein Paket wie npm, dessen einzige Aufgabe es ist, die Node.js-Pakete selbst zu verwalten, global installieren.

Um das Repository-Problem zu vermeiden, muss man die Speicherung von Node.js-Bibliotheken im Repository ausschließen und diese Dateien bei Bedarf automatisch von den entsprechenden Servern herunterladen. Wie das geht, haben wir gerade gesehen: Man lädt das Projekt auf seinen Arbeitsrechner, öffnet ein Terminal, wechselt mittels cd ins Wurzelverzeichnis des Projekts (beim VSC-Terminal befindet man sich standardmäßig immer im Root-Verzeichnis des Projekts) und führt npm install bzw. npm i aus. Dies ist viel effizienter, als Node.js-Module zwischen verschiedenen Speicherbereichen hin- und her zu kopieren.

Zugriff auf Gitlab mittels SSH

Öffnen Sie ein Bash-Terminal und erzeugen Sie ein SSH-Key-Paar:

ssh-keygen -t ed25519 -C "gitlab.multimedia.hs-augsburg.de"

Fügen Sie den öffentlichen Schlüssel in Gitlab ein. Öffnen Sie die Url

https://gitlab.multimedia.hs-augsburg.de/

loggen Sie sich ein und navigieren Sie zu den SSH-Settings

https://gitlab.multimedia.hs-augsburg.de/-/profile/keys
(Icon rechts oben → Preferences → SSH Keys)

Fügen Sie den Text aus der Datei id_ed25519.pub in das Textfeld Key und klicken Sie Add key.

Nun können Sie in Ihrer Bash den SSH-Zugang überprüfen. (Denken Sie daran, dass der Gitlab-Server derzeit nur per VPN zugänglicg ist.)

mkdir -p ~/tmp
cd ~/tmp 
ssh -T git@gitlab.multimedia.hs-augsburg.de
# Antwort: Welcome to GitLab, @ACCOUNT!
git clone git@gitlab.multimedia.hs-augsburg.de:ACCOUNT/hello_world_01.git
# Reaktion: Ihr Hello-World-01-Repository wird heruntergeladen.
ls -al hello_world_01

Fortsetzung des Tutoriums

Sie sollten nun Hello-World-Tutorium bearbeiten.

Quellen

  1. Kowarschick (WebProg): Wolfgang Kowarschick; Vorlesung „Web-Programmierung“; Hochschule: Hochschule Augsburg; Adresse: Augsburg; Web-Link; 2024; Quellengüte: 3 (Vorlesung)