Módulos e NPM em NodeJS

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 asentenç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.

Deixe um comentário