Oto 2 pliki:
// main.js
require('./modules');
console.log(name); // prints "foobar"
// module.js
name = "foobar";
Kiedy nie mam "var", to działa. Ale kiedy mam:
// module.js
var name = "foobar";
nazwa będzie niezdefiniowana w main.js.
Słyszałem, że zmienne globalne są złe i lepiej użyj "var" przed odniesieniami. Ale czy jest to przypadek, w którym zmienne globalne są dobre?
javascript
node.js
global-variables
Never_had_a_name
źródło
źródło
exports
obiektu.global.foo = 'bar'
a następnie uzyskać dostęp wfoo
dowolnym miejscu ... ale jak powiedziałem w mojej oryginalnej odpowiedzi, prawie nigdy nie jest to dobra rzecz.Nie mogę znaleźć scenariusza, w którym globalny
var
jest najlepszą opcją, oczywiście możesz ją mieć, ale spójrz na te przykłady, a być może znajdziesz lepszy sposób na osiągnięcie tego samego:Scenariusz 1: umieść rzeczy w plikach konfiguracyjnych
Potrzebujesz pewnej wartości, która jest taka sama w całej aplikacji, ale zmienia się w zależności od środowiska (produkcyjnego, deweloperskiego lub testowego), na przykład typu mailera, którego potrzebujesz:
i
(zrób podobną konfigurację również dla programistów)
Aby zdecydować, która konfiguracja zostanie załadowana, utwórz główny plik konfiguracyjny (będzie on używany w całej aplikacji)
A teraz możesz uzyskać takie dane :
Scenariusz 2: użyj pliku stałych
I używaj tego w ten sposób
Scenariusz 3: Użyj funkcji pomocniczej, aby pobrać / ustawić dane
Nie jestem wielkim fanem tego, ale przynajmniej możesz śledzić użycie „nazwy” (cytując przykład PO) i wprowadzić walidacje.
I użyj go
Może wystąpić przypadek użycia, gdy nie ma innego rozwiązania niż posiadanie globalnego
var
, ale zwykle możesz udostępniać dane w swojej aplikacji za pomocą jednego z tych scenariuszy, jeśli zaczynasz używać node.js (tak jak kiedyś) spróbuj uporządkować sposób obsługi danych, ponieważ może to szybko stać się bałaganiarskie.źródło
Jeśli musimy udostępniać wiele zmiennych, użyj poniższego formatu
Stosowanie
źródło
Zapisz dowolną zmienną, która ma być udostępniana jako jeden obiekt. Następnie przekaż go do załadowanego modułu, aby mógł uzyskać dostęp do zmiennej poprzez odniesienie do obiektu.
W innym pliku ...
źródło
zmienna zadeklarowana ze słowem kluczowym var lub bez niego została dołączona do obiektu globalnego. To jest podstawa tworzenia zmiennych globalnych w Node poprzez deklarowanie zmiennych bez słowa kluczowego var. Podczas gdy zmienne zadeklarowane za pomocą słowa kluczowego var pozostają lokalne dla modułu.
zobacz ten artykuł, aby uzyskać więcej informacji - https://www.hacksparrow.com/global-variables-in-node-js.html
źródło
Mając inne zdanie, myślę, że
global
zmienne mogą być najlepszym wyborem, jeśli zamierzasz opublikować swój kodnpm
, ponieważ nie możesz być pewien, że wszystkie pakiety używają tego samego wydania kodu. Więc jeśli używasz pliku do eksportusingleton
obiektu, spowoduje to tutaj problemy.Można wybrać
global
,require.main
czy wszelkie inne przedmioty, które są wspólne dla plików.Proszę powiedz mi, czy są jakieś lepsze rozwiązania.
źródło