Uma introdução ao gerenciador de pacotes npm
Introdução ao npm
npm
é o gerenciador de pacotes padrão do Node.js.
Em janeiro de 2017 mais de 350.000 pacotes foram listados no registro do npm, fazendo dele o maior repositório de código de uma única linguagem na Terra, e você pode ter certeza que existe um pacote para (quase!) tudo.
Ele iniciou como um meio de fazer donwload e gerenciar dependências de pacotes Node.js, mas desde então ele se tornou uma ferramenta utilizada também no frontend.
Há muitas coisas que o npm
faz.
Yarn é uma alternativa ao npm. Não deixe de conferír.
Downloads
npm
gerencia downloads de dependências do seu projeto.
Instalando todas dependências
Se o projeto tem um arquivo package.json
, ao rodar
npm install
ele vai instalar tudo que o projeto precisa, na pasta node_modules
, criando-a se não existir.
Instalando um único pacote
Você também pode instalar um pacote específico ao rodar
npm install <package-name>
Geralmente você verá mais flags adicionadas a esse comando:
--save
instala e adiciona uma entrada no campo dependencies do arquivopackage.json
--save-dev
instala e adiciona uma entrada no campo devDependencies do arquivopackage.json
A principal diferença é que no devDependencies ficam as ferramentas de desenvolvimento, como uma biblioteca de testes, enquanto no dependencies
ficam os pacotes necessários à aplicação em ambiente de produção.
Atualizando pacotes
Atualizar também é fácil, ao rodar
npm update
o npm
vai buscar em todos os pacotes por uma versão atualizada que satisfaça suas restrições de versionamento.
Você também pode especificar um único pacote para atualizar:
npm update <package-name>
Versionamento
Em adição aos downloads, o npm
também gerencia o versionamento, assim você pode especificar qualquer versão do pacote, ou uma versão maior ou menor do que você precisa.
Muitas vezes você vai encontrar uma biblioteca que só é compatível com a versão atual de outra biblioteca.
Ou um bug na versão mais atual da biblioteca, ainda não solucionado, causando um problema.
Especificar explicitamente a versão da biblioteca também ajuda a manter todos na exata mesma versão do pacote, assim todos do time rodam a mesma versão até que o arquivo package.json
seja atualizado.
Em todos os casos, versionar ajuda muito, e o npm
segue o padrão semântico de versionamento chamado semver.
Executando tarefas
O arquivo package.json possui um campo chamado "scripts", que é usado para especificar tarefas de linha de comando que podem ser rodadas usando
npm run <task-name>
Por exemplo:
{"scripts": {"start-dev": "node lib/server-development","start": "node lib/server-production"},}
É muito comum usar esse recurso para rodar o Webpack:
{"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 muito fáceis de errar ou esquecer, você pode rodar
npm run watchnpm run devnpm run prod