Så vad är detta "kräver?"
require()
är inte en del av standard JavaScript API. Men i Node.js är det en inbyggd funktion med ett speciellt syfte:att ladda moduler.
Moduler är ett sätt att dela upp ett program i separata filer istället för att ha alla dina program i en fil. Detta koncept finns även på andra språk med mindre skillnader i syntax och beteende, som C:s include
, Pythons import
, och så vidare.
En stor skillnad mellan Node.js-moduler och webbläsarens JavaScript är hur ett skripts kod nås från ett annat skripts kod.
-
I webbläsarens JavaScript läggs skript till via
<script>
element. När de körs har de alla direkt tillgång till det globala scopet, ett "delat utrymme" bland alla skript. Alla skript kan fritt definiera/modifiera/ta bort/anropa vad som helst inom det globala omfånget. -
I Node.js har varje modul sin egen omfattning. En modul kan inte direkt komma åt saker som är definierade i en annan modul om den inte väljer att exponera dem. För att exponera saker från en modul måste de tilldelas
exports
ellermodule.exports
. För att en modul ska få tillgång till en annan modulsexports
ellermodule.exports
, det måste användarequire()
.
I din kod, var pg = require('pg');
laddar pg
modul, en PostgreSQL-klient för Node.js. Detta gör att din kod får tillgång till funktionerna i PostgreSQL-klientens API:er via pg
variabel.
Varför fungerar det i nod men inte på en webbsida?
require()
, module.exports
och exports
är API:er för ett modulsystem som är specifikt för Node.js. Webbläsare implementerar inte detta modulsystem.
Dessutom, innan jag fick det att fungera i noden, var jag tvungen att göra
npm install pg
. Vad handlar det om?
NPM är en paketförvarstjänst som är värd för publicerade JavaScript-moduler. npm install
är ett kommando som låter dig ladda ner paket från deras arkiv.
Var placerade den den och hur hittar Javascript den?
npm cli placerar alla nedladdade moduler i en node_modules
katalog där du körde npm install
. Node.js har mycket detaljerad dokumentation om hur moduler hittar andra moduler, vilket inkluderar att hitta en node_modules
katalog.