Zajmuję moduł węzła my-module
który z kolei zależy od innego modułu other-module
. other-module
jest więc zależnością jawnie wymienioną w pliku package.json mojego modułu.Jak uniknąć węzeł wymaga ładowania sam moduł dwukrotnie
Jak mój moduł modyfikuje zachowanie other-module
tylko będąc require
d, ważne jest, że other-module
jest ładowany tylko raz, a że to jeden i tylko „przypadek” jest jednym odwołuje całym dowolnej aplikacji, która wymaga zarówno my
i other
.
Spodziewałem to prawdziwe według węzła modułu zasad buforowania ale co ja natrafiłem podczas pisania prostych aplikacji testowej jest taka:
Jeśli my-module
jest npm install
ed przedother-module
wtedy ostatni doprowadza jako zależność tego pierwszego. npm install
ing other-module
następnie przenosi go do hierarchii node_modules po raz drugi. Następnie, gdy mój moduł wymaga other-module
, węzeł ładuje "lokalną" kopię mojego modułu, a kiedy jest to drugi węzeł czasowy ponownie ładuje ją (tym razem wersja, która została zainstalowana z powodu drugiego npm install
). To oczywiście nie jest zamierzony rezultat.
Jeśli my-module
jest npm installe
d poother-module
potem skończyć z tylko jednej kopii z other-module
w node_modules i moja aplikacja Test działa zgodnie z oczekiwaniami.
Takie zachowanie got me ponownie przeglądając odpowiednich polityk węźle i na pewno wystarczy natknąłem opisu modułu buforowania Ostrzeżenia ':
Moduły są buforowane na podstawie ich rozwiązany pliku. Ponieważ moduły mogą rozwiązać inną nazwę pliku w oparciu o lokalizację modułu wywołującego (ładowanie z folderów node_modules), nie jest to gwarancja, która wymaga ("foo") zawsze zwróci dokładnie ten sam obiekt, jeśli byłaby to odpowiedź na różne pliki .
W tym momencie wygląda na to, że mój moduł może lub nie może zachowywać się zgodnie z oczekiwaniami w zależności od kolejności npm install
s.
Czy istnieją najlepszych praktyk mi brakuje? Czy istnieje sposób na uniknięcie tego bałaganu bez zmiany sposobu działania mojego modułu?