{"id":10089,"date":"2016-07-27T09:00:26","date_gmt":"2016-07-27T12:00:26","guid":{"rendered":"https:\/\/king.host\/blog\/?p=10089"},"modified":"2024-06-04T07:28:03","modified_gmt":"2024-06-04T10:28:03","slug":"npm-alem-do-basico-na-nodeconf-2016","status":"publish","type":"post","link":"https:\/\/king.host\/blog\/tecnologia\/npm-alem-do-basico-na-nodeconf-2016\/","title":{"rendered":"NPM: al\u00e9m do b\u00e1sico &#8211; direto da Nodeconf 2016"},"content":{"rendered":"<p>N\u00f3s participamos da primeira edi\u00e7\u00e3o da NodeConf da Am\u00e9rica Latina e nesse post\u00a0vamos compartilhar\u00a0com voc\u00ea o conte\u00fado da palestra de Kat March\u00e1n, intitulada &#8220;NPM: beyond basic notions&#8221;.<\/p>\n<h3>Conhecendo o npm<\/h3>\n<p>O npm consiste muito mais em um kit de ferramentas para desenvolvimento do que somente um instalador de pacotes. Atrav\u00e9s do npm config \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.<\/p>\n<h3>Alguns comandos importantes<\/h3>\n<p>Com NPM dist-tag \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 @latest 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 de, tags chamadas next 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 latest que \u00e9 considerada a vers\u00e3o stable (at\u00e9 mesmo a vers\u00e3o LTS possui uma vers\u00e3o next de upgrade).<\/p>\n<h3>NPM\u00a0scripts<\/h3>\n<p>Usando npm scripts \u00e9 poss\u00edvel gerar comandos extras ap\u00f3s a chamada, que podem ser usados para, por exemplo, rodar testes e fazer limpeza de diret\u00f3rios tempor\u00e1rios. Os scripts possuem configura\u00e7\u00f5es da poss\u00edvel inicializa\u00e7\u00e3o da app, com eles \u00e9 poss\u00edvel\u00a0rodar comandos de inicializa\u00e7\u00e3o de publica\u00e7\u00e3o, rodar comandos extras para gerar o conte\u00fado est\u00e1tico e muitas outras possibilidades. Com npm scripts &#8216;preversion&#8217; \u00e9 poss\u00edvel agendar testes, assim, na hora de fazer um upgrade em uma vers\u00e3o de seu m\u00f3dulo, o upgrade ser\u00e1\u00a0executado sem sua intera\u00e7\u00e3o direta, aprovando ou n\u00e3o o upgrade de modo automatizado. \u00c9 poss\u00edvel dizer que existem $PATHs espec\u00edficos de m\u00f3dulos para os projetos, o que \u00e9 especialmente \u00fatil quando existem diversos m\u00f3dulos no reposit\u00f3rio global do servidor, facilitando a manuten\u00e7\u00e3o de m\u00faltiplos projetos com m\u00faltiplas vers\u00f5es dos mesmos m\u00f3dulos.<\/p>\n<h3>Depend\u00eancias<\/h3>\n<p>As ferramentas do npm para gerenciamento de depend\u00eancias, o comando npm shrinkwrap, criam\u00a0a lista de depend\u00eancias de uma app, gerando um arquivo chamado npm-shrinkwrap.json que pode ser lido para\u00a0facilitar 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\u00a0apenas um m\u00f3dulo que est\u00e1 nas depend\u00eancias\u00a0e\u00a0falhou. Usando npm instal &#8211;save &#8211;save-bundle, o buildDependencies ir\u00e1 gerar o package.json quando se faz um npm publish, gerando uma redu\u00e7\u00e3o no consumo da rede e reduzindo o tempo de instala\u00e7\u00e3o.<\/p>\n<h3>Controle<\/h3>\n<p>Para controlar os m\u00f3dulos de maneira mais pr\u00e1tica em redes com velocidade baixa, \u00e9 poss\u00edvel fazer um npm config get cache para verificar em qual diret\u00f3rio o cache est\u00e1 sendo armazenado, npm cache rm \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\u00a0o comando npm cache clear. Com o npm install &#8211;cache-min=999999 \u00e9 poss\u00edvel dizer para o npm que os \u00faltimos m\u00f3dulos instalados dispon\u00edveis devem ser usados.<\/p>\n<h3>Importante:<\/h3>\n<p>O npm deixou de suportar a vers\u00e3o v0.12 ou mais antigas, segue o padr\u00e3o LTS, devendo manter o suporte a vers\u00f5es acima da v4.x na vers\u00e3o 3 dele. O processo de LTS \u00e9 separado do NodeJS e segue padr\u00f5es pr\u00f3prios, pois \u00e9 parte de uma organiza\u00e7\u00e3o diferente. Ajudar a <a href=\"https:\/\/docs.npmjs.com\/\" target=\"_blank\" rel=\"noopener\">documentar o NPM <\/a>lhe d\u00e1 direito a meias exclusivas do projeto como forma de agradecimento. No momento a documenta\u00e7\u00e3o se mant\u00e9m somente em ingl\u00eas.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>N\u00f3s participamos da primeira edi\u00e7\u00e3o da NodeConf da Am\u00e9rica Latina e nesse post\u00a0vamos compartilhar\u00a0com voc\u00ea o conte\u00fado da palestra de Kat March\u00e1n, intitulada &#8220;NPM: beyond basic notions&#8221;. Conhecendo o npm O npm consiste muito mais em um kit de ferramentas para desenvolvimento do que somente um instalador de pacotes. Atrav\u00e9s do npm config \u00e9 poss\u00edvel [&hellip;]<\/p>\n","protected":false},"author":277,"featured_media":10090,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[],"class_list":["post-10089","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tecnologia"],"_links":{"self":[{"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/posts\/10089","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/users\/277"}],"replies":[{"embeddable":true,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/comments?post=10089"}],"version-history":[{"count":1,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/posts\/10089\/revisions"}],"predecessor-version":[{"id":38361,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/posts\/10089\/revisions\/38361"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/media\/10090"}],"wp:attachment":[{"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/media?parent=10089"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/categories?post=10089"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/tags?post=10089"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}