Skip to content

Uma introdução ao gerenciador de pacotes npm

Introdução ao npm

npm é o gerenciador de pacotes padrão para Node.js.

Em setembro de 2022, mais de 2,1 milhões de pacotes foram relatados como listados no registro npm, tornando-o o maior repositório de código de linguagem única do mundo, e você pode ter certeza de que existe um pacote para (quase!) tudo.

Começou como uma maneira de baixar e gerenciar dependências de pacotes Node.js, mas desde então se tornou uma ferramenta usada também em JavaScript frontend.

TIP

Yarn e pnpm são alternativas ao npm cli. Você também pode experimentá-los.

Pacotes

Instalando todas as dependências

Você pode instalar todas as dependências listadas no seu arquivo package.json executando:

bash
npm install

Isso instalará tudo o que o projeto precisa, na pasta node_modules, criando-a se ela ainda não existir.

Instalando um único pacote

Você pode instalar um único pacote executando:

bash
npm install <package-name>

Além disso, desde o npm 5, este comando adiciona <package-name> às dependências do arquivo package.json. Antes da versão 5, você precisava adicionar a flag --save.

Muitas vezes, você verá mais flags adicionadas a este comando:

  • --save-dev (ou -D) que adiciona o pacote à seção devDependencies do arquivo package.json.
  • --no-save que impede a gravação do pacote no arquivo package.json.
  • --no-optional que impede a instalação de dependências opcionais.
  • --save-optional que adiciona o pacote à seção optionalDependencies do arquivo package.json.

Também podem ser usados atalhos das flags:

  • -S: --save
  • -D: --save-dev
  • -O: --save-optional

A diferença entre devDependencies e dependencies é que a primeira contém ferramentas de desenvolvimento, como uma biblioteca de teste, enquanto a última é incluída no aplicativo em produção.

Quanto às optionalDependencies, a diferença é que a falha na compilação da dependência não causará falha na instalação. Mas é responsabilidade do seu programa lidar com a falta da dependência. Leia mais sobre dependências opcionais.

Atualizando pacotes

A atualização também é facilitada, executando

bash
npm update

Isso atualizará todas as dependências para suas versões mais recentes.

Você também pode especificar um único pacote para atualizar:

bash
npm update <package-name>

Removendo pacotes

Para remover um pacote, você pode executar:

bash
npm uninstall <package-name>

Versionamento

Além de downloads simples, o npm também gerencia o versionamento, para que você possa especificar qualquer versão específica de um pacote ou exigir uma versão maior ou menor do que você precisa.

Muitas vezes, você descobrirá que uma biblioteca só é compatível com um lançamento principal de outra biblioteca.

Ou um bug na versão mais recente de uma biblioteca, ainda não corrigido, está causando um problema.

Especificar uma versão explícita de uma biblioteca também ajuda a manter todos na mesma versão exata de um pacote, para que toda a equipe execute a mesma versão até que o arquivo package.json seja atualizado.

Em todos esses casos, o versionamento ajuda muito, e o npm segue o padrão de versionamento semântico (semver).

Você pode instalar uma versão específica de um pacote, executando

bash
npm install <package-name>@<version>

Você também pode instalar a versão mais recente de um pacote, executando

bash
npm install <package-name>@latest

Executando Tarefas

O arquivo package.json suporta um formato para especificar tarefas de linha de comando que podem ser executadas usando

bash
npm run <task-name>

Por exemplo, se você tiver um arquivo package.json com o seguinte conteúdo:

json
{
  "scripts": {
    "start": "node index.js",
    "test": "jest"
  }
}

É muito comum usar esse recurso para executar o Webpack:

json
{
  "scripts": {
    "watch": "webpack --watch --progress --colors --config webpack.conf.js",
    "dev": "webpack --progress --colors --config webpack.conf.js",
    "prod": "NODE_ENV=production webpack -p --config webpack.conf.js"
  }
}

Então, em vez de digitar esses comandos longos, que são fáceis de esquecer ou digitar incorretamente, você pode executar

bash
npm run watch
npm run dev
npm run prod