Pacotes npm global ou local

A principal diferença entre pacotes locais e globais é:

  • pacotes locais são instalados no diretório em que você executa npm install <package-name>, e eles são inseridos na pasta node_modules desse diretório.
  • pacotes globais são todos colocados em único lugar do seu sistema (dependendo da sua configuração), independentemente de onde você execute npm install -g <package-name>

No seu código você só pode importar pacotes locais:

require('package-name')

então quando instalar um ou outro?

No geral, todos os pacotes devem ser instalados localmente.

Isso garante que você possa ter dúzias de aplicações no seu computador, todas rodando com uma versão diferente de cada pacote se necessário.

Atualizar um pacote global fará com que todos seus projetos usem a nova versão, e como você pode imaginar isso pode causar pesadelos em termos de manutenção, pois alguns pacotes podem quebrar.

Todos projetos tem sua própria versão local de um pacote, mesmo que isso possa parecer um desperdício de recursos, é algo pequeno comparado as possíveis consequências.

Um pacote deve ser instalado globalmente quando ele fornece um comando executável que possa ser rodado pelo terminal (CLI), e é reutilizado entre projetos.

Você também pode instalar comandos executáveis localmente e rodá-los usando o npx, porém alguns pacotes funcionam melhor instalados de forma global.

Alguns otimos exemplos de pacotes globais populares que você pode conhecer:

  • npm
  • create-react-app
  • vue-cli
  • grunt-cli
  • mocha
  • react-native-cli
  • gatsby-cli
  • forever
  • nodemon

Você provavelmente já tem alguns deles instalados globalmente no seu sistema. Você pode conferir executando

npm list -g --depth 0

no seu terminal.