Módulos e NPM em NodeJS

O que são os módulos em NodeJS, o gerenciador de pacotes NPM que permite administrar os módulos e dependencias que necessitamos em um projeto local.

Por Miguel Angel Alvarez - Tradução de Celeste Veiga


Publicado em: 11/4/13
Valorize este artigo:
 
No Manual de NodeJS estamos partindo como base das conversas #nodeIO oferecidas por Alejandro Morales para CriarWeb.com. Neste caso ainda nos encontramos vendo conteúdo de nossa primeira conversa, na que nosso relator nos informa de uma das partes fundamentais nos nossos processos de desenvolvimento em NodeJS, como são os módulos. Ademais, vimos o geerenciador de pacotes que vem no framework.

Em NodeJS o código se organiza por meio de módulos. São como os pacotes ou bibliotecas de outras linguagens como Java. Por sua parte, NPM é o nome do gerenciador de pacotes (package manager) que usamos em Node JS.

Se você conhece os gerenciadores de pacotes de Linux poderá fazer uma boa ideia do que é npm, caso contrário , simplesmente entenda-o como uma forma de administrar módulos que você deseja ter instalados, distribuir os pacotes e acrescentar dependências a seus programas.

Nota: Por exemplo, se você está acostumado a Ubuntu, o gerenciador de pacotes que se utiliza é o "apt-get". Por sua parte, Fedora ou Red Hat usam Yum.

O gerenciador de pacotes npm, no entanto, é um pouquinho diferente de outros gerenciadores de pacotes que podemos conhecer, porque os instala localmente nos projetos. Ou seja, ao baixar um módulo, se adiciona um projeto local, que é o que terá disponível para incluir.
 

Incluir módulos com "require"

Javascript nativo não dá suporte aos módulos. Isto é algo que foi adicionado a NodeJS e se realiza com a sentença require(), que está inspirada na variante proposta por CommonJS.

A instrução require() recebe como parâmetro o nome do pacote que queremos incluir e inicia uma busca no sistema de arquivos, na pasta "node_modules" e seus filhos, que contêm todos os módulos que poderiam ser requeridos.

Por exemplo, se desejamos trazer a biblioteca para fazer um servidor web, que escute solicitações http, faríamos o seguinte:

var http = require("http");

Existem distintos módulos que estão disponíveis de maneira predeterminada em qualquer projeto NodeJS e que portanto não necessitamos trazer previamente ao local mediante o gerenciador de pacotes npm. Esses tomam o nome de "Módulos nativos" e exemplos deles temos o próprio "http", "fs" para o acesso ao sistema de arquivos, "net" que é um módulo para conexões de rede ainda de mais baixo nível que "http" (na verdade "http" está majoritariamente escrito sobre o módulo "net" github.com/joyent/node/blob/master/lib/http.js), "URL" que permite realizar operações sobre "url", o módulo "util" que um conjunto de utilidades, "child_process" que te dá ferramentas para executar sobre o sistema, "domain" que te permite manipular erros, etc.
 

Podemos criar facilmente nossos módulos exportando as funções que desejemos

É claro, também podemos escrever nossos próprios módulos e para isso usamos module.exports. Escrevemos o código de nosso módulo, com todas as funções locais que queiramos, depois fazemos um module.exports = {} e entre as chaves colocamos todo aquilo que queiramos exportar.

function soma(a,b){
   return a + b;
}

function multiplicar(a,b){
   return a * b;
}

module.exports = {
   soma: soma,
   multiplicar: multiplicar
}

Assumindo que o arquivo anterior se chame “operações.js”, nós poderíamos requerê-lo mais tarde e outro arquivo.js da seguinte maneira:

var operacoes = require('./operacoes');
operacoes.soma(2,3);

Obviamente, isto é apenas uma tomada de contato e voltaremos a este assunto mais adiante.
 

Comando npm para gerenciamento de pacotes

No que diz respeito ao uso de npm, é um comando que funciona desde a linha de comandos de NodeJS. Portanto temos que invocá-lo com npm seguido da operação que queiramos realizar.

npm install async

Isto instalará o pacote async dentro de meu projeto. O instalará dentro da pasta "node_modules" e a partir desse momento estará disponível no meu projeto e poderei incluí-lo por meio de "require":

require("async");

Nota: Cabe observar que não é necessário dar a rota ao pacote "async" porque npm o tenho instalado dentro de node_modules e tudo que está nessa pasta se encontra disponível para require() sem necessidade de dizer a rota exata para chegar.

Outras instruções possíveis de npm são,a de publicar pacotes (com "publish"), instalar globalmente (pondo o flag -g ao fazer o "install"), desinstalar, inclusive premiar (pontuar pacotes feitos por outras pessoas), etc.

Podemos ver pacotes para instalar entrando na página do gerenciador de pacotes npm: npmjs.org

Por último, sobre npm se mencionou que cada pacote tem entre seu código um arquivo package.json que contém em notação JSON os dados do pacote em si. É como um cartão de identificação do pacote, que pode servir para você se informar de suas características e de qualquer sistema informático.Se você fosse o criador de um pacote, ou criasse alguma aplicação com NodeJS, também deveria incluir "package.json" com os dados do módulo ou aplicação que se está criando, como o autor, versão, dependências, etc.

No artigo seguinte vamos ver algo mais específico, que também nos sirva como primeiro exemplo para realizar em NodeJS. Em concreto veremos o módulo HTTP, com o qual poderemos fazer um rudimentar servidor web.






Usuários :    login / registro

Manuais relacionados
Categorias relacionadas
O autor

Home | Sobre nós | Copyright | Anuncie | Entrar em contato