{"componentChunkName":"component---src-templates-post-item-js","path":"/blog/gerenciando-dependencias-com-npm/","result":{"data":{"markdownRemark":{"html":"<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 960px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/699b3605396b61f20bdcde61b06a1254/29114/npm.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 60.416666666666664%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAIAAADtbgqsAAAACXBIWXMAAAsTAAALEwEAmpwYAAACjElEQVQoz2P4jwn+/QMSn57dur62+fzi6luHN8AF0QADsp5/f37//fPnz++fQN7Lq4eOtXturbDdOrHo18cX75/e/fTy0efXTz88u/fn1w8kzWBTv7y8d2lxya1NvVeXV56bX3ByVsHBrtANlR5b632P9YWvLHbd0Rqzf0LmmjLPt49ugDX9ZYBQQPLzk2s76t3XVHlsqnbfUOG6qMBjbq7H9DTHTZVuR7sCl+U7Tki06ou3nJtl/x5T8/eXt1ZVuHfGm09IsZ2W7jIlxXFRke/Bibm7OuOPADUXOJUF6Bd66/QnWL57fBNd84eHlw91BhzpDl5Z5jUl1Wlmpuu0NOfl5UHLKkJXlXmsKXVdXugMNGJJntPru5fhmoHkbyDn0qapa0ts9vYmLCwLnpLiMCvTdXGBx/wct6mpTpNTnWZnuayrdL82PfLshND1LYkHl/ZCA+wfOMAurOleW2K3qsp7RjbIzmnprlG2GmE22gdmFMzLc5mS6rizJfDuvMRzE0LnpFls6c4Aaf734/PXJ1ef7Jt9a1b0+QlhOxsDD3XHzcpwmpLmEm2vVhdpc2l2zLJix6VFbo+XZjxfmXuyK3B7heuBjsg/P78zfHl242hn0MnOgLvz4m7MjFld4jYnx2l6qu2kZIfLU6Muzoi/uTh3Q5XPtBTbrY0+mxt8T/eG7ajyONgZDdL88fHVvY2eJ9u8b00NvDLBf2GayYRYw33zWheVBu6udV6Sb32kzX1jlffaroLdzd7bqh2Ot7hvyLPYWu39+8c3oLM/fbpz/PmZTa+PLXh+ZOGt7TNvbp3x9f2rn++fvb+w8fPVbW/Prv/49CYw2X08u/rT6WWPDiy4vGna9Z0L/v75BQCC4+cwnEB9GwAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image lazyload\"\n        alt=\"Urso revirando caixas com a logo do NPM\"\n        title=\"Urso revirando caixas com a logo do NPM\"\n        data-src=\"/static/699b3605396b61f20bdcde61b06a1254/d9199/npm.png\"\n        data-srcset=\"/static/699b3605396b61f20bdcde61b06a1254/8ff5a/npm.png 240w,\n/static/699b3605396b61f20bdcde61b06a1254/e85cb/npm.png 480w,\n/static/699b3605396b61f20bdcde61b06a1254/d9199/npm.png 960w,\n/static/699b3605396b61f20bdcde61b06a1254/07a9c/npm.png 1440w,\n/static/699b3605396b61f20bdcde61b06a1254/29114/npm.png 1920w\"\n        sizes=\"(max-width: 960px) 100vw, 960px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n  </a>\n    </span></p>\n<p>É <strong>cada vez maior</strong> o uso de <strong>bibliotecas</strong> e outras <strong>dependências</strong> criadas por outras pessoas nos nossos projetos, e fazer o <strong>download e gerenciamento</strong> destas, pode se tornar um pouco <strong>complicado</strong>. Para <strong>solucionar</strong> isso, faço o uso do <strong>Node Package Manager</strong> (Gerenciador de Pacotes do Node), popularmente conhecido como NPM. Com ele, podemos facilmente <strong>fazer o download e controlar as versões das dependências</strong> que usamos nos nossos projetos, por meio do <strong>terminal</strong> e alguns <strong>arquivos JSON</strong> que o gerenciador cria no diretório do projeto.</p>\n<h2><strong>1: Instalando o Node.js</strong></h2>\n<p>Para começar, é preciso ter instalado o <strong>Node.js</strong> no nosso computador. Essa plataforma disponibiliza uma <strong>série de features</strong>, incluindo o seu <strong>gerenciador de pacotes</strong>, que é o <strong>NPM</strong>. Para uma explicação <strong>mais ampla</strong> sobre o <strong>Node</strong>, aconselho <a href=\"http://nodebr.com/o-que-e-node-js/\">essa leitura</a>.</p>\n<p>Prosseguindo para a <strong>instalação</strong>:</p>\n<ul>\n<li><strong>Acesse</strong> este <a href=\"https://nodejs.org/en/download/\">site oficial do Node.js</a>, escolha a versão correta para o seu <em>SO</em> e faça o <strong>download</strong>.</li>\n<li><strong>Execute</strong> o instalador e <strong>vá prosseguindo</strong> pelo botão “Next”. Para a instalação padrão, <strong>não é necessário mudar nenhum diretório ou opção</strong>.</li>\n<li>Para se <strong>certificar que está tudo <em>ok</em></strong>, reinicie o seu computador, abra o seu <strong>terminal</strong> e execute o comando <strong>“node -v”</strong>. A <strong>saída</strong> deverá ser um <strong>número*</strong>(a versão da plataforma)*, caso ao contrário, <strong>deu algo errado</strong>.</li>\n<li>Agora você também tem acesso ao <strong>terminal Javascript do Node.js</strong>, basta procurar pelo <strong>aplicativo “Node.js”</strong>, que foi instalado no seu computador.</li>\n</ul>\n<h2>2: Inicializando o NPM no seu projeto</h2>\n<p>De agora em diante, será necessário o uso do <strong>terminal</strong>, para usar os <strong>comandos do NPM</strong>. Para isso, precisamos <strong>executar o CMD na pasta raiz do nosso diretório</strong>. <em>Se você tem medo de terminal, chegou a hora de superar.</em></p>\n<p>O comando para navegar pelas pastas no terminal é a palavra <strong>“<em>cd</em>”</strong> seguida do <strong>caminho para chegar até o arquivo.</strong> No meu caso:</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">cd C:\\Users\\USUARIO\\Documents\\Projetos\\Projeto NPM</code></pre></div>\n<p>Para quem é realmente novo no esquema do terminal, uma ilustração mais real da <strong>abertura do terminal e execução do comando</strong>.</p>\n<p><img src=\"/ed31247ab9d01f492b7020b2137e8862/1_ldxqR68PSkq3X1peyK1ljg.gif\" alt=\"GIF Ilustrando a execução terminal e do comando cd\"><em>GIF Ilustrando a execução terminal e do comando cd</em></p>\n<p>Agora que já temos o terminal <strong>corretamente alocado</strong> na pasta raiz do nosso projeto, podemos <strong>inicializar o NPM</strong>. Basta usar o comando “<strong><em>npm init”.</em></strong> O terminal vai pedir algumas entradas, mas <strong>vamos pular esta etapa dando enter até acabar</strong> <em>(mas se você quiser pode responder direitinho hahaha).</em></p>\n<p><img src=\"/d8517186ab929db32cf3939001648884/1_2ViOoZnf2sZwkC8KOkZ6MQ.gif\" alt=\"GIF ilustrando a execução do comando “npm init” no terminal\"><em>GIF ilustrando a execução do comando “npm init” no terminal</em></p>\n<p>Perceberam que o arquivo “<em>package.json</em>” foi gerado no no nosso diretório. Este, vai <strong>armazenar dados</strong> como informações sobre o projeto, <strong>nome e versão dos pacotes</strong> já instalados e <strong>scripts</strong> <em>(função que vou abordar em outro artigo)</em>.</p>\n<h2>3: “Baixando” os primeiros pacotes</h2>\n<p>O comando para solicitar a instalação de pacotes é “<em>npm install nomedopacote</em>”, <strong>onde a palavra install pode ser substituída pela abreviação “i”</strong>, logo temos:</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">npm i nomedopacote</code></pre></div>\n<p>Para saber o nome correto dos pacotes, acesse <a href=\"https://www.npmjs.com/package/package\">este site</a> e <strong>pesquise pela dependência</strong> que você quer. No meu caso quero instalar a ultima versão do <em>bootstrap</em>, então:</p>\n<p><img src=\"/6fd57b79116d514ad53b85664f5ca668/1_GbVzQ-mzC0soFRkDEI2GjA.gif\" alt=\"GIF Ilustrando o processo de instalação de um pacote\"><em>GIF Ilustrando o processo de instalação de um pacote</em></p>\n<blockquote>\n<p>No GIF acima, segui as seguintes etapas: Pesquisei pela dependência no site, para me certificar que estou usando o nome correto; Abri o terminal/CMD, o qual está alocado na pasta do meu projeto onde inicializei o NPM; Executei o comando “npm i bootststrap”.</p>\n</blockquote>\n<p>Agora, percebam o surgimento de <strong>um arquivo e uma pasta</strong> após a execução do primeiro install. <strong>As suas funções são:</strong></p>\n<ul>\n<li><strong>Pasta “node_modules/”:</strong> <strong>Armazena</strong> todos os <strong>pacotes instalados</strong> por meio do NPM. <em>No nosso caso, a dependência do bootstrap que baixamos está lá.</em></li>\n<li><strong>Arquivo “package-lock.json”:</strong> Esse arquivo <strong>guarda</strong> de uma forma mais <strong>aprofundada</strong> <strong>as</strong> <strong>informações</strong> do <strong>módulo e seus pacotes instalados</strong>. Coisas como <strong>mapeamento</strong> de relações de dependência(quando um pacote depende de outro para funcionar), <strong><em>hashs</em></strong> que fazem o controle de integridade, <strong><em>links</em></strong> onde os downloads foram feitos e <strong>versões detalhadas</strong> dos pacotes <strong>estão nesse JSON</strong>.</li>\n</ul>\n<p>Vale ressaltar que quando a dependência é <strong>usada apenas para o desenvolvimento</strong>, não sendo necessária para “rodar” o projeto, como no caso de ferramentas como o Gulp(um automatizador de tarefas, abordarei no próximo capítulo), deve ser usado o <strong>sufixo</strong> <strong>“— save-dev”</strong>, que pode ser resumido para um simples <strong>“<em>-D</em>”</strong>. Logo o comando fica:</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">npm i nomedopacote -D</code></pre></div>\n<h2>4: Trabalhando com o package.json</h2>\n<p>O <strong>NPM</strong> tem alguns comportamentos muito interessantes, um deles é a <strong>flexibilidade</strong> na instalação de uma <strong>lista de dependências por meio do arquivo</strong> <em>package.json</em>. Quando você quiser instalar <strong>todas</strong> as dependências do projeto(que não sejam ferramentas de dev), ou seja, aquelas que estão no seu package.json, basta executar o comando <strong>“npm i”</strong> <em>(isso mesmo, sem especificar o nome de alguma dependência)</em>, e <strong>todas serão instaladas</strong>.</p>\n<p><img src=\"/c2502e945b71b8ba99395ac1ab21a43d/1_5UERe3wwpgsGl88v-kiOMg.gif\" alt=\"GIF Ilustrando a instalação das dependências de um package.json\"><em>GIF Ilustrando a instalação das dependências de um package.json</em></p>\n<blockquote>\n<p>Nessa ilustração, a esquerda está o meu terminal, a direita o meu package.json, e no fundo a pasta “node_modules” do meu projeto. Percebam que não havia nenhuma biblioteca “instalada”, mas o meu <em>package.json</em> tinha algumas dependências na lista. Após a execução do comando “npm i”, foi feito o download de todas essas dependências.</p>\n</blockquote>\n<p>Logo, é uma <strong>boa prática</strong> quando se <strong>trabalhando grupo</strong> (como projetos no <strong><em>GITHUB</em></strong>), não disponibilizar a pasta <strong>“node_modules”</strong>, e sim o arquivo <strong>“<em>package.json</em>” e o “package-lock.json”</strong> <em>(sim, esse também!)</em>, assim o seu colega(ou você) pode escolher o que e se quer fazer download no projeto, <strong>não sendo obrigado a fazer o download de toneladas de arquivos</strong>.</p>\n<p>É isso aí galera! Agora vocês podem dizer na entrevista de emprego que são sabem usar um <strong>gerenciador de dependências</strong>, hahahaha! Deixei de fora uma parte chamada <strong>“NPM Scripts”</strong>, mas tem basicamente a mesma função de uma ferramenta que <strong>vou abordar futuramente</strong>.</p>\n<p>Se esse artigo foi <strong>útil</strong> pra ti, da uma <strong>compartilhada com os amigos e clica na mãozinha ali em baixo</strong> :). Qualquer <strong>dúvida</strong> ou <strong>sugestão</strong> de acréscimo ao artigo ou de assuntos para novos capítulos, deixa um <strong>comentário</strong> ou <strong>me chama</strong> em alguma das minhas redes sociais, <strong>bora bater um papo</strong>!</p>\n<ul>\n<li><a href=\"https://www.facebook.com/vitor.regisderamos\">Facebook</a></li>\n<li><a href=\"https://www.linkedin.com/in/vitorregisr/\">Linkedin</a></li>\n<li><a href=\"https://twitter.com/vitorregisrr\">Twitter</a></li>\n</ul>","timeToRead":5,"fields":{"slug":"/blog/gerenciando-dependencias-com-npm/"},"frontmatter":{"title":"Gerenciando dependências com NPM","category":"node","image":{"publicURL":"/static/699b3605396b61f20bdcde61b06a1254/npm.png"},"description":"Facilitando o download e controle de dependências usados em projetos,","date":"19 de junho de 2019"}}},"pageContext":{"slug":"/blog/gerenciando-dependencias-com-npm/"}},"staticQueryHashes":["1342666553","2249152690","3023333919","3737124155","4076689451","515424126","698804963","94195747"]}