воскресенье, 30 июня 2013 г.

Основы NodeJS

Нод состоит из модулей.

Три вида модулей:
*.js        Server-side javascript
*.node   Скомпилированный модуль на C
*.json    Данные в формате json, которые можно подключить и использовать





Чтобы подключить модуль в скрипт нужно воспользоваться функцией require:
var fs = require("fs");

Когда мы указываем, что нам что-то нужно, в первую очередь нод смотрит а нет ли такого кор-модуля, модуля который живет в папке модулей установленой инстанции нода.
Кроме кор-модуля таким образом можно также подключить файл со скриптом, тогда передается на имя, а путь к скрипту.

Также мы можем указать имя модуля, который живет не в ноде, а в дериктории node_modules, которую нод будет искать начиная с поточной и до рута файловой системы.
Если же мы не хотим создавать такую директорию, но хочем пользоваться указанием просто имени, а не всего пути, нашего скрипта который часто используется в нашем проекте, мы можем перед выполнением приложению установить NODE_PATH в поточную директорию.
export NODE_PATH=. ; node app.js
Кеширование
require - все вызовы в приложении будут возвращать один и тот же обьект, который был создан при первом же вызове. Другой может быть возвращен, если в поточной директории, есть папка node_modules и в ней находится этот модуль.

Теперь поговорим немного о том, что же передается при подключении скприта. Все переменные остаются локальными. Но в любом выполняемом скрипте доступна переменная module, которая представляет поточный файл, в ней можем найти путь к файлу, какие модули подключены, а также переменную через которую мы можем передать что-то во внешний мир - когда подключают нас: module.exports

Эта переменная представлена двумя другими ссылками на нее:
exports - недостаток в том, что мы не можем передать во вне не пакет, а только представление модуля в виде одной функции-класса, мы так просто переопределим эту ссылку на нашу локальную
exports = User; // была ссылка на module.exports, а стала на User
//Чтобы передать User нужно сделать вот так явно
module.exports = User;
this - недостаток в том, что это сильно не явно, мы можем ее пользоваться только в верхнем уровне вложенности, во всех функциях сприптах  зис будет означать контекст функции, а не експорт модуля.

Есть также global.User = User - этим мы делаем юзера доступным во всех сприптах, которые будет выполнены за жизненный цикл приложения, но особого смысла это не имеет и этим практически никто не пользуется.


Модули могут быть представлены либо просто файлом mymodule.js либо каталогом mymodule, в котором обязательно должен быть файл index.js, который и подгружается при обращении к модулю, другие же файлы каталога обычно используются этим индексом.

Комментариев нет:

Отправить комментарий