http = require('http');Essa instrução carrega o módulo http, um módulo do sistema(core module).
O carregamento de módulos em node é feito pela função require. Para quem vem do python é como executar o código:
import os as bMódulos são sub programas que executão tarefas bem definidas. Nós esperamos com nosso exemplo que o módulo http permitam que utilizemos os protocolo http. Os módulos do sistema do node têm suas funções documentadas na página da API do node[1].
Core Module
São módulos embutidos no node. Eles são carregados pela declaração sem prefixo do nome do módulo. Ex: require('buffer');Módulos declarados dessa forma dão preferência aos módulos do sistema, mesmo tendo um arquivo buffer.js na raiz de nossa aplicação.
Módulos da aplicação.
É comum uma grande aplicação dividir suas tarefas em módulos para atender aos requisitos do sistema, tomando como exemplo uma aplicação com o arquivo circle.js (expões funções matemáticas aplicadas a círculos) em sua raiz. Esse arquivo corresponde a um módulo da aplicação e pode ser chamado da seguinte forma:circle = require('./circle');todas são formas válidas de carregar módulos na aplicação.
circle = require('circle');
circle = require('/path/to/app/circle');
Prefixos './' '/'
Os prefixos determinam a localização do módulo, '/' utilizam o caminho absoluto do módulo. './' utilizam o caminho relativo a partir do caminho atual.dica: Quando o módulo não vem prefixado e há um conflito de nomes com módulos do sistema, os módulos do sistema ganham preferência no carregamento.
Extensão dos módulos
Quando os módulos não tem a extensão explícita o node procura pelas seguintes extensões em sua devida ordem :- .js : o arquivo é iterpretado como um arquivo de código fonte javascript;
- .json : é utilizado um analisador JSON no arquivo;
- .node: interpretado como um addon através do dlopen.
Módulos do node_module
Quando o arquivo não é prefixado e não é nativo do node(core modules), o node busca o módulo na pasta node_module. A busca percorre toda o caminho de diretórios do código executado até a raíz.
Fica mais fácil de entender com o exemplo abaixo. ( vamos supor que código é executado em /path/to/app/code.js)
require('mymodule');Como mymodule não é um módulo do sistema ele então pesquisa na pastas node_module. Essa pesquisa é recursiva por todo o caminho iniciando no diretório atual até atingir a raiz.
/path/to/app/node_modules/mymodule.js
/path/to/node_modules/mymodule.js
/path/node_modules/mymodule.js
/node_modules/mymodule.js
Diretórios como módulos
Quando um diretório da aplicação contém um arquivo package.json ele é também é considerado um módulo e pode ser carregado como outros módulos.draw = require('./draw');
Ele busca pelo arquivo: ./draw/package.json que contém informações do módulo e qual arquivo carregar. Caso não exista esse arquivo mas exista um index.js ele é utilizado como arquivo source do módulo.
Outras informações que você deve conhecer sobre os módulos
- Os módulos são carregados apenas uma vez.
- Node trata as chamadas cíclicas de módulos, então mesmo que não seja muito bom telas você não precisa se preocupar.
- Somente variáveis exportadas estão disponíveis no módulo, as demais variáveis e funções são privadas do módulo.
- Você pode carregar somente atributos específicos do módulo. Ex: var EventEmitter = require('events').EventEmitter;
Conclusão
Como o objetivo do tópico é apenas conhecer como se trabalha com módulos omitir algumas considerações e não expliquei como criar módulos que ficará para uma próxima oportunidade. Espero que tenha conseguido passar um pouco de como utilizamos no dia-a-dia os módulos.
Se o leitor achou que preciso acrescentar algo fiquem a vontade para solicitar. Abraços;





