O que são dependências? –save ou –save-dev?

Tenho usado node.js para algumas tarefas em meus projetos praticamente há um ano, principalmente para compilar stylus, que uso em conjunto com o watch do Gulp. Ao criar um projeto de node.js, um arquivo chamado package.json é gerado na pasta onde você iniciou o projeto.

O package.json

É um arquivo gerado pelo node que contem informações sobre o  projeto, como o nome, autor, repositório, versão, dependências, entre outras coisas. O arquivo é gerado quando o comando npm init é executado no terminal.

As dependências

O gulp é um módulo do nodejs que utilizo para automatizar algumas tarefas, como compilar stylus, juntar os arquivos css gerados em um só, e aplicar uglify (compressão) no mesmo. Para todas essas tarefas, além do gulp, utilizo o gulp-stylus, gulp-concat, gulp-filter, gulp-plumber e gulp-minify-css, cada uma com sua função. Logo, para que eu possa visualizar as alterações de estilo que tenho feito dependo de um arquivo css gerado pelas tarefas do Gulp. Como dependo dos módulos para que o gulp trabalhe, posso chamar esses módulos de dependências.

Eles podem ser salvos dentro do arquivo package.json caso você os instale e passe o parâmetro –save ou –save-dev. Assim, caso alguma outra pessoa que trabalhe no projeto precise instalar o necessário para trabalhar no projeto, ela poderá instalar tudo utilizando somente o comando npm install.

–save e –save-dev

Supondo que o atual projeto em que eu esteja trabalhando utilize o módulo socket.io e o módulo express para funcionar em um servidor node que rodará minha aplicação, eles também viram dependências.

Tá, mas e aí?

Os módulos do gulp são dependências diferentes do socket.io e do express, pois são utilizadas exclusivamente durante o desenvolvimento, e não precisam existir no servidor de produção, já que o que será enviado é o arquivo css gerado pelo gulp. Logo, quando os módulos do gulp forem instalados pela primeira vez no projeto, você deve utilizar o parâmetro –save-dev, por exemplo:

npm install gulp --save-dev

ou

npm i gulp --save-dev

Minha aplicação depende do socket.io e do express para rodar no servidor de produção, então utilizo o parâmetro –save ao instalar esses dois módulos. Um exemplo:

npm install socket.io --save

Quando seu ambiente precisar somente das dependências de produção, você pode utilizar o comando npm i --production para instalar os módulos. Os módulos de produção (do –save-dev) ficarão de fora.