/ / Zakres wykonania modułów węzłów - node.js, moduł, zakres

Zakres działania modułów węzłów - node.js, moduł, zakres

Jestem trochę nowy z węzłem i to pytanie dotyczy więcej wewnętrznej pracy modułów węzła.

Kiedy potrzebujemy modułu, powinien zostać załadowany iuruchamiamy w kontekście głównego pliku, który tego wymaga (ten, który uruchamiamy z konsoli za pomocą polecenia node). Zatem wszystkie funkcje zdefiniowane w tym kontekście (wymagane moduły węzłów) powinny mieć dostęp do wszystkich zmiennych w module głównym ze względu na reguły leksykalnego zakresu, ale tak nie jest. Na przykład niestandardowy moduł routingu nie ma dostępu do instancji aplikacji, chyba że go jawnie przekażemy.

Czy moduły są wykonywane w jakimś izolowanym zakresie?

Odpowiedzi:

1 dla odpowiedzi № 1

Moduły są wykonywane w tym samym kontekście v8, ale tak się dzieje za pomocą vm.runInThisContext(). The dokumentacja dla tej funkcji informuje, że wykonywany kod nie mieć dostęp do lokalnego zakresu (np eval() robi na przykład), ale robi mieć dostęp do global zmienna. W większości przypadków można to traktować jako oddzielny kontekst (np. Brak dostępu do zmiennych lokalnych, funkcji itp.), Chociaż technicznie tak nie jest.

W konkretnym przypadku użycia routingu HTTP projekty zazwyczaj przechodzą w app obiekt (zakładając tutaj Express) lub wyeksportuje instancję Routera, którą skrypt nadrzędny montuje w jakiejś ścieżce.