Neste artigo, falarei um pouco sobre dependências em uma aplicação JavaScript, o que são, como são instaladas e como são gerenciadas pelo npm
, que é o gerenciador de pacotes do Node.js
.
O que são dependências?
No contexto de desenvolvimento de software, dependência é um componente externo ou módulo que é necessário para que o projeto funcione corretamente. Uma dependência pode ser uma biblioteca, framework, pacote ou qualquer outro recurso que seja utilizado pelo projeto.
As dependências podem ser divididas em duas principais categorias:
- Dependências de Produção (Production Dependencies): São as dependências necessárias para que o projeto funcione corretamente em um ambiente de produção. Elas são essenciais para a execução do código principal do projeto.
- Dependências de Desenvolvimento (Development Dependencies): São as dependências utilizadas durante o desenvolvimento do projeto, mas que não são necessárias para a execução do código em produção. Elas incluem ferramentas de teste, linters, bundlers, entre outros.
Essas dependências podem ser instaladas no projeto, através de gerenciadores de pacotes, como npm
ou yarn
, e são listadas em um arquivo chamado package.json
. Além de listar as dependências, o package.json
gerencia scripts de automação e outras configurações relacionadas ao projeto.
NPM
O npm é nativo no Node.js
e é utilizado para instalar dependências nos projetos através do comando npm install
seguido do nome da dependência.
npm install <dependency_name>
# ou
npm i <dependency_name>
Podemos adicionar flags ao comando npm install
para aplicar configurações específicas na instalação das dependências.
-P
ou --save-prod
Supondo que tenhamos o seguinte package.json
:
{
"name": "project",
"version": "1.0.0",
"description": "This is an example",
"main": "index.js",
"scripts": {},
"keywords": [],
"author": "Lucas Morais",
"license": "ISC"
}
Para instalar uma dependência, como dependência de produção, podemos utilizar o comando npm install
seguido da flag -P
ou --save-prod
:
npm install express -P
# ou
npm install express --save-prod
E como resultado teríamos as seguintes alterações:
{
"name": "project",
"version": "1.0.0",
"description": "This is an example",
"main": "index.js",
"scripts": {},
"keywords": [],
"author": "Lucas Morais",
"license": "ISC",
"dependencies": {
"express": "^4.18.2"
}
}
Por padrão, ao omitir uma flag ao comando npm install
, a flag aplicada é a -P
, fazendo com que a dependência seja instalada em dependencies
, como dependência de produção.
-D
ou --save-dev
Para instalar uma dependência, como dependência de desenvolvimento, usamos a flag -D
ou --save-dev
.
npm install jest -D
# ou
npm install jest --save-dev
E como resultado teríamos as seguintes alterações:
{
"name": "project",
"version": "1.0.0",
"description": "This is an example",
"main": "index.js",
"scripts": {},
"keywords": [],
"author": "Lucas Morais",
"license": "ISC",
"dependencies": {
"express": "^4.18.2"
},
"devDependencies": {
"jest": "^29.7.0"
}
}
@
e -E
Para instalar uma versão específica de uma dependência, podemos utilizar o @
logo após o nome da dependência, seguido do número da versão que desejamos instalar, e, por fim, a flag -E
se desejamos garantir que a dependência permaneça na versão especificada.
npm install express@2.1.0 -E
{
"name": "project",
"version": "1.0.0",
"description": "This is an example",
"main": "index.js",
"scripts": {},
"keywords": [],
"author": "Lucas Morais",
"license": "ISC",
"dependencies": {
"express": "2.1.0"
},
"devDependencies": {
"jest": "^29.7.0"
}
}
uninstall
ou remove
É possível utilizar o comando: npm uninstall
ou npm remove
, seguido do nome da dependência, para desinstalar ou remover uma determinada dependência do projeto.
npm uninstall jest
# ou
npm remove jest
{
"name": "project",
"version": "1.0.0",
"description": "This is an example",
"main": "index.js",
"scripts": {},
"keywords": [],
"author": "Lucas Morais",
"license": "ISC",
"dependencies": {
"express": "2.1.0"
},
}
ls
Também podemos listar as dependências do projeto utilizando o comando npm ls
.
{
"name": "project",
"version": "1.0.0",
"description": "This is an example",
"main": "index.js",
"scripts": {},
"keywords": [],
"author": "Lucas Morais",
"license": "ISC",
"dependencies": {
"express": "^4.18.2"
},
"devDependencies": {
"jest": "^29.7.0"
}
}
npm ls
├── express@4.18.2
└── jest@29.7.0
outdated
E por fim, também é possível verificar quais dependências no projeto estão desatualizadas utilizando o comando npm outdated
.
Dado o seguinte package.json
:
{
"name": "project",
"version": "1.0.0",
"description": "This is an example",
"main": "index.js",
"scripts": {},
"keywords": [],
"author": "Lucas Morais",
"license": "ISC",
"dependencies": {
"express": "^1.0.0"
},
"devDependencies": {
"jest": "^25.0.0"
}
}
Bastaria utilizar o comando:
npm outdated
E teríamos uma lista com as dependências desatualizadas contendo as seguintes informações a respeito das mesmas:
Package
: nome da dependência.Current
: versão atual da dependência no projeto.Wanted
: versão máxima para a dependência levando em consideração o Semantic Versioning.Latest
: versão mais recente disponível para a dependência.Location
: localização da dependência no sistema de arquivos.Depended by
: indica os proketos ou módulos que dependem do pacote em questão.
Package Current Wanted Latest Location Depended by
express 1.0.7 1.0.7 4.18.2 node_modules/express project
jest 25.5.4 25.5.4 29.7.0 node_modules/jest project