Gerenciamento de Pacotes npm e Fundamentos de Engenharia de Projetos

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 axios

devDependencies

Ferramentas usadas no ambiente de desenvolvimento.

Por exemplo:

  • eslint
  • prettier
  • typescript
  • nodemon

Método de instalação

npm install nodemon --save-dev

Diferenç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

Tags: npm package.json Node.js Dependências controle-de-versões

Publicado em 8-2 05:04