Możesz zapisać się cały kod boilerplate okablowania swoje moduły jeśli używasz ramy iniekcji zależność
This answer list kilka z nich. Zbudowałem również model simpler DI framework here.
EDIT: poniżej tworzyć kopię odpowiedzi w przypadku, gdy strona zmienia
require
jest sposobem zarządzania zależnościami w node.js i na pewno jest to intuicyjne i skuteczne, ale ma również swoje ograniczenia.
Moja rada to przyjrzeć się niektórym pojemnikom Dependency Injection dostępnym dzisiaj dla Node.js, aby mieć pojęcie o ich zaletach/wadach. Niektóre z nich są:
Wystarczy wymienić tylko kilka.
Teraz prawdziwe pytanie brzmi: co można osiągnąć dzięki pojemnikowi DI Node.js w porównaniu z prostym require
?
Plusy:
- lepiej testowalności: moduły akceptuje ich zależności jako wejście
- odwrócenie sterowania: zdecydować, jak podłączyć moduły bez dotykania głównego kodu aplikacji.
- konfigurowalny algorytm do rozwiązywania modułów: zależności mają "wirtualne" identyfikatory, zazwyczaj nie są powiązane z ścieżką w systemie plików.
- Lepsza rozszerzalność: włączona przez IoC i "wirtualne" identyfikatory.
- Inne fantazyjne rzeczy możliwe:
- asynchroniczny inicjalizacji
- zarządzanie Moduł cyklu
- Rozszerzalność samego kontenera DI
- można łatwo wdrożyć wyższe pobory poziomie (np AOP)
Przeciw:
- Różne od Node.js "doświadczenie": nieużywanie
require
zdecydowanie wydaje się, że odbiegasz od sposobu myślenia Węzeł.
- Relacja między zależnością a jej implementacją nie zawsze jest jednoznaczna. Zależność może zostać rozwiązana w czasie wykonywania i pod wpływem różnych parametrów. Kod staje się coraz trudniejsze do zrozumienia i debugowania
- Dłuższy czas uruchamiania
- zapadalności (w tej chwili): żaden z obecnych rozwiązań jest naprawdę popularne w tej chwili, więc nie tak wiele tutoriali, bez ekosystemu, a nie bitwę przetestowany.
- Niektóre pojemniki DI nie będą dobrze współpracować z modułami pakującymi, takimi jak Browserify i Webpack.
możliwy duplikat http://stackoverflow.com/questions/8931239/how-to-access-variables-declared-in-main-app-js-in-seperate-route-files-in-node/8931366 # 8931366 –