npm: fundamentos, gerenciador de pacotes para React Native e Node.js

Autor: IT Sectr Publicado: 2026-02-13 Tempo de leitura: 10 min

npm (Node Package Manager) é o gerenciador de pacotes padrão da plataforma Node.js, incluído na instalação do Node.js. O npm gerencia dependências de projetos JavaScript e TypeScript: instala bibliotecas em node_modules, atualiza versões de pacotes, resolve conflitos de versões. O package.json é o arquivo de configuração central com metadados e lista de dependências. O npm Registry é o maior registro de pacotes. Saiba mais em npm Registry.

Pontos-chave

  • npm — o gerenciador de pacotes padrão do Node.js, incluído com Node.js desde a versão 0.6.3
  • package.json — o arquivo de configuração do projeto com dependências, scripts e metadados
  • npm install — o comando básico para instalar dependências do package.json na pasta node_modules
  • package-lock.json — o arquivo de bloqueio de versões exatas para instalações reproduzíveis em todos os ambientes
  • npm ci — o comando para CI/CD que instala pacotes estritamente a partir do arquivo de bloqueio sem atualizá-lo

O que é npm — o gerenciador de pacotes do Node.js?

npm foi criado em 2010 por Isaac Schlueter como uma solução para gerenciar dependências do Node.js. Desde 2014, o npm é gerenciado pela npm, Inc., adquirida pela Microsoft/GitHub em 2020. A ferramenta consiste em duas partes: a CLI (linha de comando) para instalar e gerenciar pacotes, e o Registry — o repositório central de todos os módulos publicados em registry.npmjs.org.

O npm Registry é o maior registro de pacotes: mais de 2 milhões de pacotes e mais de 10 bilhões de downloads mensais. Cada pacote tem uma versão SemVer, descrição, dependências, licença e autoria. A publicação do seu próprio pacote é feita via npm publish. O npm suporta pacotes com escopo para organizações (@scope/package), registros privados e auditoria de segurança integrada.

Node.js versão 18+ inclui npm 9+ com desempenho melhorado, workspaces para monorepositórios e um mecanismo de dependências pares reformulado. O ecossistema npm abrange JavaScript do lado do servidor, frontend (React, Vue, Angular), desenvolvimento móvel (React Native), ferramentas de compilação (Webpack, Vite) e utilitários CLI. O npm é o canal principal de distribuição de bibliotecas JavaScript.

Principais funcionalidades do npm

npm install — o comando principal que lê o package.json e o package-lock.json para instalar todas as dependências em node_modules. Na primeira execução, o npm calcula o grafo de dependências, resolve conflitos de versões e gera o package-lock.json. O comando npm install <package> instala um pacote específico; a flag --save-dev o adiciona a devDependencies, --global instala globalmente.

npx — um executor de pacotes incluído no npm desde a versão 5.2. O npx permite executar utilitários CLI sem instalação global: npx react-native init ou npx create-react-app my-app. O npx baixa o pacote para um cache temporário, executa e limpa após a conclusão. O npx também é útil para executar versões específicas de ferramentas.

npm audit escaneia a árvore de dependências em busca de vulnerabilidades conhecidas da base de dados do npm. O comando gera um relatório com níveis de gravidade (critical, high, moderate) e recomenda npm audit fix para atualizar automaticamente pacotes vulneráveis. npm cache armazena pacotes baixados localmente. npm cache clean --force limpa o cache quando há problemas de instalação. npm outdated mostra pacotes desatualizados.

bash
# Comandos básicos do npm
$ npm install
$ npm install react-native-webview --save
$ npm install typescript --save-dev
# Execução sem instalação global
$ npx react-native init MyApp
# Auditoria de segurança
$ npm audit --fix

Estrutura do package.json e gerenciamento de dependências

package.json é um arquivo JSON na raiz do projeto que descreve seus metadados, dependências e configuração. Campos obrigatórios: name (nome único do pacote) e version (versão SemVer, por exemplo 1.0.0). O arquivo é criado com npm init -y para inicialização rápida ou manualmente.

Semantic Versioning (SemVer) é um padrão de versionamento no formato MAJOR.MINOR.PATCH. A versão principal muda com alterações incompatíveis de API, a menor ao adicionar funcionalidade (compatível com versões anteriores) e o patch ao corrigir bugs. O símbolo ^ antes da versão permite atualizações menores e de patch, enquanto ~ permite apenas atualizações de patch.

json
{
  "name": "my-app",
  "version": "1.0.0",
  "private": true,
  "scripts": {
    "start": "expo start",
    "android": "expo start --android",
    "ios": "expo start --ios"
  },
  "dependencies": {
    "react": "^18.3.0",
    "react-native": "^0.76.0"
  },
  "devDependencies": {
    "typescript": "^5.5.0",
    "@types/react": "^18.3.0"
  }
}
CampoPropósitoValor de exemplo
scriptsComandos de execução para npm run"start": "node index.js"
dependenciesDependências de produção da aplicação"react": "^18.3.0"
devDependenciesFerramentas de desenvolvimento e teste"jest": "^29.7.0"
peerDependenciesDependências anfitriãs para bibliotecas"react": ">=17.0.0"
enginesRequisitos de versão do Node.js{"node": ">=18.0.0"}

npm no desenvolvimento React Native

Projetos React Native usam ativamente o npm para gerenciamento de dependências. O conjunto padrão inclui react, react-native, bibliotecas de navegação (React Navigation), de requisições HTTP (axios), de gerenciamento de estado (Redux, Zustand) e componentes de UI. O npm permite instalar milhares de pacotes compatíveis do registro.

npx pod-install — um comando obrigatório após instalar módulos nativos no React Native para iOS. O npm gera automaticamente um Podfile.lock com base no package-lock.json. Em projetos Expo, usa-se expo install em vez de npm install, pois ele seleciona versões compatíveis com a versão atual do Expo SDK.

Conflitos de versões são um problema comum no React Native: react-native-reanimated, react-native-gesture-handler e react-native-safe-area-context exigem versões alinhadas. A solução é atualizar todos os pacotes para as versões compatíveis mais recentes ou usar --legacy-peer-deps. O package-lock.json é fundamental para módulos nativos compilados via CocoaPods e Gradle.

Comparação do npm com gerenciadores alternativos

npm é o gerenciador de pacotes padrão incluído com o Node.js. As principais alternativas: yarn (criado pelo Facebook em 2016) e pnpm (rápido, com links físicos). Desde o npm 5, a diferença em velocidade e funcionalidade entre npm e yarn é mínima. O npm 7+ adicionou workspaces, tornando-o competitivo para monorepositórios.

Característicanpmyarnpnpm
Ano de criação201020162017
Arquivo de bloqueiopackage-lock.jsonyarn.lockpnpm-lock.yaml
InstalaçãoSequencial (npm 5+)ParalelaParalela
Espaço em discoPadrãoPadrãoMínimo (links)
WorkspacesSim (npm 7+)SimSim
Plug'n'PlayNãoSimNão

De acordo com o State of JS 2025: 62% dos desenvolvedores usam npm, 35% usam yarn (principalmente projetos antigos e entusiastas do PnP) e 3% usam pnpm. Para projetos React Native, ambas as ferramentas são igualmente viáveis, mas o npm é mais comum em projetos com Expo SDK 50+ e novas inicializações React Native.

yarn mantém sua vantagem em monorepositórios extremamente grandes (100+ pacotes) graças à sua implementação mais madura de workspaces e Plug'n'Play. O pnpm vence na economia de espaço em disco através de links físicos para um armazenamento global. A escolha do gerenciador depende das preferências da equipe e da infraestrutura.

Perguntas frequentes

Qual a diferença entre npm install e npm ci?

npm install atualiza o package-lock.json e pode instalar novas versões menores dentro do intervalo semântico. npm ci (Clean Install) remove node_modules e instala pacotes estritamente a partir do package-lock.json sem atualizá-lo. O npm ci é mais rápido, usado em CI/CD e garante um ambiente idêntico em todas as máquinas. Se o package-lock.json estiver ausente, o npm ci gera um erro.

Como corrigir conflitos de dependências pares no npm?

Desde o npm 7, conflitos de dependências pares causam erros de compilação. Soluções: atualizar todos os pacotes para versões compatíveis via npm update, usar a flag --legacy-peer-deps para o modo npm 6, ou adicionar uma seção overrides no package.json para forçar a versão de um pacote específico. A melhor opção é atualizar as dependências para versões compatíveis.

O que é npm audit e por que é necessário?

npm audit escaneia a árvore de dependências em busca de vulnerabilidades conhecidas do banco de dados npm Security Advisory. O comando gera um relatório com nível de gravidade (critical, high, moderate, low) e recomenda npm audit fix para atualizar automaticamente pacotes vulneráveis para versões seguras. Executar o npm audit regularmente é uma prática básica de segurança em projetos JavaScript.

Como os workspaces do npm simplificam monorepositórios?

npm workspaces permite gerenciar vários pacotes em um único repositório. Adicione o campo "workspaces": ["packages/*"] ao package.json raiz. Benefícios: instalação única de todas as dependências em um node_modules compartilhado, links simbólicos automáticos entre pacotes locais, execução de scripts para todos os pacotes a partir da raiz e eliminação da duplicação de versões.

Por que confirmar o package-lock.json no repositório?

package-lock.json bloqueia as versões exatas de todas as dependências e seus pacotes transitivos. Sem ele, diferentes desenvolvedores e servidores CI podem obter versões diferentes de bibliotecas dentro do intervalo semântico, levando a erros de «funciona na minha máquina». Confirmar o arquivo de bloqueio garante compilações reproduzíveis e comportamento idêntico em todos os ambientes.

Resumo

  • npm — o gerenciador de pacotes padrão do Node.js, incluído com Node.js desde a versão 0.6.3
  • package.json — o arquivo de configuração do projeto com dependências, scripts e metadados
  • npm install — instala dependências, npm ci — instala estritamente do package-lock.json para CI/CD
  • package-lock.json — bloqueio de versões exatas, obrigatório para compilações reproduzíveis
  • npm Registry — o maior registro de pacotes com mais de 2 milhões de módulos
  • npm audit — verificação de segurança de dependências com correção automática de vulnerabilidades
  • npm workspaces — mecanismo de gerenciamento de monorepositórios com node_modules compartilhados

Vamos desenvolver um aplicativo móvel chave na mão

A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.

Discutir o projeto

Leia também