====== Базовый функционал ======

===== include/require =====

==== Порядок поиска файлов при подключении ==== 

=== Описание ===

  - Поиск внутренних модулей nodejs
  - LOAD_AS_FILE(X) - Модуль как файл
  - LOAD_AS_DIRECTORY(X) - Модуль как директория (обязательно должен содержать index.js или index.json)
    - package.json - модуль пакетов в npm
    - index.son
    - index.js
  - LOAD_NODE_MODULES(X, START)
    - LOAD_AS_FILE(DIR/X)
    - LOAD_AS_DIRECTORY(DIR/X)
  - NODE_MODULES_PATHS(START)
    - node_models - поднимается вверх по путям (первая найденная директория для модуля будет решением)
    - NODE_PATH
==== Пример ====

<code php>
var user = require('./user');
</code>

====== modules ======

====== Базовые ======

  * Util
  * [[:nodejs:index:error|Error]]
==== Вызов модуля ====

Без передачи параметров

<code php>
var user = require('user');
</code>

С передачей параметров

**app.js**
<code php>
var logger = require('logger')(module);
logger('Запуск приложения');
</code>

**./logger/index.js**
<code php>
module.exports = function(module){
  return function(/*   */){
    var args = [module.filename].concat([].slice.call(arguments));
    console.log.apply(console, args);
  }
}
</code>
==== Служебные поля ====

  * id
  * exports
  * parent - родитель


==== export ====

**Экспортирование модуля**

**app.js**
<code php>
var user = require('./user');

var vasya = new user.User('Вася');

vasya.hello(vasya);

// ...
// Привет, Вася
</code>

**user.js**
<code php>
function User(name){
  this.name = name;
}

User.prototype.hello = function(who){
  console.log('Привет, ' + who.name);
}

exports.User = User;
</code>

**Экспортирования метода модуля**

**app.js**
<code php>
var User = require('./user');

var vasya = new User('Вася');

vasya.hello(vasya);

// ...
// Привет, Вася
</code>

**user.js**
<code php>
function User(name){
  this.name = name;
}

User.prototype.hello = function(who){
  console.log('Привет, ' + who.name);
}

module.exports = User;
</code>
==== проверка на возможность эскпортировать ====


<code php>

function run(){}

if(module.parent){
  exports.run = run; // Экспортируем функцию run
} else {
  run();
}
</code>

====== Командная строка ======

===== Чтение параметров из командной строки и окружения =====

==== Базовый функционал ====

<code php>
console.log(process.argv);
</code>

==== С использованием модуля optimist ====

  * npm install optimist

==== С использованием переменных окружения ====


<code php>
console.log(process.env);
</code>
======= NPM =======

  * npm init - Создание модуля
  * npm adduser/addu user@host.com - Добавление пользователя для публикации модуля
  * npm publish/pu - Пупликация модуля
  * npm unpublish/unpu - Удаление публикации модуля
  * npm search/s
  * npm install/i module_name
  * npm remove/r module_name