Så hvad er dette "kræve?"
require()
er ikke en del af standard JavaScript API. Men i Node.js er det en indbygget funktion med et særligt formål:at indlæse moduler.
Moduler er en måde at opdele en applikation i separate filer i stedet for at have hele din applikation i én fil. Dette koncept er også til stede på andre sprog med mindre forskelle i syntaks og adfærd, såsom C's include
, Pythons import
, og så videre.
En stor forskel mellem Node.js-moduler og browser-JavaScript er, hvordan man får adgang til et scripts kode fra et andet scripts kode.
-
I browser JavaScript tilføjes scripts via
<script>
element. Når de udføres, har de alle direkte adgang til det globale scope, et "delt rum" blandt alle scripts. Ethvert script kan frit definere/ændre/fjerne/kalde hvad som helst på det globale område. -
I Node.js har hvert modul sit eget omfang. Et modul kan ikke direkte få adgang til ting, der er defineret i et andet modul, medmindre det vælger at afsløre dem. For at eksponere ting fra et modul skal de tildeles
exports
ellermodule.exports
. For at et modul skal få adgang til et andet modulsexports
ellermodule.exports
, det skal brugerequire()
.
I din kode, var pg = require('pg');
indlæser pg
modul, en PostgreSQL-klient til Node.js. Dette giver din kode adgang til funktionaliteten af PostgreSQL-klientens API'er via pg
variabel.
Hvorfor virker det i node, men ikke på en webside?
require()
, module.exports
og exports
er API'er for et modulsystem, der er specifikt for Node.js. Browsere implementerer ikke dette modulsystem.
Før jeg fik det til at virke i node, skulle jeg også udføre npm install pg
. Hvad handler det om?
NPM er en pakkeopbevaringstjeneste, der er vært for publicerede JavaScript-moduler. npm install
er en kommando, der lader dig downloade pakker fra deres lager.
Hvor blev det placeret, og hvordan finder Javascript det?
npm cli'en placerer alle de downloadede moduler i en node_modules
bibliotek, hvor du kørte npm install
. Node.js har meget detaljeret dokumentation om, hvordan moduler finder andre moduler, hvilket inkluderer at finde en node_modules
bibliotek.