И така, какво е това "изисква се?"
require()
не е част от стандартния API на JavaScript. Но в Node.js това е вградена функция със специална цел:зареждане на модули.
Модулите са начин да разделите приложение на отделни файлове, вместо да имате цялото си приложение в един файл. Тази концепция присъства и в други езици с малки разлики в синтаксиса и поведението, като include
на C , import
на Python , и така нататък.
Една голяма разлика между модулите Node.js и JavaScript на браузъра е как се осъществява достъп до кода на един скрипт от кода на друг скрипт.
-
В JavaScript на браузъра скриптовете се добавят чрез
<script>
елемент. Когато се изпълняват, всички те имат директен достъп до глобалния обхват, "споделено пространство" между всички скриптове. Всеки скрипт може свободно да дефинира/променява/премахва/извиква всичко в глобалния обхват. -
В Node.js всеки модул има свой собствен обхват. Един модул не може директно да има достъп до неща, дефинирани в друг модул, освен ако не избере да ги изложи. За да разкриете неща от модул, те трябва да бъдат присвоени на
exports
илиmodule.exports
. За един модул за достъп доexports
на друг модул илиmodule.exports
, трябва да използваrequire()
.
Във вашия код var pg = require('pg');
зарежда pg
модул, PostgreSQL клиент за Node.js. Това позволява на вашия код да има достъп до функционалността на API на клиента PostgreSQL чрез pg
променлива.
Защо работи в възел, но не и в уеб страница?
require()
, module.exports
и exports
са API на модулна система, която е специфична за Node.js. Браузърите не внедряват тази модулна система.
Освен това, преди да го накарам да работи в node, трябваше да направя
npm install pg
. За какво става дума?
NPM е услуга за съхранение на пакети, която хоства публикувани JavaScript модули. npm install
е команда, която ви позволява да изтегляте пакети от тяхното хранилище.
Къде го постави и как го намира Javascript?
npm cli поставя всички изтеглени модули в node_modules
директория, където сте изпълнили npm install
. Node.js има много подробна документация за това как модулите намират други модули, която включва намиране на node_modules
директория.