2016-08-04 44 views
0

Node/NPM-Neuling mit einer Front-End-Dev-Frage. Ich verstehe, dass eine der Stärken eines Moduls vom Typ NPM darin besteht, dass seine Abhängigkeiten in node_modules in sich selbst installiert werden. Module haben immer den Code, den sie benötigen, und externe Bibliotheken stehen nicht in Konflikt.Front-End-Knoten NPM-Module und mehrere Downloads der gleichen Abhängigkeit

Das scheint, als würde dies dazu führen, dass der Client die gleiche lib + ver mehrmals (zB jquery v.X) herunterlädt. Was ist die Technik zum Angeben, dass ein Modul eine Abhängigkeit benötigt, aber dass es diesen Code nicht packen sollte, wenn die Abhängigkeit bereits auf der Site/Seite vorhanden ist? Umfasst diese Technik Elternmodule, die die freigegebene Lib + ver verfügbar machen?

Oder sollten verschiedene Front-End-Module die gleiche Lib + ver erneut herunterladen, die andere Module auf der Seite möglicherweise bereits heruntergeladen haben?

+0

Ich nehme an, dass wenn ich einen Build skripte, ich keine shared libs verwende und ich spezifiziere, dass html-Script-Tags erzeugt werden, um die shared library herunterzuladen, wenn sie vom Modul angefordert werden. Auch besser für Browser-Caching. Oder anders? Sollte ich nur alle Bibliotheken, die für ein bestimmtes Modul benötigt werden, zusammenstellen und sich nicht um das zusätzliche Gewicht kümmern? –

Antwort

0

Der Client greift nur Dateien aus diesem Ordner, die benötigt werden. Wenn er also in HTML verlinkt ist, wird der Client ihn nur einmal greifen. NPM verarbeitet Abhängigkeitsduplikate automatisch.

Mit diesen gesagt, normalerweise möchten Sie nur einen statischen Ordner zum Client dienen, ohne Ihre gesamte Server-Struktur zu enthüllen. Dies kann erreicht werden durch:

app.use(express.static('server/public')

wo ‚server/public‘ ist das Verzeichnis, in Bezug auf die server.js Datei, die Sie dienen sollen. In diesem Fall enthält 'public' alle meine verknüpften Ansichtsdateien, Stylesheets, JS-Dateien usw., die von den HTML-Seiten verlinkt sind. Sie müssen die Abhängigkeiten dieses Moduls ebenfalls nicht verschieben.

Der Nachteil ist, dass Sie Abhängigkeiten manuell in den öffentlichen Ordner verschieben müssen (ich mache normalerweise ein 'vendor'-Verzeichnis) und verlinke von dort. Es ist mehr Arbeit, aber auf lange Sicht viel effizienter und sicherer.

HINWEIS: Wenn Sie einen statischen Ordner zum Bereitstellen von Dateien verwenden, werden Ihre HTML-Links von einem relativen Pfad zu diesem Ordner bereitgestellt.

+0

Danke, joh ... dass Middleware eine gute Option für die Sicherheit ist. Für jetzt komme ich von altem Schulmanual css und js, die verbinden und versuchen, meinen Kopf herum zu erhalten, den alles über Knoten handhabend. Tatsächlich sehe ich, dass "webpack" "code splitting" zu sharedLibs vs. seitenspezifischen js-Dateien erlaubt ... das mache ich an dieser Stelle leichter :-) –