{"id":2499,"date":"2016-10-18T10:14:33","date_gmt":"2016-10-18T12:14:33","guid":{"rendered":"https:\/\/www.kinghost.com.br\/wiki\/?post_type=article&#038;p=2499"},"modified":"2021-12-17T15:53:51","modified_gmt":"2021-12-17T17:53:51","slug":"npm-nodejs","status":"publish","type":"article","link":"https:\/\/king.host\/wiki\/artigo\/npm-nodejs\/","title":{"rendered":"Conhecendo o NPM &#8211; Gerenciador de pacotes para Nodejs"},"content":{"rendered":"<p><em>O NPM (Node Package Manager) consiste muito mais em um kit de ferramentas para desenvolvimento do que somente um instalador de pacotes.<\/em><br \/>\nConfira alguns termos importantes da hospedagem nodejs.<\/p>\n<p>O <strong>Node.js<\/strong> \u00e9 uma tecnologia, uma plataforma que utiliza o JavaScript como sintaxe. \u00c9 de c\u00f3digo aberto e possui uma ampla comunidade. Atrav\u00e9s dele, \u00e9 poss\u00edvel desenvolver pequenas e grandes aplica\u00e7\u00f5es.<\/p>\n<p>O Node utiliza o NPM como gerenciador de pacotes e bibliotecas, que por sua vez \u00e9 o maior ecossistema de bibliotecas open source do mundo. Site oficial: <a href=\"https:\/\/nodejs.org\/en\/\" target=\"_blank\" rel=\"noopener\">https:\/\/nodejs.org\/en\/<\/a><\/p>\n<h2><span class=\"ez-toc-section\" id=\"NPM\"><\/span>NPM<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>O NPM consiste muito mais em um kit de ferramentas para desenvolvimento do que somente um instalador de pacotes. Atrav\u00e9s do <code>npm config<\/code> \u00e9 poss\u00edvel realizar uma s\u00e9rie de tarefas, como efetuar o login\/logout do npm.org para controlar pacotes pr\u00f3prios por exemplo. Enquanto isso, atrav\u00e9s de um arquivo .npmrc \u00e9 poss\u00edvel ter acesso as configura\u00e7\u00f5es diretamente para uso no shell, interagindo automaticamente com o bin\u00e1rio sem a necessidade de enviar par\u00e2metros extras. Com o .npmrc, \u00e9 poss\u00edvel ter configura\u00e7\u00f5es exclusivas para diferentes projetos em uso, o que torna a solu\u00e7\u00e3o flex\u00edvel para quando se possui diversos ambientes\/projetos simult\u00e2neos. Atrav\u00e9s do npm config tamb\u00e9m s\u00e3o feitas configura\u00e7\u00f5es padr\u00f5es com o comando para nomes de autoria, licen\u00e7a de software e outras informa\u00e7\u00f5es.<br \/>\n<a href=\"https:\/\/king.host\/wiki\/wp-content\/uploads\/2016\/10\/npm.png\"><img v-on:click=\"toggle_modal($event)\" data-original=\"https:\/\/king.host\/wiki\/wp-content\/uploads\/2016\/10\/npm.png\" class=\"aligncenter size-full\"><\/a><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Alguns_comandos_uteis\"><\/span>Alguns comandos \u00fateis<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Com o <code>npm dist-tag<\/code> \u00e9 poss\u00edvel gerar a nomenclatura de m\u00faltiplas releases do m\u00f3dulo, fazendo que seja poss\u00edvel gerar um branch release e outro testing, facilitando o controle de branchs diferentes na publica\u00e7\u00e3o dos m\u00f3dulos. Por padr\u00e3o, o npm adicionar\u00e1 a tag <em>@latest<\/em> e \u00e9 esta a vers\u00e3o baixada quando um m\u00f3dulo \u00e9 instalado. O npm em si segue esse padr\u00e3o no pr\u00f3prio npm, gerando tags conforme a necessidade, tags chamadas <em>next<\/em> s\u00e3o usadas para controlar os pr\u00f3ximos releases, permitindo os usu\u00e1rios a testarem as novas vers\u00f5es antes do lan\u00e7amento oficial como <em>latest<\/em> que \u00e9 considerada a vers\u00e3o stable (at\u00e9 mesmo a vers\u00e3o LTS possui uma vers\u00e3o next de upgrade).<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Dependencias\"><\/span>Depend\u00eancias<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>O comando <code>npm shrinkwrap<\/code> cria a lista de depend\u00eancias de uma app, gerando um arquivo chamado <em>npm-shrinkwrap.json<\/em> que pode ser lido para facilitar a reprodu\u00e7\u00e3o do ambiente e, ao mesmo tempo, garantir vers\u00f5es espec\u00edficas do m\u00f3dulo do projeto. O shrinkwrap n\u00e3o usa cache tamb\u00e9m, fazendo com que voc\u00ea sempre baixe os m\u00f3dulos do reposit\u00f3rio em uma forma de reprodu\u00e7\u00e3o mais real. Por n\u00e3o usar cache, o build completo pode falhar por causa de apenas um m\u00f3dulo que est\u00e1 nas depend\u00eancias e falhou. Usando <code>npm instal --save --save-bundle<\/code>, o <em>buildDependencies<\/em> ir\u00e1 gerar o package.json quando se faz um <em>npm publish<\/em>, gerando uma redu\u00e7\u00e3o no consumo da rede e reduzindo o tempo de instala\u00e7\u00e3o.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Controle\"><\/span>Controle<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Para controlar os m\u00f3dulos de maneira mais pr\u00e1tica em redes com velocidade baixa, \u00e9 poss\u00edvel fazer um <code>npm config get cache<\/code> para verificar em qual diret\u00f3rio o cache est\u00e1 sendo armazenado, <code>npm cache rm<\/code> \u00e9 usado para remover caches de m\u00f3dulos que voc\u00ea j\u00e1 baixou (os m\u00f3dulos nunca s\u00e3o removidos se n\u00e3o solicitado) e para limpar todos os m\u00f3dulos instalados, pode-se usar o comando <code>npm cache clear<\/code>. Com o <code>npm install --cache-min=999999<\/code> \u00e9 poss\u00edvel dizer para o npm que os \u00faltimos m\u00f3dulos instalados dispon\u00edveis devem ser usados.<\/p>\n<p><strong>Precisa da documenta\u00e7\u00e3o do NPM? Veja neste p\u00e1gina: <a href=\"https:\/\/docs.npmjs.com\" target=\"_blank\" rel=\"noopener\">https:\/\/docs.npmjs.com<\/a><\/strong><\/p>\n","protected":false},"author":9,"featured_media":0,"menu_order":6,"comment_status":"closed","ping_status":"closed","template":"","format":"standard","article-category":[181],"article-tag":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/king.host\/wiki\/wp-json\/wp\/v2\/article\/2499"}],"collection":[{"href":"https:\/\/king.host\/wiki\/wp-json\/wp\/v2\/article"}],"about":[{"href":"https:\/\/king.host\/wiki\/wp-json\/wp\/v2\/types\/article"}],"author":[{"embeddable":true,"href":"https:\/\/king.host\/wiki\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/king.host\/wiki\/wp-json\/wp\/v2\/comments?post=2499"}],"version-history":[{"count":1,"href":"https:\/\/king.host\/wiki\/wp-json\/wp\/v2\/article\/2499\/revisions"}],"predecessor-version":[{"id":4915,"href":"https:\/\/king.host\/wiki\/wp-json\/wp\/v2\/article\/2499\/revisions\/4915"}],"wp:attachment":[{"href":"https:\/\/king.host\/wiki\/wp-json\/wp\/v2\/media?parent=2499"}],"wp:term":[{"taxonomy":"article-category","embeddable":true,"href":"https:\/\/king.host\/wiki\/wp-json\/wp\/v2\/article-category?post=2499"},{"taxonomy":"article-tag","embeddable":true,"href":"https:\/\/king.host\/wiki\/wp-json\/wp\/v2\/article-tag?post=2499"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}