Angepinnt Tutorial: Packages - Was ist das?

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Tutorial: Packages - Was ist das?

      Hallo,
      in diesem Tutorial möchte ich zunächst erklären was Packges sind, welche Typen von Packages es gibt und was es sonst noch im Umgang mit Packages zu beachten gibt.
      Es sei jedoch erwähnt, dass dieses Tutorial sich auf den aktuellen Stand bezieht und da JC3MP noch nicht den Release-Status erreicht hat, sind Änderungen jederzeit möglich. In diesem Fall werde ich jedoch versuchen das Tutorial zu aktualisieren.


      1. Was sind Packages?
      Node.js Entwicklern sind Packages schon bestens bekannt. Für diese lässt sich sagen: Es reicht diesen Abschnitt zu überfliegen, da GTA:MP Packages weitgehend identisch zu NPM Paketen sind.

      Für alle anderen: Packages sind im Grunde genommen mit MTAs Ressourcen vergleichbar, d.h. ein Package ist eine Zusammenstellung aus sinnlich zusammenhängenden Scriptdateien. Wie auch eine MTA Ressource (Stichwort meta.xml) ist ein GTA:MP/NPM Package ein Ordner mit einer Datei namens package.json.
      Statt XML (in MTA) wird hier jedoch JSON (JavaScript Object Notation) verwendet. Das ist insofern vorteilhaft, dass es sich bei JSON prinzipiell um gültigen Javascript Code handelt, sodass nur noch eine Sprache (nämlich Javascript) gelernt werden muss.
      Eine einfache Form einer package.json sieht z.B. so aus:

      JavaScript-Quellcode

      1. {
      2. "name": "My first package",
      3. "author": "WhoKnows"
      4. }
      Sobald das Paket nun gestartet wird (beim STA ist dies beim Starten des Servers automatisch der Fall), wird das Script main.js ausgeführt, von wo aus dann weitere Scripte geladen werden können - egal wo sie gespeichert sind.

      Allen MTAler unter uns mag das Laden von Scripte von einem beliebigen Ort aus zunächst komisch erscheinen. Bei MTA ist dieses "isolierende" Verhalten eine Sicherheitsmaßnahme, die verhindern soll, dass der Schaden von bösartigen, heruntergeladenen Scripts minimal bleibt. Bei GTA:MP dagegen vertritt man die Auffassung, dass der Serverbesitzer das Risiko einschätzen kann/muss und besser maximale Möglichkeiten haben sollte.
      Daher an dieser Stelle auch schonmal eine Warnung: Installiert Packages nur, wenn ihr wisst, dass die Quelle vertrauenswürdig ist, sofern ihr nicht schon immer mal Mitglied eines Botnets werden wolltet.


      2. Welche Typen von Packages gibt es?
      Wie ihr vielleicht schon richtig erkannt habt, werden in der package.json - im Gegensatz zu MTA - keine Scriptdateien und damit kein Scripttyp angegeben.
      Dies liegt daran, dass der Pakettyp durch das Paket selbst bestimmt wird, sodass es 3 Pakettypen gibt:
      • Serverpackage: Ausführung (nur) auf dem Server
      • Clientpackage: Ausführung (nur) auf dem Client
      • GUI-Package: Ausführung auf dem Client in der CEF-Umgebung
      Kommunikation zwischen diesen Pakettypen (und auch zwischen Paketen generell) ist (bisher) nur über das Eventsystem möglich (welches sehr viel Ähnlichkeit mit dem von MTA hat).
      An dieser Stelle ist jedoch zu erwähnen, dass noch nicht bekannt ist, wie der Pakettyp festgelegt wird (da der Client ja noch nicht freigegeben wurde). Ich vermute jedoch, dass der Typ über einen entsprechenden Eintrag in der package.json definiert werden wird.


      3. Was gibt es sonst noch zu Packages zu wissen?
      Wie oben schon erwähnt handelt es sich bei GTA:MP Packages prinzipiell um ganz normale NPM Pakete, weshalb man im Internet auch massig Tutorials zum genauen Aufbau der package.json findet. Daher möchte ich an dieser Stelle nicht weiter darauf eingehen und nur eine Liste von Tutorials im Anhang bereitstellen (sollte jemand weitere, gute Tutorials finden, füge ich diese gerne an).
      Ein wichtiger Vorteil von NPM Paketen gegenüber eigenen Systemen wie dem von MTA ist, dass Code sehr gut wiederverwendet werden kann. Das bedeutet, dass jedes Paket aus dem riesigen NPM Repository verwendet werden kann, sodass die Notwendigkeit von etwas wie MTAs Servermodulen entfällt und bspw. MySQL direkt über das MySQL Paket eingebunden werden kann. Das nimmt einerseits den GTA:MP Entwicklern viel Arbeit ab und führt andererseits dazu, dass die Literatur im Internet/Buchhandel auch hier angewendet werden kann.
      Zu bemerken ist dabei jedoch, dass Node.js/NPM aus Sicherheitsgründen nur auf dem Server verfügbar ist. Auf dem Client dagegen wird reines Javascript verwendet.


      4. Anhang
      NPM Pakete und package.json:

      GTA:MP:
    • Gutes Tutorial hatte bisher bei NodeJs die package.json vermieden, da ich sie immer über flüssig fand.

      Jedoch verstehe ich eins nicht. Wie funktioniert das mit den Node Package Manager? Kann man einfach im package Ordner ein npm installiert reponame machen oder wie? Ich kann man mit das gerade irgendwie nicht vorstellen, wie es genau funktioniert
    • Wenn du bspw. ein Paket per npm install node-schedule installierst, wird es in den Ordner node_modules installiert und kann dann per require('node-schedule') eingebunden werden.
      Die Pakete werden dabei automatisch von npmjs.com/ bezogen.

      Die package.json hat darüber hinaus die Funktion diesen Vorgang zu automatisieren. D.h. dort werden alle benötigten Packages als Abhängigkeiten gelistet und später kann die ganze Software einfach per
      npm install installiert werden.