Czym więc jest to „wymaganie”?
require()
nie jest częścią standardowego interfejsu API JavaScript. Ale w Node.js jest to wbudowana funkcja o specjalnym przeznaczeniu:ładowaniu modułów.
Moduły to sposób na podzielenie aplikacji na osobne pliki zamiast umieszczania całej aplikacji w jednym pliku. Ta koncepcja jest również obecna w innych językach z niewielkimi różnicami w składni i zachowaniu, takich jak include
w C , import
Pythona i tak dalej.
Jedną dużą różnicą między modułami Node.js a JavaScriptem przeglądarki jest sposób, w jaki kod jednego skryptu jest uzyskiwany z kodu innego skryptu.
-
W przeglądarce JavaScript skrypty są dodawane za pomocą
<script>
element. Kiedy są wykonywane, wszyscy mają bezpośredni dostęp do zakresu globalnego, „wspólnej przestrzeni” między wszystkimi skryptami. Każdy skrypt może dowolnie definiować/modyfikować/usuwać/wywoływać wszystko w zakresie globalnym. -
W Node.js każdy moduł ma swój własny zakres. Moduł nie może uzyskać bezpośredniego dostępu do elementów zdefiniowanych w innym module, chyba że zdecyduje się je ujawnić. Aby ujawnić rzeczy z modułu, muszą być przypisane do
exports
lubmodule.exports
. Aby moduł mógł uzyskać dostęp doexports
innego modułu lubmodule.exports
, musi używaćrequire()
.
W kodzie var pg = require('pg');
ładuje pg
moduł, klient PostgreSQL dla Node.js. Pozwala to Twojemu kodowi na dostęp do funkcji API klienta PostgreSQL poprzez pg
zmienna.
Dlaczego działa w węźle, ale nie na stronie internetowej?
require()
, module.exports
i exports
to interfejsy API systemu modułów, które są specyficzne dla Node.js. Przeglądarki nie implementują tego systemu modułowego.
Ponadto, zanim udało mi się uruchomić w węźle, musiałem wykonać npm install pg
. O co chodzi?
NPM to usługa repozytorium pakietów, która obsługuje opublikowane moduły JavaScript. npm install
to polecenie, które pozwala pobierać pakiety z ich repozytorium.
Gdzie to zostało umieszczone i jak JavaScript go znajduje?
Cli npm umieszcza wszystkie pobrane moduły w node_modules
katalog, w którym uruchomiłeś npm install
. Node.js zawiera bardzo szczegółową dokumentację dotyczącą tego, jak moduły znajdują inne moduły, w tym znajdowanie node_modules
katalog.