O que é npm?
npm significa:
Node Package Manager
É:
- Uma ferramenta de gerenciamento de pacotes
- O maior repositório global de pacotes JavaScript
- Um sistema de controle de versões de dependências
O site oficial pertence à: npm, Inc.
Agora pertence ao: GitHub
Parte 2: Inicializando um Projeto
mkdir projeto-exemplo
cd projeto-exemplo
npm init -y
Isso gerará:
Escreveu para o caminho local\projeto-exemplo\package.json:
{
"name": "projeto-exemplo",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Erro: nenhum teste especificado\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
Explicação Detalhada
1. mkdir projeto-exemplo
mkdir = make directory (criar diretório)
Significa: criar uma pasta chamada projeto-exemplo
Essência:
Preparar um espaço dedicado para um "projeto independente".
2. cd projeto-exemplo
cd = change directory (mudar diretório)
Significa: entrar na pasta projeto-exemplo
Essência: Todas as operações subsequentes serão realizadas neste diretório de projeto.
Se não usar cd, o npm inicializará o projeto no diretório pai.
3. npm init -y
Este é o ponto principal.
O que é npm init?
Ele:
Cria um arquivo package.json
Este é o "RG" dos projetos Node.
E o que é -y?
-y = yes (sim)
Significa: gerar package.json usando configurações padrão automaticamente
Se não escrever -y:
npm init
Ele pedirá que você insira manualmente:
- name
- version
- description
- entry file
- license
- etc
Usar -y significa:
👉 Usar todas as opções padrão e gerar diretamente.
4. Análise Campo por Campo do Conteúdo Gerado
{
"name": "projeto-exemplo",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Erro: nenhum teste especificado\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
1️⃣ name
Nome do projeto.
"name": "projeto-exemplo"
Ao publicar no npm, deve ser único (exclusivo em toda a rede).
2️⃣ version
"version": "1.0.0"
Número de versão semântico:
versão principal.versão secundária.versão de correção
major.minor.patch
Por exemplo:
- 1.0.0 → Versão oficial
- 1.0.1 → Correção de bug
- 1.1.0 → Novo recurso
- 2.0.0 → Atualização significativa
3️⃣ main
"main": "index.js"
Arquivo de entrada.
Significa:
require('projeto-exemplo')
Por padrão carregará: index.js (similar ao arquivo Program.cs de projetos .NET)
4️⃣ scripts
"scripts": {
"test": "echo \"Erro: nenhum teste especificado\" && exit 1"
}
Aqui está:
Ponto de entrada de comandos do projeto
Por exemplo, você pode escrever mais tarde:
"scripts": {
"iniciar": "node index.js"
}
E então executar:
npm run iniciar
Este é o primeiro passo da engenharia de projetos.
5️⃣ license
"license": "ISC"
Licença de código aberto.
Comuns:
- MIT
- ISC
- Apache
- GPL
Projetos pessoais geralmente usam MIT ou ISC.
Parte 3: Instalando Dependências
Vamos instalar um pacote como exemplo:
npm install underscore
Você verá:
- Geração da pasta node_modules
- Criação do arquivo package-lock.json
- Aparição de dependencies no package.json
O que é underscore?
Underscore
Uma biblioteca de ferramentas comumente utilizada.
Parte 4: Mecanismo de Versão (muito importante)
Suponha que temos:
"underscore": "^1.9.2"
Regras:
| Símbolo | Significado |
|---|---|
| ^ | Bloqueia a versão principal |
| ~ | Bloqueia a versão secundária |
| Sem símbolo | Versão exata |
Exemplo: ^1.9.2 permite atualiazr para: 1.x.x mas não para: 2.0.0
Parte 5: Pequena Tarefa Prática
Adicione ao package.json:
"scripts": {
"iniciar": "node app.js"
}
Instale o pacote request
npm install request
Crie o arquivo app.js
const requisicao = require('request')
requisicao.get('https://api.github.com', (erro, resposta) => {
if (!erro) {
console.log(resposta.statusCode)
}
})
Após a instalação bem-sucedida
npm run iniciar
Isso resultará em:
> projeto-exemplo@1.0.0 iniciar
> node app.js
200
Isso indica:
- A requisição com request foi bem-sucedida
- A API do GitHub retornou código de status 200
- O mecanismo de dependências do seu projeto Node está funcionando corretamente
Parte 6: Algumas Questões Adicionais para Esclarecer
1️⃣ Relação entre npm e Node?
O que é Node?
Node.js
É:
Ambiente de execução JavaScript
Funções:
- Executar JS
- Fornece sistema de arquivos
- Fornece capacidades de rede
- Fornece mecanismo de módulos
O que é npm?
npm
É:
Ferramenta de gerenciamento de pacotes do Node
Funções:
- Baixar bibliotecas de terceiros
- Gerenciar versões de dependências
- Gerenciar configurações do projeto
- Executar scripts
Resumo da Relação
| Componente | Papel |
|---|---|
| Node | Motor (executa JS) |
| npm | Gestor de repositório (gerencia dependências) |
Analogia
| Mundo .NET | Mundo Node |
|---|---|
| dotnet runtime | Node |
| NuGet | npm |
2️⃣ Por que node_modules não deve ser enviado para o Git?
① Volume imenso
Porque:
- Cada pacote
- Depende de outros pacotes
- Que dependem de outros pacotes
Formando uma árvore de dependências.
② Pode ser regerado
Se houver package.json e package-lock.json
Executando
npm install
Pode regerar node_modules.
③ Não é legível
node_modules não é código escrito por você.
Envia-lo:
- Aumenta o tamanho do repositório Git
- Afeta a velocidade de clone
- Cria conflitos
④ Princípio de colaboração em equipe
3️⃣ Qual a função do package-lock.json?
Este é o arquivo de bloqueio de dependências.
Ele resolve um problema central:
O mesmo package.json pode resultar em versões diferentes em momentos diferentes.
Exemplo:
package.json:
"axios": "^2.4.0"
^ permite atualização de versão secundária.
Hoje: 2.4.2 Amanhã: 2.4.5
A versão pode mudar.
Função do package-lock.json
Ele registra:
- Versão exata
- Árvore de dependências
- Versão de cada subdependência
Garantindo:
100% de certeza de que todos instalarão as mesmas versões Essencial para projetos em equipe - deve ser obrigatoriamente enviado
4️⃣ Diferença entre dependencies e devDependencies?
dependencies
Dependências necessárias no ambiente de produção.
Por exemplo:
- axios
- express
- mysql
Método de instalação
npm install axiosdevDependencies
Ferramentas usadas no ambiente de desenvolvimento.
Por exemplo:
- eslint
- prettier
- typescript
- nodemon
Método de instalação
npm install nodemon --save-devDiferença Principal
Tipo Instalado em produção? Finalidade dependencies Sim Execução do código devDependencies Não necessariamente 5️⃣ Por que a equipe deve bloquear versões?
Esta é a questão mais importante.
Se não bloquear versões
Pode ocorrer:
- Funciona no seu computador
- Dá erro no computador do colega
- Crasha no servidor de produção
Porque: as dependências foram atualizadas secretamente
Portanto é obrigatório:
- Enviar package-lock.json
- Usar arquivo de bloqueio no CI
- Proibir atualizações aleatórias