{"id":2674,"date":"2020-03-10T17:05:00","date_gmt":"2020-03-10T20:05:00","guid":{"rendered":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/?p=2674"},"modified":"2025-09-02T13:49:17","modified_gmt":"2025-09-02T16:49:17","slug":"npm-para-iniciantes","status":"publish","type":"post","link":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/2020\/03\/10\/npm-para-iniciantes","title":{"rendered":"NPM para iniciantes"},"content":{"rendered":"\n<p class=\"c1\"><span class=\"c3\">Ao iniciar um novo projeto para\u00a0<\/span><span class=\"c3 c13\">Web<\/span><span class=\"c3\">, \u00e9 comum esbarrar em problemas complicados, mas com solu\u00e7\u00f5es proporcionadas por\u00a0<\/span><span class=\"c3 c13\">frameworks<\/span><span class=\"c7 c3\">\u00a0ou pacotes independentes facilmente encontrados na primeira pesquisa realizada na internet. Conforme os projetos crescem em dimens\u00e3o e o n\u00famero de m\u00f3dulos aumenta, a organiza\u00e7\u00e3o desses pacotes pode se tornar um verdadeiro desafio. O que fazer quando isso acontece?<\/span><\/p>\n<p class=\"c1\"><span class=\"c3\">Desde a cria\u00e7\u00e3o do\u00a0<\/span><span class=\"c6 c3 c13\"><a class=\"c8\" href=\"https:\/\/www.google.com\/url?q=https:\/\/nodejs.org&amp;sa=D&amp;ust=1584220289166000\">Node.js<\/a><\/span><span class=\"c3\">, o processo de desenvolvimento de software para\u00a0<\/span><span class=\"c3 c13\">Web<\/span><span class=\"c3\">\u00a0passou por uma transforma\u00e7\u00e3o significativa, principalmente na modulariza\u00e7\u00e3o e distribui\u00e7\u00e3o das depend\u00eancias utilizadas nos projetos. Com o crescimento do\u00a0<\/span><span class=\"c3 c13\">Node<\/span><span class=\"c3\">, um novo gerenciador de pacotes foi criado, chamado\u00a0<\/span><span class=\"c3 c13\">Node Package Manager<\/span><span class=\"c3\">. \u00a0Com ele, o manejo de depend\u00eancias ,\u00a0<\/span><span class=\"c7 c3\">antes feito manualmente e pass\u00edvel de muitos erros, passou a ser automatizado, facilitando o trabalho.<\/span><\/p>\n<p class=\"c1\"><span class=\"c3\">Nesse tutorial, voc\u00ea ir\u00e1 aprender a utilizar o\u00a0<\/span><span class=\"c24 c13\">Node Package Manager<\/span><span class=\"c3\">\u00a0(<\/span><span class=\"c24\">npm<\/span><span class=\"c3\">), um gerenciador de pacotes para a linguagem de programa\u00e7\u00e3o\u00a0<\/span><span class=\"c3 c13\">JavaScript<\/span><span class=\"c7 c3\">. Iremos aprender o b\u00e1sico sobre o funcionamento da ferramenta, entendendo seus principais componentes e como a ferramenta \u00e9 mais utilizada. Al\u00e9m disso, tamb\u00e9m \u00a0iremos nos aventurar publicando o nosso pr\u00f3prio pacote.<\/span><\/p>\n<p class=\"c16\"><span class=\"c7 c3\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/p>\n<img decoding=\"async\" class=\"aligncenter\" title=\"\" src=\"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/thumb\/d\/db\/Npm-logo.svg\/1920px-Npm-logo.svg.png\" alt=\"\" \/>\n<pre class=\"c17\" style=\"text-align: center\"><span class=\"c12 c3 c43\">Logo oficial do Node Package Manager (npm)<\/span><\/pre>\n<p class=\"c16 c9\">\u00a0<\/p>\n<p class=\"c16\"><strong><span class=\"c12 c3 c4\">O que \u00e9, de onde vem e o que ele faz?<\/span><\/strong><\/p>\n<p class=\"c1\"><span class=\"c3\">Sendo disponibilizado oficialmente junto ao\u00a0<\/span><span class=\"c3 c13\">Node.js<\/span><span class=\"c3\">, o npm \u00e9 um gerenciador de pacotes criado para a linguagem de programa\u00e7\u00e3o\u00a0<\/span><span class=\"c3 c13\">JavaScript<\/span><span class=\"c3\">. Foi em janeiro de 2010 que Isaac Z. Schlueter, buscando solucionar a maneira extremamente desorganizada de que os m\u00f3dulos eram inclu\u00eddos nos projetos do qual j\u00e1 tinha trabalhado, lan\u00e7ou a vers\u00e3o inicial da ferramenta.<\/span><\/p>\n<p class=\"c1\"><span class=\"c3\">Essa ferramenta<\/span><span class=\"c3\">\u00a0permite que os desenvolvedores que trabalham com a\u00a0<\/span><span class=\"c3 c13\">Web<\/span><span class=\"c3\">\u00a0possam publicar facilmente seus projetos, e que outros desenvolvedores possam ter acesso \u00e0 esses c\u00f3digos de forma r\u00e1pid<\/span><span class=\"c3\">a<\/span><span class=\"c3\">\u00a0e gratuita. N\u00e3o se limitando a isso, com o passar do tempo, v\u00e1rias outras funcionalidades tamb\u00e9m s\u00e3o oferecidas pela npm, como utilizar pacotes sem realizar o seu\u00a0<\/span><span class=\"c3 c13\">download<\/span><span class=\"c7 c3\">\u00a0e at\u00e9 mesmo compartilhar os pacotes com organiza\u00e7\u00f5es ou grupos espec\u00edficos.<\/span><\/p>\n<p class=\"c1\"><span class=\"c3\">Pode-se dividir o npm entre tr\u00eas componentes:\u00a0<\/span><span class=\"c24\">registro<\/span><span class=\"c3\">,\u00a0<\/span><span class=\"c24 c13\">website<\/span><span class=\"c3\">\u00a0e\u00a0<\/span><span class=\"c24 c13\">command-line interface<\/span><span class=\"c24\">\u00a0(CLI)<\/span><span class=\"c3\">, ou em portugu\u00eas, interface de linha de comando.<\/span><\/p>\n<ol class=\"c35 lst-kix_ajf6wp8lgj5i-0 start\" start=\"1\">\n<li class=\"c5 c19\"><strong><span class=\"c24\">Registro<\/span><\/strong><span class=\"c7 c3\">: \u00e9 um grande banco de dados p\u00fablicos de software JavaScript, onde s\u00e3o mantidos os pacotes publicados atrav\u00e9s do npm;<\/span><\/li>\n<li class=\"c5 c19\"><strong><span class=\"c24\">Website<\/span><\/strong><span class=\"c3\">: possibilita a navega\u00e7\u00e3o pelo acervo do<\/span><span class=\"c24\">\u00a0registro<\/span><span class=\"c7 c3\">, permitindo encontrar novos pacotes, configurar seu perfil pessoal do npm, criar organiza\u00e7\u00f5es (possibilitando a publica\u00e7\u00e3o de pacotes privados e p\u00fablicos), e outras fun\u00e7\u00f5es;<\/span><\/li>\n<li class=\"c5 c19\"><strong><span class=\"c24\">Command-line<\/span><span class=\"c24\">\u00a0interface<\/span><\/strong><span class=\"c7 c3\">: \u00e9 a interface de linha de comando a qual o desenvolvedor ir\u00e1 utilizar os comandos dispon\u00edveis pelo npm, podendo realizar o download, cria\u00e7\u00e3o, remo\u00e7\u00e3o e at\u00e9 mesmo atualiza\u00e7\u00e3o de pacotes.<\/span><\/li>\n<\/ol>\n<p class=\"c1\"><strong><span class=\"c7 c3\">Mas afinal, o que s\u00e3o exatamente esses pacotes?<\/span><\/strong><\/p>\n<p class=\"c1\"><span class=\"c3\">Esses pacotes, tamb\u00e9m chamados de m\u00f3dulos, s\u00e3o geralmente solu\u00e7\u00f5es de problemas particulares, ou seja, projetos pequenos que resolvem desafios espec\u00edficos, como um debugger para\u00a0<\/span><span class=\"c3 c13\">JavaScript<\/span><span class=\"c3\">. A ideia \u00e9 que cada pacote solucione um problema independente e de forma eficiente, e que assim, o desenvolvedor possa criar solu\u00e7\u00f5es customizadas atrav\u00e9s da combina\u00e7\u00e3o desses pequenos m\u00f3dulos. O que caracteriza cada um desses projetos como um pacote npm \u00e9 seu arquivo\u00a0<\/span><span class=\"c26\">package.json<\/span><span class=\"c7 c3\">.<\/span><\/p>\n<p class=\"c5\"><span class=\"c3\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0O arquivo<\/span><span class=\"c45\">\u00a0<\/span><span class=\"c26\">package.json<\/span><span class=\"c3\">\u00a0\u00e9 como o arquivo de configura\u00e7\u00e3o do seu pacote. Nele estar\u00e3o listadas v\u00e1rias caracter\u00edsticas fundamentais do m\u00f3dulo, detalhando tudo que ele precisa para funcionar junto do npm, como por exemplo: nome, vers\u00e3o, lista de depend\u00eancias e outras informa\u00e7\u00f5es. As depend\u00eancias s\u00e3o as informa\u00e7\u00f5es mais importantes deste arquivo, pois caso o seu pacote seja publicado e ele dependa de algum outro pacote, como\u00a0<\/span><span class=\"c6 c3 c13\"><a class=\"c8\" href=\"https:\/\/www.google.com\/url?q=https:\/\/lodash.com\/&amp;sa=D&amp;ust=1584220289171000\">Lodash<\/a><\/span><span class=\"c7 c3\">, isso precisa estar descrito na lista de depend\u00eancias. Caso contr\u00e1rio, as coisas n\u00e3o ir\u00e3o funcionar como deveriam.<\/span><\/p>\n<p class=\"c5\"><strong><span class=\"c12 c3 c4\">Configurando o ambiente<\/span><\/strong><\/p>\n<p class=\"c5\"><span class=\"c3\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"c3\">Para come\u00e7armos a dar os primeiros passos com o npm, precisamos realizar a instala\u00e7\u00e3o da\u00a0<\/span><span class=\"c24\">CLI<\/span><span class=\"c3\">\u00a0em nossos computadores. Sendo assim, voc\u00ea precisa basicamente\u00a0<\/span><span class=\"c6 c3\"><a class=\"c8\" href=\"https:\/\/www.google.com\/url?q=https:\/\/nodejs.org\/en\/download\/&amp;sa=D&amp;ust=1584220289172000\">instalar o\u00a0<\/a><\/span><span class=\"c6 c3 c13\"><a class=\"c8\" href=\"https:\/\/www.google.com\/url?q=https:\/\/nodejs.org\/en\/download\/&amp;sa=D&amp;ust=1584220289172000\">Node.js<\/a><\/span><span class=\"c7 c3\">.<\/span><\/p>\n<p class=\"c5\"><span class=\"c3\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Como o npm \u00e9 distribu\u00eddo oficialmente com o\u00a0<\/span><span class=\"c3 c13\">Node<\/span><span class=\"c3\">, ao instal\u00e1-lo, a\u00a0<\/span><span class=\"c24\">CLI<\/span><span class=\"c3\">\u00a0do gerenciador de pacotes j\u00e1 estar\u00e1 pronta para o nosso uso. Caso tenha d\u00favidas em qual vers\u00e3o instalar, basta seguir as instru\u00e7\u00f5es recomendadas no website. Para testar sua instala\u00e7\u00e3o, voc\u00ea pode acessar a\u00a0<\/span><span class=\"c24\">CLI\u00a0<\/span><span class=\"c7 c3\">e utilizar o seguinte comando:<\/span><\/p>\n<table class=\"c37\">\n<tbody>\n<tr class=\"c14\">\n<td class=\"c11\" colspan=\"1\" rowspan=\"1\">\n<p class=\"c18\"><code><span class=\"c44\">\u00a0 \u00a0\u00a0<\/span><span class=\"c22\">npm --version<\/span><\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p class=\"c5\"><span class=\"c3\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Ele ir\u00e1 imprimir a vers\u00e3o instalada em seu computador, confirmando que o programa est\u00e1 funcionando. Vamos criar o nosso pr\u00f3prio pacote?<\/span><\/p>\n<p class=\"c5\"><strong><span class=\"c12 c3 c4\">Criando seu primeiro pacote<\/span><\/strong><\/p>\n<p class=\"c5\"><span class=\"c3 c4\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"c3\">Neste guia, iremos criar um pacote exemplo com o intuito de aprender a manipular pacotes com o npm. Ele ser\u00e1 uma aplica\u00e7\u00e3o\u00a0<\/span><span class=\"c3 c13\">Node.js<\/span><span class=\"c3\">\u00a0simples, tendo a fun\u00e7\u00e3o de somar<\/span><span class=\"c3\">\u00a0dois n\u00fameros e imprimir sua soma.<\/span><span class=\"c3 c4\">\u00a0<\/span><span class=\"c3\">Inicialmente, precisamos navegar pela\u00a0<\/span><span class=\"c24\">CLI<\/span><span class=\"c3\">\u00a0at\u00e9 a pasta onde nosso projeto ser\u00e1 criado. Caso n\u00e3o tenha familiaridade com o uso de terminais\u00a0<\/span><span class=\"c3 c13\">Unix-based<\/span><span class=\"c3\">\u00a0e semelhantes,\u00a0<\/span><span class=\"c6 c3\"><a class=\"c8\" href=\"https:\/\/www.google.com\/url?q=https:\/\/computers.tutsplus.com\/tutorials\/navigating-the-terminal-a-gentle-introduction--mac-3855&amp;sa=D&amp;ust=1584220289176000\">esse material<\/a><\/span><span class=\"c3\">\u00a0pode te ajudar. Uma vez na pasta de nosso projeto, crie um arquivo chamado\u00a0<\/span><span class=\"c26\">index.js<\/span><span class=\"c7 c3\">\u00a0e salve o seguinte programa nele:<\/span><\/p>\n<table class=\"c37\">\n<tbody>\n<tr class=\"c14\">\n<td class=\"c11\" colspan=\"1\" rowspan=\"1\">\n<p class=\"c10\"><code><span class=\"c31\">const<\/span><span class=\"c0\">\u00a0<\/span><span class=\"c2\">chalk<\/span><span class=\"c0\">\u00a0=\u00a0<\/span><span class=\"c34\">require<\/span><span class=\"c0\">(<\/span><span class=\"c28\">'chalk'<\/span><span class=\"c0\">);\u00a0<\/span><span class=\"c29 c27\">\/\/ M\u00f3dulo que ir\u00e1 auxiliar na impress\u00e3o de strings<\/span><\/code><\/p>\n<p class=\"c10\"><code><span class=\"c31\">const<\/span><span class=\"c0\">\u00a0<\/span><span class=\"c2\">n1<\/span><span class=\"c0\">\u00a0= +<\/span><span class=\"c2\">process<\/span><span class=\"c0\">.<\/span><span class=\"c2\">argv<\/span><span class=\"c0\">[<\/span><span class=\"c33\">2<\/span><span class=\"c0\">];\u00a0<\/span><span class=\"c29 c27\">\/\/ Recebe o primeiro par\u00e2metro do terminal<\/span><\/code><\/p>\n<p class=\"c10\"><code><span class=\"c31\">const<\/span><span class=\"c0\">\u00a0<\/span><span class=\"c2\">n2<\/span><span class=\"c0\">\u00a0= +<\/span><span class=\"c2\">process<\/span><span class=\"c0\">.<\/span><span class=\"c2\">argv<\/span><span class=\"c0\">[<\/span><span class=\"c33\">3<\/span><span class=\"c0\">];\u00a0<\/span><span class=\"c29 c27\">\/\/ Recebe o segundo par\u00e2metro do terminal<\/span><\/code><\/p>\n<p class=\"c10\"><code><span class=\"c32\">try<\/span><span class=\"c0 c27\">\u00a0{<\/span><\/code><\/p>\n<p class=\"c10\"><code><span class=\"c0\">\u00a0 \u00a0<\/span><span class=\"c32\">if<\/span><span class=\"c0\">\u00a0(!<\/span><span class=\"c2\">n1<\/span><span class=\"c0\">\u00a0|| !<\/span><span class=\"c2\">n2<\/span><span class=\"c0\">)\u00a0<\/span><span class=\"c29 c27\">\/\/ Checa se algum dos valores \u00e9 falso, null, undefined...<\/span><\/code><\/p>\n<p class=\"c10\"><code><span class=\"c0\">\u00a0 \u00a0 \u00a0 \u00a0<\/span><span class=\"c32\">throw<\/span><span class=\"c0\">\u00a0<\/span><span class=\"c28\">'Par\u00e2metros inv\u00e1lidos!'<\/span><span class=\"c0 c27\">;<\/span><\/code><\/p>\n<p class=\"c10\"><code><span class=\"c0\">\u00a0 \u00a0<\/span><span class=\"c20\">console<\/span><span class=\"c0\">.<\/span><span class=\"c34\">log<\/span><span class=\"c0\">(<\/span><span class=\"c2\">chalk<\/span><span class=\"c0\">.<\/span><span class=\"c2\">white<\/span><span class=\"c0\">.<\/span><span class=\"c34\">bgBlue<\/span><span class=\"c0\">(<\/span><span class=\"c28\">'Soma: '<\/span><span class=\"c0\">\u00a0+ (<\/span><span class=\"c2\">n1<\/span><span class=\"c0\">\u00a0+\u00a0<\/span><span class=\"c2\">n2<\/span><span class=\"c0\">)));\u00a0<\/span><span class=\"c27 c29\">\/\/ Imprime a soma dos n\u00fameros<\/span><\/code><\/p>\n<p class=\"c10\"><code><span class=\"c0\">}\u00a0<\/span><span class=\"c32\">catch<\/span><span class=\"c0\">\u00a0(<\/span><span class=\"c2\">e<\/span><span class=\"c0 c27\">) {<\/span><\/code><\/p>\n<p class=\"c10\"><code><span class=\"c0\">\u00a0 \u00a0<\/span><span class=\"c20\">console<\/span><span class=\"c0\">.<\/span><span class=\"c34\">log<\/span><span class=\"c0\">(<\/span><span class=\"c2\">chalk<\/span><span class=\"c0\">.<\/span><span class=\"c2\">bold<\/span><span class=\"c0\">.<\/span><span class=\"c34\">red<\/span><span class=\"c0\">(<\/span><span class=\"c2\">e<\/span><span class=\"c0\">));\u00a0<\/span><span class=\"c29 c27\">\/\/ Imprime o erro, caso algum dos valores seja inv\u00e1lido<\/span><\/code><\/p>\n<p class=\"c10\"><code><span class=\"c0\">}<\/span><\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p class=\"c1\"><span class=\"c7 c3\">N\u00e3o se preocupe em entender o c\u00f3digo do programa, ele \u00e9 s\u00f3 um pacote exemplo que estamos criando, embora funcione. \u00a0Feito isso, devemos iniciar a configura\u00e7\u00e3o de nosso pacote npm da seguinte forma:<\/span><\/p>\n<table class=\"c37\">\n<tbody>\n<tr class=\"c14\">\n<td class=\"c11\" colspan=\"1\" rowspan=\"1\">\n<p class=\"c18\"><code><span class=\"c21\">\u00a0 \u00a0\u00a0<\/span><span class=\"c22\">npm init<\/span><\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p class=\"c16\"><span class=\"c7 c3\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"c3\">Esse comando nos auxiliar\u00e1 na configura\u00e7\u00e3o b\u00e1sica de nosso pacote, criando o nosso arquivo\u00a0<\/span><span class=\"c26\">package.json<\/span><span class=\"c7 c3\">\u00a0e o preenchendo com uma s\u00e9rie de informa\u00e7\u00f5es que iremos fornecer. Preencha a descri\u00e7\u00e3o, nome e autor como quiser, mas n\u00e3o preencha nada nos outros par\u00e2metros. Ao fim da execu\u00e7\u00e3o, o nosso arquivo deve estar semelhante a isso:<\/span><\/p>\n<table class=\"c37\">\n<tbody>\n<tr class=\"c14\">\n<td class=\"c11\" colspan=\"1\" rowspan=\"1\">\n<p class=\"c10\"><code><span class=\"c0 c27\">{<\/span><\/code><\/p>\n<p class=\"c10\"><code><span class=\"c0\">\u00a0<\/span><span class=\"c2\">\"name\"<\/span><span class=\"c0\">:\u00a0<\/span><span class=\"c28\">\"sum2\"<\/span><span class=\"c0 c27\">,<\/span><\/code><\/p>\n<p class=\"c10\"><code><span class=\"c0\">\u00a0<\/span><span class=\"c2\">\"version\"<\/span><span class=\"c0\">:\u00a0<\/span><span class=\"c28\">\"1.0.0\"<\/span><span class=\"c0 c27\">,<\/span><\/code><\/p>\n<p class=\"c10\"><code><span class=\"c0\">\u00a0<\/span><span class=\"c2\">\"description\"<\/span><span class=\"c0\">:\u00a0<\/span><span class=\"c28\">\"Somador de dois n\u00fameros\"<\/span><span class=\"c0 c27\">,<\/span><\/code><\/p>\n<p class=\"c10\"><code><span class=\"c0\">\u00a0<\/span><span class=\"c2\">\"main\"<\/span><span class=\"c0\">:\u00a0<\/span><span class=\"c28\">\"index.js\"<\/span><span class=\"c0 c27\">,<\/span><\/code><\/p>\n<p class=\"c10\"><code><span class=\"c0\">\u00a0<\/span><span class=\"c2\">\"scripts\"<\/span><span class=\"c0 c27\">: {<\/span><\/code><\/p>\n<p class=\"c10\"><code><span class=\"c0\">\u00a0 \u00a0<\/span><span class=\"c2\">\"test\"<\/span><span class=\"c0\">:\u00a0<\/span><span class=\"c28\">\"echo\u00a0<\/span><span class=\"c38\">\\\"<\/span><span class=\"c28\">Error: no test specified<\/span><span class=\"c38\">\\\"<\/span><span class=\"c28 c27\">\u00a0&amp;&amp; exit 1\"<\/span><\/code><\/p>\n<p class=\"c10\"><code><span class=\"c0 c27\">\u00a0},<\/span><\/code><\/p>\n<p class=\"c10\"><code><span class=\"c0\">\u00a0<\/span><span class=\"c2\">\"author\"<\/span><span class=\"c0\">:\u00a0<\/span><span class=\"c28\">\"Hierro Duarte\"<\/span><span class=\"c0 c27\">,<\/span><\/code><\/p>\n<p class=\"c10\"><code><span class=\"c0\">\u00a0<\/span><span class=\"c2\">\"license\"<\/span><span class=\"c0\">:\u00a0<\/span><span class=\"c28\">\"ISC\"<\/span><\/code><\/p>\n<p class=\"c10\"><code><span class=\"c0\">}<\/span><\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p class=\"c16\"><span class=\"c7 c3\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"c3\">A maior parte dos campos \u00e9 auto descritivo, como\u00a0<\/span><span class=\"c2 c25\">&#8220;name&#8221;<\/span><span class=\"c3\">\u00a0e\u00a0<\/span><span class=\"c2 c25\">&#8220;description&#8221;<\/span><span class=\"c3\">, mas alguns podem gerar certa d\u00favida, como\u00a0<\/span><span class=\"c2 c25\">&#8220;scripts&#8221;<\/span><span class=\"c3\">. De qualquer forma, eles ser\u00e3o explicados conforme necess\u00e1rio. Para aprender mais sobre o\u00a0<\/span><span class=\"c26\">package.json<\/span><span class=\"c3\">, a\u00a0<\/span><span class=\"c6 c3\"><a class=\"c8\" href=\"https:\/\/www.google.com\/url?q=https:\/\/docs.npmjs.com\/files\/package.json&amp;sa=D&amp;ust=1584220289189000\">documenta\u00e7\u00e3o oficial<\/a><\/span><span class=\"c7 c3\">\u00a0\u00e9 um bom in\u00edcio.<\/span><\/p>\n<p class=\"c5\"><span class=\"c3\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Na primeira linha de nosso programa, declaramos que utilizaremos \u00a0o m\u00f3dulo\u00a0<\/span><span class=\"c6 c3 c13\"><a class=\"c8\" href=\"https:\/\/www.google.com\/url?q=https:\/\/www.npmjs.com\/package\/chalk&amp;sa=D&amp;ust=1584220289190000\">Chalk<\/a><\/span><span class=\"c3\">, que auxilia na impress\u00e3o de strings na\u00a0<\/span><span class=\"c24\">CLI<\/span><span class=\"c7 c3\">, fornecendo v\u00e1rias op\u00e7\u00f5es de estiliza\u00e7\u00e3o. Para utiliz\u00e1-lo, \u00a0instalaremos essa depend\u00eancia em nosso projeto com o seguinte comando:<\/span><\/p>\n<table class=\"c37\">\n<tbody>\n<tr class=\"c14\">\n<td class=\"c11\" colspan=\"1\" rowspan=\"1\">\n<p class=\"c18\"><code><span class=\"c3 c46\">\u00a0 \u00a0<\/span><span class=\"c21\">\u00a0<\/span><span class=\"c30\">npm install<\/span><span class=\"c21\">\u00a0chalk@2.0.0 \u00a0<\/span><span class=\"c22\">--save<\/span><\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p class=\"c5\"><span class=\"c3\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Esse comando realiza a instala\u00e7\u00e3o do pacote\u00a0<\/span><span class=\"c3 c13\">Chalk<\/span><span class=\"c3\">\u00a0na vers\u00e3o 2.0.0, buscando-o diretamente no\u00a0<\/span><span class=\"c24\">registro<\/span><span class=\"c3\">, citado anteriormente. Para que essa depend\u00eancia seja diretamente inserida em nosso\u00a0<\/span><span class=\"c26\">package.json<\/span><span class=\"c3\">, utilizamos a flag\u00a0<\/span><span class=\"c26\">&#8211;save<\/span><span class=\"c3\">. Sendo assim, quando compartilharmos nosso projeto, bastar\u00e1 que os usu\u00e1rios de nosso m\u00f3dulo utilizem o comando\u00a0<\/span><span class=\"c25 c30\">npm install<\/span><span class=\"c3\">. Ao execut\u00e1-lo, as depend\u00eancias ser\u00e3o instaladas na pasta\u00a0<\/span><span class=\"c41\">node_modules<\/span><span class=\"c7 c3\">. \u00c9 nela em que todas nossas depend\u00eancias s\u00e3o instaladas pelo npm.<\/span><\/p>\n<p class=\"c5\"><strong><span class=\"c12 c3 c4\">E se as coisas estiverem desatualizadas?<\/span><\/strong><\/p>\n<p class=\"c5\"><span class=\"c3\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Uma das fun\u00e7\u00f5es que a\u00a0<\/span><span class=\"c24\">CLI<\/span><span class=\"c3\">\u00a0nos proporciona \u00e9 a de checar quais depend\u00eancias est\u00e3o desatualizadas. Ao realizarmos a instala\u00e7\u00e3o do\u00a0<\/span><span class=\"c3 c13\">Chalk\u00a0<\/span><span class=\"c7 c3\">anteriormente, acabamos por optar por uma vers\u00e3o um pouco mais desatualizada. Podemos conferir isso executando:<\/span><\/p>\n<table class=\"c37\">\n<tbody>\n<tr class=\"c14\">\n<td class=\"c11\" colspan=\"1\" rowspan=\"1\">\n<p class=\"c18\"><code><span class=\"c21\">\u00a0 \u00a0\u00a0<\/span><span class=\"c22\">npm outdated<\/span><\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p class=\"c5\"><span class=\"c3\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0A sa\u00edda desse comando ir\u00e1 nos mostrar todos os nossos pacotes que est\u00e3o desatualizados, mostrando a vers\u00e3o de cada um que est\u00e1 instalado, junto com sua vers\u00e3o recomendada e tamb\u00e9m a vers\u00e3o mais atualizada. Podemos ent\u00e3o atualizar o pacote\u00a0<\/span><span class=\"c3 c13\">Chalk<\/span><span class=\"c7 c3\">\u00a0com:<\/span><\/p>\n<table class=\"c37\">\n<tbody>\n<tr class=\"c14\">\n<td class=\"c11\" colspan=\"1\" rowspan=\"1\">\n<p class=\"c18\"><code><span class=\"c21\">\u00a0 \u00a0\u00a0<\/span><span class=\"c30\">npm update<\/span><span class=\"c21\">\u00a0chalk\u00a0<\/span><span class=\"c22\">--save<\/span><\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p class=\"c5\"><span class=\"c3\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Lembrando que o pacote \u00e9 atualizado para a \u00faltima vers\u00e3o recomendada, ou seja, que potencialmente n\u00e3o ir\u00e1 causar problemas na execu\u00e7\u00e3o de nossos programas, j\u00e1 que vers\u00f5es mais novas de pacotes podem n\u00e3o ser est\u00e1veis. Tamb\u00e9m utilizamos a flag\u00a0<\/span><span class=\"c26\">&#8211;save<\/span><span class=\"c3\">\u00a0para que nossa depend\u00eancia seja atualizada da forma correta dentro do\u00a0<\/span><span class=\"c26\">package.json<\/span><span class=\"c3\">. Caso quis\u00e9ssemos excluir esse pacote de vez de nosso projeto, poder\u00edamos utilizar o comando<\/span><span class=\"c42\">\u00a0<\/span><span class=\"c30 c25\">npm delete\u00a0<\/span><span class=\"c21 c25\">&lt;nome_do_pacote&gt;<\/span>.<\/p>\n<p class=\"c5\"><strong><span class=\"c3 c4 c12\">Dando asas ao nosso pacote<\/span><\/strong><\/p>\n<p class=\"c5\"><span class=\"c3\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Com nosso pacote j\u00e1 pronto, precisamos public\u00e1-lo! Para isso, a primeira coisa que devemos fazer \u00e9 criar uma conta no\u00a0<\/span><span class=\"c6 c24\"><a class=\"c8\" href=\"https:\/\/www.google.com\/url?q=https:\/\/www.npmjs.com\/signup&amp;sa=D&amp;ust=1584220289198000\">website<\/a><\/span><span class=\"c7 c3\">\u00a0do npm (n\u00e3o esque\u00e7a de verificar seu e-mail para que possa publicar seus pacotes!). Com nossa conta criada, basta executarmos o seguinte comando:<\/span><\/p>\n<table class=\"c37\">\n<tbody>\n<tr class=\"c14\">\n<td class=\"c11\" colspan=\"1\" rowspan=\"1\">\n<p class=\"c18\"><code><span class=\"c21\">\u00a0 \u00a0\u00a0<\/span><span class=\"c22\">npm login<\/span><\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p class=\"c5\"><span class=\"c7 c3\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Ele ir\u00e1 nos pedir nossas credenciais e, preenchendo tudo corretamente, s\u00f3 precisaremos de mais um comando para que nosso projeto seja publicado. Execute:<\/span><\/p>\n<table class=\"c37\">\n<tbody>\n<tr class=\"c14\">\n<td class=\"c11\" colspan=\"1\" rowspan=\"1\">\n<p class=\"c18\"><code><span class=\"c21\">\u00a0 \u00a0\u00a0<\/span><span class=\"c22\">npm publish<\/span><\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p class=\"c5\"><span class=\"c3\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Ap\u00f3s o comando finalizar sua execu\u00e7\u00e3o, tudo estar\u00e1 pronto! O pacote j\u00e1 estar\u00e1 dispon\u00edvel dentro do\u00a0<\/span><span class=\"c24\">registro<\/span><span class=\"c7 c3\">\u00a0npm, podendo ser consultado diretamente no site. Com isso, voc\u00ea j\u00e1 poder\u00e1 criar seus pr\u00f3prios pacotes, manipul\u00e1-los e at\u00e9 mesmo public\u00e1-los. Para mais tutoriais como esse, continue acessando nosso site, pois os PET Reda\u00e7\u00f5es n\u00e3o ir\u00e3o parar!<\/span><\/p>\n<p class=\"c1\"><span class=\"c3\">Para acessar o pacote desenvolvido neste artigo,\u00a0<\/span><span class=\"c6 c3\"><a class=\"c8\" href=\"https:\/\/www.google.com\/url?q=https:\/\/www.npmjs.com\/package\/sum2&amp;sa=D&amp;ust=1584220289202000\">clique aqui<\/a><\/span><span class=\"c7 c3\">.<\/span><\/p>\n<p class=\"c16\">\u00a0<\/p>\n<img decoding=\"async\" title=\"\" src=\"https:\/\/i.ibb.co\/NTfb1YG\/pasted-image-0.png\" alt=\"\" \/>\n<p class=\"c16 c9\">\u00a0<\/p>\n<p class=\"c5\"><span class=\"c12 c3 c4\">Aprendendo ainda mais!<\/span><\/p>\n<p class=\"c5\"><span class=\"c7 c3\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0O npm ainda tem muitas outras fun\u00e7\u00f5es que nem foram exploradas neste artigo, ent\u00e3o por onde voc\u00ea pode continuar?<\/span><\/p>\n<ul class=\"c35 lst-kix_e7k2oaxnkpky-0 start\">\n<li class=\"c5 c19\"><span class=\"c6 c3\"><a class=\"c8\" href=\"https:\/\/www.google.com\/url?q=https:\/\/flaviocopes.com\/npm-packages-local-global\/&amp;sa=D&amp;ust=1584220289203000\">Pacotes locais e globais<\/a><\/span><span class=\"c7 c3\">: al\u00e9m da instala\u00e7\u00e3o local de pacotes que fizemos, tamb\u00e9m \u00e9 poss\u00edvel instalar programas globalmente atrav\u00e9s do npm. Fl\u00e1vio Copes, desenvolver web, detalha bem a diferen\u00e7a entre os dois m\u00e9todos, suas vantagens e desvantagens, al\u00e9m de ensinar como faz\u00ea-los no texto linkado.<\/span><\/li>\n<li class=\"c5 c19\"><span class=\"c6 c3\"><a class=\"c8\" href=\"https:\/\/www.google.com\/url?q=http:\/\/wbruno.com.br\/nodejs\/package-json-entendendo-os-scripts\/&amp;sa=D&amp;ust=1584220289204000\">npm Scripts<\/a><\/span><span class=\"c3\">: lembra-se do campo\u00a0<\/span><span class=\"c2 c25\">&#8220;scripts&#8221;\u00a0<\/span><span class=\"c3\">\u00a0no arquivo\u00a0<\/span><span class=\"c26\">package.json<\/span><span class=\"c3\">? Ele pode ser utilizado para criar automatiza\u00e7\u00f5es para o seu pacote, como uma rotina de testes.<\/span><\/li>\n<li class=\"c5 c19\"><span class=\"c6 c3\"><a class=\"c8\" href=\"https:\/\/www.google.com\/url?q=https:\/\/docs.npmjs.com\/cli\/config&amp;sa=D&amp;ust=1584220289205000\">npm-config<\/a><\/span><span class=\"c3\">: boa parte das fun\u00e7\u00f5es da\u00a0<\/span><span class=\"c24\">CLI\u00a0<\/span><span class=\"c7 c3\">podem ser configuradas, permitindo que seus projetos j\u00e1 iniciem em um ambiente preparado.<\/span><\/li>\n<li class=\"c5 c19\"><span class=\"c6 c3\"><a class=\"c8\" href=\"https:\/\/www.google.com\/url?q=https:\/\/nodejs.dev\/the-npx-nodejs-package-runner&amp;sa=D&amp;ust=1584220289206000\">npx<\/a><\/span><span class=\"c7 c3\">: j\u00e1 pensou em executar pacotes npm sem instal\u00e1-los, podendo at\u00e9 mesmo especificar suas vers\u00f5es? \u00c9 o que esse comando poderos\u00edssimo permite!<\/span><\/li>\n<\/ul>\n<p class=\"c5\"><span class=\"c3\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Al\u00e9m dessas dicas, n\u00e3o deixe de explorar o\u00a0<\/span><span class=\"c24\">registro<\/span><span class=\"c7 c3\">\u00a0atrav\u00e9s do site, j\u00e1 que todos os dias s\u00e3o publicados e atualizados diversos novos projetos!<\/span><\/p>\n<p class=\"c16 c9\">\u00a0<\/p>\n<p class=\"c5\"><span class=\"c12 c3 c4\"><strong>Refer\u00eancias<\/strong>:<\/span><\/p>\n<ul class=\"c35 lst-kix_cb3o2mn3qa52-0 start\">\n<li class=\"c5 c15\"><span class=\"c6 c3\"><a class=\"c8\" href=\"https:\/\/www.google.com\/url?q=https:\/\/docs.npmjs.com\/&amp;sa=D&amp;ust=1584220289207000\">npm Documentation<\/a><\/span><\/li>\n<li class=\"c5 c15\"><span class=\"c6 c3\"><a class=\"c8\" href=\"https:\/\/www.google.com\/url?q=https:\/\/nodejs.org\/en\/knowledge\/getting-started\/npm\/what-is-npm\/&amp;sa=D&amp;ust=1584220289208000\">What is npm?<\/a><\/span><\/li>\n<li class=\"c5 c15\"><span class=\"c6 c3\"><a class=\"c8\" href=\"https:\/\/www.google.com\/url?q=https:\/\/www.youtube.com\/watch?v%3DjHDhaSSKmB0&amp;sa=D&amp;ust=1584220289208000\">npm Crash Course<\/a><\/span><\/li>\n<li class=\"c5 c15\"><span class=\"c6 c3\"><a class=\"c8\" href=\"https:\/\/www.google.com\/url?q=https:\/\/www.impressivewebs.com\/npm-for-beginners-a-guide-for-front-end-developers\/&amp;sa=D&amp;ust=1584220289209000\">npm for Beginner\u2019s: A Guide for Front-end Developers<\/a><\/span><\/li>\n<li class=\"c5 c15\"><span class=\"c6 c3\"><a class=\"c8\" href=\"https:\/\/www.google.com\/url?q=https:\/\/www.sitepoint.com\/beginners-guide-node-package-manager\/&amp;sa=D&amp;ust=1584220289209000\">A Beginner\u2019s Guide to npm &#8211; the Node Package Manager<\/a><\/span><\/li>\n<li class=\"c5 c15\"><span class=\"c6 c3\"><a class=\"c8\" href=\"https:\/\/www.google.com\/url?q=https:\/\/nodejs.org\/en\/about\/&amp;sa=D&amp;ust=1584220289210000\">About Node.js<\/a><\/span><\/li>\n<li class=\"c5 c15\"><span class=\"c6 c3\"><a class=\"c8\" href=\"https:\/\/www.google.com\/url?q=https:\/\/codecondo.com\/evolution-of-web-development\/&amp;sa=D&amp;ust=1584220289210000\">Evolution of Web Development<\/a><\/span><\/li>\n<li class=\"c5 c15\"><span class=\"c3 c6\"><a class=\"c8\" href=\"https:\/\/www.google.com\/url?q=https:\/\/zellwk.com\/blog\/publish-to-npm\/&amp;sa=D&amp;ust=1584220289211000\">How to publish packages to npm<\/a><\/span><\/li>\n<li class=\"c5 c15\"><span class=\"c6 c3\"><a class=\"c8\" href=\"https:\/\/www.google.com\/url?q=https:\/\/60devs.com\/npm-install-specific-version.html&amp;sa=D&amp;ust=1584220289211000\">npm: How to Install Specific Version of a Package<\/a><\/span><\/li>\n<li class=\"c5 c15\"><span class=\"c6 c3\"><a class=\"c8\" href=\"https:\/\/www.google.com\/url?q=https:\/\/www.agiliq.com\/blog\/2019\/01\/using-npm-to-manage-frontend-libraries\/&amp;sa=D&amp;ust=1584220289212000\">Using npm to manage front-end librarie<\/a><\/span><span class=\"c6 c3\"><a class=\"c8\" href=\"https:\/\/www.google.com\/url?q=https:\/\/www.agiliq.com\/blog\/2019\/01\/using-npm-to-manage-frontend-libraries\/&amp;sa=D&amp;ust=1584220289212000\">s<\/a><\/span><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Ao iniciar um novo projeto para\u00a0Web, \u00e9 comum esbarrar em problemas complicados, mas com solu\u00e7\u00f5es proporcionadas por\u00a0frameworks\u00a0ou pacotes independentes facilmente encontrados na primeira pesquisa realizada na internet. Conforme os projetos crescem em dimens\u00e3o e o n\u00famero de m\u00f3dulos aumenta, a organiza\u00e7\u00e3o desses pacotes pode se tornar um verdadeiro desafio. O que fazer quando isso acontece? [&hellip;]<\/p>\n","protected":false},"author":2948,"featured_media":2673,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[124,112],"tags":[184,149,192],"class_list":["post-2674","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-destaques","category-redacao","tag-ferramentas","tag-redacao","tag-web-e-front-end"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/posts\/2674","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/users\/2948"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/comments?post=2674"}],"version-history":[{"count":0,"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/posts\/2674\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/media\/2673"}],"wp:attachment":[{"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/media?parent=2674"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/categories?post=2674"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/tags?post=2674"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}