Vermeiden ../../../../../../ ..
Nicht alles in einer Anwendung gehört ordnungsgemäß zur öffentlichen npm, und der Aufwand für die Einrichtung einer privaten npm oder eines Git-Repos ist in vielen Fällen immer noch recht hoch. Hier sind einige Ansätze zur Vermeidung des ../../../../../../../
Problems der
relativen Pfade.
Knotenmodule
Menschen lehnen es manchmal ab, anwendungsspezifische Module in node_modules einzufügen, da es nicht offensichtlich ist, wie Sie Ihre internen Module einchecken können, ohne auch Module von Drittanbietern ab npm einzuchecken.
Die Antwort ist ganz einfach! Wenn Sie eine .gitignore
Datei haben, die Folgendes ignoriert node_modules
:
node_modules
Sie können !
für jedes Ihrer internen Anwendungsmodule einfach eine Ausnahme hinzufügen :
node_modules/*
!node_modules/foo
!node_modules/bar
Bitte beachten Sie, dass Sie ein Unterverzeichnis nicht aufheben können , wenn das übergeordnete Verzeichnis bereits ignoriert wird. Also statt sie zu ignorieren node_modules
, müssen Sie jedes Verzeichnis ignorieren innen node_modules
mit dem
node_modules/*
Trick, und dann können Sie Ihre Ausnahmen hinzufügen.
Jetzt überall in Ihrer Anwendung werden Sie in der Lage sein, require('foo')
oder require('bar')
ohne einen sehr großen und fragilen relativen Pfad aufweist.
Wenn Sie viele Module haben und diese von den von npm installierten Modulen von Drittanbietern trennen möchten, können Sie sie einfach in einem Verzeichnis ablegen, node_modules
z. B node_modules/app
.:
node_modules/app/foo
node_modules/app/bar
Jetzt können Sie von require('app/foo')
oder zu require('app/bar')
jedem Ort in Ihrer Anwendung.
Fügen Sie in Ihrem .gitignore
einfach eine Ausnahme hinzu für node_modules/app
:
node_modules/*
!node_modules/app
Wenn in Ihrer Anwendung Transformationen in package.json konfiguriert wurden, müssen Sie eine separate package.json mit einem eigenen Transformationsfeld in Ihrem node_modules/foo
oder node_modules/app/foo
Komponentenverzeichnis erstellen, da Transformationen nicht über Modulgrenzen hinweg angewendet werden . Dadurch werden Ihre Module robuster gegen Konfigurationsänderungen in Ihrer Anwendung und es ist einfacher, die Pakete außerhalb Ihrer Anwendung unabhängig voneinander wiederzuverwenden.
symlink
Ein weiterer praktischer Trick, wenn Sie an einer Anwendung arbeiten, in der Sie Symlinks erstellen können und Windows nicht unterstützen müssen, ist das Symlinken eines lib/
oder eines app/
Ordners node_modules
. Führen Sie im Projektstamm Folgendes aus:
ln -s ../lib node_modules/app
und jetzt können Sie von überall in Ihrem Projekt Dateien lib/
anfordern require('app/foo.js')
, indem Sie dies tun , um sie abzurufen lib/foo.js
.
benutzerdefinierte Pfade
Möglicherweise wird an einigen Stellen über die Verwendung der $NODE_PATH
Umgebungsvariablen oder opts.paths
das Hinzufügen von Verzeichnissen für Node und Browserify gesprochen, um nach Modulen zu suchen.
Im Gegensatz zu den meisten anderen Plattformen ist die Verwendung eines Array von Pfadverzeichnissen im Shell-Stil mit $NODE_PATH
im Knoten nicht so günstig wie die effektive Nutzung des node_modules
Verzeichnisses.
Dies liegt daran, dass Ihre Anwendung enger an eine Laufzeitumgebungskonfiguration gekoppelt ist, sodass mehr bewegliche Teile vorhanden sind und Ihre Anwendung nur funktioniert, wenn Ihre Umgebung korrekt eingerichtet ist.
Node und Browserify unterstützen beide, raten jedoch von der Verwendung von ab
$NODE_PATH
.