Takže co je to "vyžadovat?"
require()
není součástí standardního JavaScript API. Ale v Node.js je to vestavěná funkce se speciálním účelem:načítat moduly.
Moduly představují způsob, jak rozdělit aplikaci do samostatných souborů namísto toho, abyste měli celou aplikaci v jednom souboru. Tento koncept je přítomen i v jiných jazycích s menšími rozdíly v syntaxi a chování, jako je include
v jazyce C , import
Pythonu , a tak dále.
Jedním z velkých rozdílů mezi moduly Node.js a JavaScriptem prohlížeče je způsob, jakým se ke kódu jednoho skriptu přistupuje z kódu jiného skriptu.
-
V JavaScriptu prohlížeče se skripty přidávají pomocí
<script>
živel. Když jsou spuštěny, mají všechny přímý přístup ke globálnímu rozsahu, „sdílenému prostoru“ mezi všemi skripty. Jakýkoli skript může libovolně definovat/upravovat/odebírat/volat cokoli v globálním rozsahu. -
V Node.js má každý modul svůj vlastní rozsah. Modul nemůže přímo přistupovat k věcem definovaným v jiném modulu, pokud se nerozhodne je vystavit. Chcete-li vystavit věci z modulu, musí být přiřazeny k
exports
nebomodule.exports
. Pro modul pro přístup kexports
jiného modulu nebomodule.exports
, musí používatrequire()
.
V kódu var pg = require('pg');
načte pg
modul, klient PostgreSQL pro Node.js. To umožňuje vašemu kódu přistupovat k funkcím rozhraní API klienta PostgreSQL prostřednictvím pg
proměnná.
Proč to funguje v uzlu, ale ne na webové stránce?
require()
, module.exports
a exports
jsou API modulového systému, který je specifický pro Node.js. Prohlížeče tento modulový systém neimplementují.
Než jsem to zprovoznil v uzlu, musel jsem také provést
npm install pg
. O co jde?
NPM je služba úložiště balíčků, která hostí publikované moduly JavaScriptu. npm install
je příkaz, který vám umožňuje stahovat balíčky z jejich úložiště.
Kam to vložil a jak to Javascript najde?
npm cli vloží všechny stažené moduly do node_modules
adresář, ve kterém jste spustili npm install
. Node.js má velmi podrobnou dokumentaci o tom, jak moduly nacházejí jiné moduly, včetně nalezení node_modules
adresář.