<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Allynaell - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Aprenda a codificar - de graça. Tutoriais de programação em Python, JavaScript, Linux e muito mais. ]]>
        </description>
        <link>https://www.freecodecamp.org/portuguese/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Allynaell - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/portuguese/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sun, 14 Jun 2026 14:23:42 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/portuguese/news/author/naelldev/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Como configurar um projeto em TypeScript ]]>
                </title>
                <description>
                    <![CDATA[ Escrito por: David Piepgrass Um guia completo para iniciantes que criam aplicações para a web com React Em todos os meus anos como desenvolvedor, nunca encontrei uma selva tão avassaladora quanto o mundo do JavaScript. É um mundo de complexidade desconcertante, onde fazer um simples projeto parece exigir a instalação ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/como-configurar-um-projeto-em-typescript/</link>
                <guid isPermaLink="false">62b4707e87787706fc0ffa64</guid>
                
                    <category>
                        <![CDATA[ TypeScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Allynaell ]]>
                </dc:creator>
                <pubDate>Tue, 01 Nov 2022 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2022/09/1_wyxuq21keffc5b0d_lMkUw.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/how-to-set-up-a-typescript-project-67b427114884/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to set up a TypeScript project</a>
      </p><p>Escrito por: David Piepgrass</p><h4 id="um-guia-completo-para-iniciantes-que-criam-aplica-es-para-a-web-com-react"><strong>Um guia completo para iniciantes que criam aplicações para a web com React</strong></h4><p>Em todos os meus anos como desenvolvedor, nunca encontrei uma selva tão avassaladora quanto o mundo do JavaScript. É um mundo de complexidade desconcertante, onde fazer um simples projeto parece exigir a instalação de inúmeras ferramentas, a edição de vários arquivos de texto que conectam todas essas ferramentas e a execução de muitos comandos de terminal.</p><p>Há algumas ferramentas que tentam esconder a complexidade de você, com vários níveis de sucesso. Porém, enquanto essas ferramentas não tiverem adoção universal, elas me parecem ainda mais coisas que você precisa aprender além de tudo.</p><p>Para mim, a maior fonte de irritação é que a maioria dos tutoriais assume que você <strong>já</strong> <strong>está</strong> familiarizado com o ecossistema. Então, não há uma preocupação com explicar o básico. Para piorar, muitos tutoriais tentam empurrar diversas ferramentas extras para você — como <a href="https://webpack.js.org/" rel="noopener">Webpack</a>, <a href="https://bower.io/" rel="noopener">Bower</a>, <a href="https://github.com/creationix/nvm" rel="noopener">NVM</a> e <a href="https://redux.js.org/" rel="noopener">Redux</a> — com pouca explicação.</p><p>É irônico, porque o próprio JavaScript já está instalado em praticamente todos os computadores do mundo, incluindo celulares. Por que escrever um aplicativo da maneira "profissional" tem que ser tão complexo em comparação com escrever um arquivo HTML com algum código JavaScript nele?</p><p>Se, como eu, você tem a <strong>necessidade inata</strong> de entender o que está acontecendo e:</p><ul><li>se você não suporta copiar comandos cegamente em terminais e arquivos de texto</li><li>se você quiser ter certeza de que precisa de uma ferramenta antes de instalá-la</li><li>se você está se perguntando por que seu projeto baseado em npm tem 50MB antes de escrever sua primeira linha de código</li></ul><p>então, boas-vindas! Você veio ao lugar certo.</p><p>Por outro lado, se você quiser começar a programar em 5 minutos, eu conheço um truque para isso: pule a introdução aqui e comece a ler sobre a <a href="https://medium.com/p/67b427114884#682d" rel="noopener">Abordagem A</a> na seção 2. Se você acha que estou dando muita informação, apenas pule as partes que você não quer aprender à medida que avança.</p><p>Neste tutorial, assumirei que você tem <strong><strong>alguma</strong></strong> experiência de programação com HTML, CSS e JavaScript, mas <strong><strong>nenhuma</strong></strong> experiência com <a href="https://www.typescriptlang.org/" rel="noopener">TypeScript</a>, <a href="https://reactjs.org/" rel="noopener">React</a> ou <a href="https://nodejs.org/en/" rel="noopener">Node.js</a>.</p><p>Darei aqui uma visão geral do ecossistema JavaScript como eu o entendo. Vou explicar por que acho que TypeScript e React (ou <a href="https://preactjs.com/" rel="noopener">Preact</a>) são sua melhor aposta para criar aplicativos da web. Também vou ajudar você a iniciar um projeto sem extras desnecessários.</p><p>Na seção 2, discutiremos como e por que adicionar extras ao seu projeto, <strong><strong>se</strong></strong> você decidir que deseja.</p><h3 id="-ndice"><strong>Índice</strong></h3><p><a href="https://www.freecodecamp.org/portuguese/news/como-configurar-um-projeto-em-typescript/#se-o-1-vis-o-geral-do-ecossistema-javascript">Seção 1: visão geral do ecossistema JavaScript</a></p><p><a href="https://www.freecodecamp.org/portuguese/news/como-configurar-um-projeto-em-typescript/#se-o-2-configurando-o-projeto-de-verdade">Seção 2: configurando o projeto de verdade</a></p><ul><li><a href="https://www.freecodecamp.org/portuguese/news/como-configurar-um-projeto-em-typescript/#etapa-1-instalar-o-node-js-npm">Etapas comuns</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/como-configurar-um-projeto-em-typescript/#executando-seu-projeto-abordagem-a-a-maneira-f-cil">Abordagem A: a maneira fácil</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/como-configurar-um-projeto-em-typescript/#outras-abordagens">Outras abordagens</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/como-configurar-um-projeto-em-typescript/#executando-seu-projeto-abordagem-b-o-caminho-de-poucas-ferramentas">Abordagem B: a maneira do menor número de ferramentas</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/como-configurar-um-projeto-em-typescript/#executando-seu-projeto-abordagem-c-a-maneira-do-webpack">Abordagem C: a maneira do Webpack</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/como-configurar-um-projeto-em-typescript/#voc-terminou-">Resumo</a></li></ul><h3 id="se-o-1-vis-o-geral-do-ecossistema-javascript"><strong>Seção 1: visão geral do ecossistema JavaScript</strong></h3><p>Para muitas linguagens de programação, há uma certa maneira de fazer coisas que todo mundo conhece.</p><p>Por exemplo, se você quiser criar um aplicativo C#, instale o <a href="https://visualstudio.microsoft.com/" rel="noopener">Visual Studio</a>, crie um projeto do Windows Forms com alguns cliques do mouse, clique no botão verde "reproduzir" para executar seu novo programa e comece a escrever código para ele. O gerenciador de pacotes (<a href="https://www.nuget.org/" rel="noopener">NuGet</a>) é interno e o depurador simplesmente funciona. Claro, pode levar algumas horas para instalar o IDE e o <a href="https://docs.microsoft.com/en-us/dotnet/framework/wpf/getting-started/introduction-to-wpf-in-vs" rel="noopener">WPF</a> é tão divertido quanto bater a cabeça contra uma parede de tijolos, mas, pelo menos, é fácil <strong><strong>começar </strong></strong>(exceto se você não estiver usando o Windows, então é totalmente diferente, mas isso já é divagação).</p><p>Em JavaScript, por outro lado, existem muitas bibliotecas e ferramentas concorrentes para quase todos os aspectos do processo de desenvolvimento. Essa enxurrada de ferramentas pode se tornar assustadora antes de você escrever sua primeira linha de código! Quando você busca no Google "como criar uma aplicação para a web", cada site que você visita parece dar conselhos diferentes.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/09/1_IP44ejhk2c78Nt_xUckWbw.png" class="kg-image" alt="1_IP44ejhk2c78Nt_xUckWbw" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/09/1_IP44ejhk2c78Nt_xUckWbw.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/09/1_IP44ejhk2c78Nt_xUckWbw.png 736w" sizes="(min-width: 720px) 720px" width="736" height="905" loading="lazy"><figcaption><em>Obrigado,<em> <a href="https://draw.io/" rel="noopener">draw.io</a></em>, pela ferramenta de diagramação<em>!</em></em></figcaption></figure><p>A única coisa com a qual a maioria das pessoas parece concordar é usar o Node Package Manager (<a href="https://www.npmjs.com/" rel="noopener">NPM</a>) para baixar as bibliotecas do JavaScript (tanto do lado do servidor quanto do lado do navegador). Mesmo aqui, porém, algumas pessoas usam o <a href="https://yarnpkg.com/en/" rel="noopener">Yarn</a>, que é compatível com o npm, ou, possivelmente, o Bower.</p><p>O NPM é fornecido com o Node.js, um servidor da web que você controla inteiramente com código em JavaScript. O NPM é totalmente integrado ao Node. Por exemplo, o comando <code>npm start</code> executa <code>node server.js</code> por padrão.</p><p>Mesmo se você estivesse planejando usar um servidor da web diferente (ou não usar <strong><strong>nenhum</strong></strong> servidor web e apenas clicar duas vezes em um arquivo HTML), todo mundo parece supor que você terá o Node.js instalado. Então, você também pode ir em frente e <a href="https://nodejs.org/en/download/" rel="noopener">instalar o Node.js</a>, que dá a você o <code>npm</code> como um efeito colateral.</p><p>O Node.js não é apenas um servidor da web — ele também pode executar aplicativos de linha de comando escritos em JavaScript. Nesse sentido, o compilador do TypeScript é um aplicativo Node.js!</p><p>Além do NPM, você tem várias opções:</p><h4 id="qual-sabor-de-javascript-voc-quer"><strong>Qual "sabor" de JavaScript você quer?</strong></h4><p>O nome oficial do JavaScript é, na verdade, ECMAScript, e a versão mais amplamente implementada é a ECMAScript 6 ou a ES6. Navegadores antigos, principalmente o Internet Explorer, suportam apenas a ES5.</p><p>A ES6 acrescenta muitos novos recursos úteis e importantes como módulos, let, const, arrow functions (ou funções lambda), classes e atribuição de desestruturação.</p><p>A ES7 adiciona mais alguns recursos, principalmente algo chamado async/await.</p><p>Se você não precisa usar navegadores antigos e se o seu código não é muito grande, executá-lo diretamente no navegador é uma opção atraente, pois você não precisa "compilar" seu JavaScript antes de abri-lo no navegador.</p><p>Há, <strong>porém</strong>, muitas razões para se usar uma etapa de compilação:</p><ul><li>Se você precisar dar suporte a navegadores antigos, precisará de um "transpilador" para poder usar novos recursos de JavaScript em navegadores antigos. Um transpilador é um compilador cujo código de saída é uma linguagem de alto nível – neste caso, JavaScript. Eu diria que o transpilador mais popular é o <a href="https://babeljs.io/" rel="noopener">Babel</a>, com <a href="https://www.typescriptlang.org/" rel="noopener">o TypeScript</a> em segundo lugar.</li><li>Se você quiser usar o framework popular React (mas sem o TypeScript), provavelmente escreverá código em "JSX" — fragmentos de XML dentro de código JavaScript. O JSX não é suportado por navegadores e, portanto, requer um pré-processador (normalmente o Babel).</li><li>Se você quiser "minificar" seu código para que ele use menos largura de banda (ou esteja ofuscado), você precisará de um pré-processador "minificador". <a href="http://typescript-react-primer.loyc.net/minification.html" rel="noopener">Minificadores populares</a> incluem o UglifyJS, o JSMin e o o Closure Compiler.</li><li>Se você quiser verificação de tipo ou autopreenchimento de código de alta qualidade (também conhecido como IntelliSense), você vai querer usar o TypeScript, um superset do JavaScript (o que significa que todo arquivo JavaScript também é um arquivo TypeScript… ostensivamente). O TypeScript suporta recursos do ES7 e do JSX. Sua saída é o código da ES5 ou da ES6. Quando o código TypeScript e JSX são usados ​​juntos, a extensão do arquivo deve ser <code>.tsx</code>. Algumas pessoas estão usando uma linguagem diferente, semelhante em conceito ao TypeScript, chamada Flow.</li><li>Se você não gosta de JavaScript, pode tentar uma linguagem totalmente diferente que transpile para JavaScript, como Elm, ClojureScript ou Dart.</li></ul><p>Felizmente, é possível automatizar a compilação para que seu código seja recompilado sempre que você salvar um arquivo.</p><p>Este tutorial usa TypeScript, um superset de JavaScript com um sistema de tipos abrangente. Os benefícios do TypeScript são:</p><ol><li>Você recebe mensagens de erro do compilador quando comete erros relacionados ao tipo (ao invés de descobrir erros indiretamente quando seu programa se comporta mal). Em IDEs, como o Visual Studio Code, seus erros são sublinhados em vermelho.</li><li>Você pode obter recursos de refatoração. Por exemplo, no Visual Studio Code, pressione <code><strong><strong>F2</strong></strong></code> para renomear uma função ou variável através de múltiplos arquivos, sem afetar outras coisas que tenham o mesmo nome.</li><li>Os tipos permitem que os IDEs forneçam pop-ups de conclusão de código, também conhecidos como IntelliSense, o que torna a programação muito mais fácil, pois você não precisa memorizar todos os nomes e argumentos esperados das funções que você chama:</li></ol><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/09/1_hDqFqucAtKLhDzEpACzsFA.png" class="kg-image" alt="1_hDqFqucAtKLhDzEpACzsFA" width="571" height="206" loading="lazy"><figcaption>IntelliSense™ no Visual Studio Code</figcaption></figure><p><strong><strong>Dica</strong></strong>: para testar o TypeScript sem instalar nada, <a href="http://www.typescriptlang.org/play/" rel="noopener">visite o playground</a>.</p><h4 id="client-x-servidor"><strong>Client x servidor</strong></h4><p>Você pode executar o código em um client (navegador em front-end), em um servidor (Node.js no back-end) ou em ambos. O client não está sob seu controle. O usuário pode usar Firefox, Chrome, Safari, Opera, Edge ou, no pior caso, o Internet Explorer.</p><p>Por questões de segurança, mantenha em mente que o usuário pode modificar o comportamento do navegador usando extensões ou as ferramentas do desenvolvedor (<code><strong><strong>F12</strong></strong></code>). Você nem pode ter certeza de que o seu código está sendo executado em um navegador real.</p><p>Os desenvolvedores costumavam confiar na biblioteca <a href="https://jquery.com/" rel="noopener">jQuery</a> para obter um comportamento consistente em diferentes navegadores, mas, hoje em dia, você pode contar com o fato de os navegadores diferentes se comportarem da mesma maneira na <strong><strong>m</strong>aioria</strong> dos casos (exceto, talvez, o Internet Explorer).</p><p>Neste tutorial, executaremos todos os códigos importantes no navegador, mas também configuraremos um servidor Node.js simples para fornecer o aplicativo ao navegador. Muitos outros servidores estão disponíveis, como <a href="https://httpd.apache.org/" rel="noopener">Apache</a>, <a href="https://www.iis.net/" rel="noopener">IIS</a> ou um servidor estático, como o <a href="https://jekyllrb.com/" rel="noopener">Jekyll</a>.</p><p>O Node.js, porém, se tornou uma espécie de padrão, provavelmente porque o Node.js e o NPM estão empacotados juntos.</p><h4 id="frameworks-de-interface-do-usu-rio"><strong>Frameworks de interface do usuário</strong></h4><p>O HTML e o CSS, por si só, são ótimos para os velhos artigos com imagens ou formulários simples. Se isso é tudo o que você está fazendo, provavelmente não há necessidade de usar o JavaScript. O CSS pode até fazer algumas coisas que antes exigiam JavaScript, como <a href="https://www.cssscript.com/pure-css-mobile-compatible-responsive-dropdown-menu/" rel="noopener">menus suspensos</a>, páginas que <a href="https://developer.mozilla.org/pt-BR/docs/Web/CSS/Media_Queries/Using_media_queries">se reformatam completamente para navegadores pequenos/de dispositivos móveis ou impressão</a> e <a href="https://developer.mozilla.org/pt-BR/docs/Web/CSS/CSS_Animations/Using_CSS_animations">animações</a>.</p><p>Se você precisar de algo mais complexo do que isso ou se suas páginas forem geradas dinamicamente a partir de dados brutos, você provavelmente desejará usar JavaScript com uma biblioteca ou framework de interface de usuário opcional. Mostrarei <a href="http://typescript-react-primer.loyc.net/tutorial-5.html" rel="noopener">mais tarde</a> (texto em inglês) como usar o React, que conquistou uma posição como o framework de interface do usuário mais popular, e seu primo, o Preact.</p><p>As <a href="https://stateofjs.com/2017/front-end/results" rel="noopener">alternativas populares</a> "grandes" (texto em inglês) incluem <a href="https://angular.io/" rel="noopener">Angular</a> e <a href="https://vuejs.org/" rel="noopener">Vue.js</a>, enquanto as "pequenas" incluem <a href="https://d3js.org/" rel="noopener">D3</a>, <a href="https://mithril.js.org/" rel="noopener">Mithril</a> e um antigo clássico chamado jQuery.</p><p>Se o seu servidor da web executa JavaScript (Node.js), você pode executar o React no servidor para pré-gerar a aparência inicial da página.</p><h4 id="ferramentas-de-constru-o"><strong>Ferramentas de construção</strong></h4><p>Várias <a href="https://stateofjs.com/2017/build-tools/results" rel="noopener">ferramentas para "construir" e "empacotar" seu código</a> (texto em inglês) estão disponíveis — Webpack, <a href="https://gruntjs.com/" rel="noopener">Grunt</a>, <a href="http://browserify.org/" rel="noopener">Browserify</a>, <a href="https://gulpjs.com/" rel="noopener">Gulp</a>, <a href="https://parceljs.org/" rel="noopener">Parcel</a> — mas todas essas coisas são opcionais. Eu mostrarei a você como fazer isso apenas com o <code>npm</code> e, se você quiser, Parcel ou Webpack.</p><h4 id="sabores-do-css"><strong>"Sabores" do CSS</strong></h4><p>Neste artigo, usaremos CSS simples. Se você vai ter uma etapa de compilação de qualquer maneira, pode querer experimentar o SCSS, um derivado "melhorado" do CSS com recursos extras. Você também pode usar o SASS, que é, conceitualmente, idêntico ao SCSS, mas tem uma sintaxe mais concisa.</p><p>De qualquer forma, você precisará do <a href="https://sass-lang.com/" rel="noopener">pré-processador SASS</a>. E, como sempre no mundo JavaScript, existem <a href="https://stateofjs.com/2017/css/results/" rel="noopener">várias alternativas</a> (texto em inglês), especialmente o <a href="http://lesscss.org/" rel="noopener">LESS</a>.</p><h4 id="teste-unit-rio"><strong>Teste unitário</strong></h4><p>As bibliotecas de teste unitário populares são <a href="https://mochajs.org/" rel="noopener">Mocha</a>, <a href="https://jasmine.github.io/" rel="noopener">Jasmine</a> e <a href="https://jestjs.io/" rel="noopener">Jest</a>. <a href="https://stateofjs.com/2017/testing/results" rel="noopener">Saiba mais aqui</a> (texto em inglês). O NPM tem um comando especial para teste, <code>npm test</code> (que é a abreviação para <code>npm run test</code>).</p><h4 id="outras-bibliotecas"><strong>Outras bibliotecas</strong></h4><p>Além do Redux, <a href="https://stateofjs.com/2017/other-tools/" rel="noopener">outras</a> bibliotecas populares de JavaScript (texto em inglês) incluem <a href="https://lodash.com/" rel="noopener">Lodash</a>, <a href="https://ramdajs.com/" rel="noopener">Ramda</a>, <a href="https://underscorejs.org/" rel="noopener">Underscore</a> e <a href="https://graphql.org/" rel="noopener">GraphQL</a>.</p><p>O utilitário de linting mais popular é 0 <a href="https://eslint.org/" rel="noopener">ESLint</a>.</p><p><a href="https://getbootstrap.com/" rel="noopener">Bootstrap</a> é uma biblioteca CSS popular mas requer uma parte de JavaScript (e é realmente SASS, não CSS).</p><p>Quando você vê <code>$</code> no código JavaScript, normalmente se refere ao jQuery. Quando você vê <code>_</code>, normalmente se refere a Lodash ou Underscore.</p><p>Talvez valha a pena mencionar bibliotecas populares de templates: <a href="http://jade-lang.com/" rel="noopener">Jade</a>, <a href="https://pugjs.org/" rel="noopener">Pug</a>, <a href="https://mustache.github.io/" rel="noopener">Mustache</a> e <a href="https://handlebarsjs.com/" rel="noopener">Handlebars</a>.</p><h4 id="aplicativos-que-n-o-sejam-da-web"><strong>Aplicativos que não sejam da web</strong></h4><p>Não direi mais nada sobre isso, mas TypeScript e JavaScript podem ser usados ​​fora da web.</p><p>Com <a href="https://electronjs.org/" rel="noopener">Electron</a>, você pode escrever aplicativos de desktop multiplataforma. Com <a href="https://electronjs.org/" rel="noopener">React Native</a>, você pode escrever aplicativos JavaScript para dispositivos Android/iOS que tenham uma interface de usuário “nativa”. Você também pode escrever <a href="https://scotch.io/tutorials/build-an-interactive-command-line-application-with-nodejs" rel="noopener">aplicativos de linha de comando com Node.js</a>.</p><h4 id="tipos-de-m-dulo"><strong>Tipos de módulo</strong></h4><p>Por muito tempo, todo o código JavaScript foi executado em um único namespace global. Isso causou conflitos entre bibliotecas de código não relacionadas, então vários tipos de "definições de módulo" foram inventados para <strong><strong>simular</strong></strong> o que outras linguagens chamam de pacotes ou módulos.</p><p>O Node.js usa módulos <a href="https://pt.wikipedia.org/wiki/CommonJS">CommonJS</a>, que envolvem uma função mágica chamada <code>require('module-name')</code> para importar módulos e uma variável mágica chamada <code>module.exports</code> para criar módulos. Para escrever módulos que funcionem tanto em navegadores quanto em Node.js, pode-se usar o Universal Module Definition (módulos <a href="https://github.com/umdjs/umd" rel="noopener">UMD</a>). Módulos que podem ser carregados de forma assíncrona usam <a href="https://github.com/amdjs/amdjs-api/wiki/AMD" rel="noopener">AMD</a>.</p><p>O ES6 introduziu um sistema de módulo envolvendo as palavras-chave <code>import</code> e <code>export</code>, mas o Node.js e alguns navegadores ainda não o suportam. Aqui está uma <a href="https://www.jvandemo.com/a-10-minute-primer-to-javascript-modules-module-formats-module-loaders-and-module-bundlers/" rel="noopener">cartilha sobre os vários tipos de módulos</a> (texto em inglês).</p><h4 id="polyfills-e-prot-tipos"><strong>Polyfills e protótipos</strong></h4><p>Como um desenvolvedor experiente, consigo pensar em apenas duas palavras (além dos nomes de bibliotecas e ferramentas) que são usadas apenas na terra do JavaScript: <strong><strong>polyfill</strong></strong> e <strong><strong>prototype</strong></strong>.</p><p>Polyfills são auxiliares de compatibilidade com versões anteriores. Eles são pedaços do código escritos em JavaScript que permitem usar novos recursos em navegadores antigos. Por exemplo, a expressão <code>"food".startsWith('F')</code> testa se a string <code>'food'</code> começa com F (para constar, isso é <code>false</code> - ela começa com <code>f</code>, não <code>F</code>.) <code>startsWith</code>, porém, é um recurso novo do JavaScript que não está disponível em navegadores mais antigos.</p><p>Você pode "polipreenchê-lo" com este código:</p><pre><code>String.prototype.startsWith = String.prototype.startsWith ||  function(search, pos) {    return search ===       this.substr(!pos || pos &lt; 0 ? 0 : +pos, search.length);  };</code></pre><p>Ele tem a forma <code>X = X || function(...) {...}</code>, que significa "se X estiver definido, defina X para si mesmo (não o altere), caso contrário, defina X para ser esta função". A função mostrada aqui se comporta da maneira que <code>startsWith</code> deveria.</p><p>O código refere-se a uma das outras coisas únicas sobre JavaScript, a ideia de protótipos. Os protótipos correspondem <strong><strong>aproximadamente</strong></strong> a classes em outras linguagens. Portanto, o que esse código está fazendo é, na verdade, alterar a definição dos tipos de dados <code>String</code>. Depois, quando você escrever <code>'string'.startsWith()</code>, ele chamará esse polyfill (se <code>String.prototype.startsWith</code> ainda não estiver definido). Há vários artigos por aí para ensinar sobre protótipos e herança prototípica, como <a href="https://hackernoon.com/understanding-javascript-prototype-and-inheritance-d55a9a23bde2" rel="noopener">este</a> (texto em inglês).</p><p>Até mesmo alguns recursos avançados do navegador têm polyfills. Você já ouviu falar do <a href="https://webassembly.org/" rel="noopener">WebAssembly</a>, que permite executar código C e C++ no navegador? Existe um <a href="https://github.com/lukewagner/polyfill-prototype-1" rel="noopener">polyfill JavaScript</a> para isso!</p><h4 id="cr-dito"><strong>Crédito</strong></h4><p>Gostaria de agradecer às pesquisas <a href="https://stateofjs.com/" rel="noopener">State of Javascript</a> e <a href="https://www.npmjs.com/npm/the-state-of-javascript-frameworks-2017-part-2-the-react-ecosystem" rel="noopener">State of JavaScript Frameworks</a> (textos em inglês) por muitas das informações acima! Para alguns itens, usei <a href="https://npm-stat.com/" rel="noopener">npm-stat</a> para medir popularidade. Veja também esta <a href="https://ashleynolan.co.uk/blog/frontend-tooling-survey-2018-results" rel="noopener">outra nova pesquisa</a> (texto em inglês).</p><h3 id="se-o-2-configurando-o-projeto-de-verdade"><strong>Seção 2: configurando o projeto de verdade</strong></h3><p>Ei! Ainda acordado? Agora, faremos uma tour pelo ecossistema de ferramentas JavaScript. Esta parte não é sobre o React (falaremos disso <a href="http://typescript-react-primer.loyc.net/tutorial-5.html" rel="noopener">mais tarde</a> - novamente, texto em inglês), mas inclui um componente do React simples.</p><p>Esta é uma tour <strong><strong>grande</strong></strong>. Então, falaremos sobre como escrever seu aplicativo de três maneiras diferentes (com um <a href="http://typescript-react-primer.loyc.net/tutorial-3.html" rel="noopener">resumo</a> depois):</p><ul><li>A. a forma mais fácil (com Parcel)</li><li>B. a forma com menos ferramentas (ou o modo faça-você-mesmo)</li><li>C. a forma do Webpack</li></ul><p>As primeiras seis etapas são as mesmas em todas as três abordagens. Então, vamos começar!</p><h4 id="etapa-1-instalar-o-node-js-npm"><strong>Etapa 1: instalar o Node.js/npm</strong></h4><p>Se você ainda não o fez, <a href="https://nodejs.org/en/download/" rel="noopener">instale o Node.js</a>, que também instalará o gerenciador de pacotes de linha de comando, <code>npm</code>.</p><p>Se você deseja implantar seu aplicativo em algum outro servidor da web, recomendo se preocupar em como fazer isso mais tarde.</p><h4 id="etapa-2-instalar-o-visual-studio-code-ou-outro-editor"><strong>Etapa 2: instalar o Visual Studio Code ou outro editor</strong></h4><p>Uma das principais razões para usar o TypeScript ao invés do JavaScript é que ele suporta recursos de conclusão de código.</p><p>Para aproveitar esse benefício, você precisará editar seus arquivos TypeScript <code>.ts</code> em um editor compatível, como o <a href="https://code.visualstudio.com/download" rel="noopener">Visual Studio Code</a> — que é gratuito e multiplataforma. É também o editor de texto mais popular para aplicativos JavaScript. As alternativas incluem o <a href="https://atom.io/" rel="noopener">Atom</a> e o <a href="https://www.sublimetext.com/" rel="noopener">Sublime Text</a>.</p><p>O Visual Studio Code (VS Code) é orientado a pastas: você abre uma pasta no VS Code e essa pasta será tratada como o "projeto" atual. Durante a instalação (no Windows, pelo menos) ele oferecerá uma caixa de seleção para adicionar uma ação "Abrir com o Code" para pastas (diretórios). Eu recomendo usar essa opção como uma maneira fácil de iniciar o VS Code de qualquer pasta:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/09/0_g75_7UBpUFqxHqwo.png" class="kg-image" alt="0_g75_7UBpUFqxHqwo" width="513" height="398" loading="lazy"></figure><p>Crie uma pasta vazia para seu aplicativo e abra essa pasta no VS Code. Observe que o VS Code possui um terminal integrado. Portanto, você não precisará de uma janela de terminal separada.</p><h4 id="etapa-3-configurar-o-package-json"><strong>Etapa 3: configurar o package.json</strong></h4><p>O arquivo <code>package.json</code> representará a configuração do seu projeto. Isso inclui seu nome, comandos de compilação, a lista de módulos do npm usados ​​pelo seu projeto e muito mais.</p><p>Se você ainda não fez isso, crie uma pasta vazia para seu aplicativo e abra uma janela de terminal nessa pasta.</p><p>No terminal, execute <code>npm init</code>.</p><p>O <code>npm init</code> fará algumas perguntas para produzir o <code>package.json</code>. Deixe um campo em branco para aceitar a sugestão padrão.</p><p>Eu queria fazer um pequeno aplicativo educacional para desenhar alguns gráficos demonstrando como a ciência climática explica o registro de temperatura do século 20.</p><p>Então, eu chamei meu aplicativo de <code>climate-app</code>:</p><pre><code>C:\Dev\climate-app&gt;npm initThis utility will walk you through creating a package.json file.It only covers the most common items, and tries to guess sensible defaults.[....]</code></pre><pre><code>package name: (climate-app)version: (1.0.0)description: Demo to visualize climate dataentry point: (index.js) test command:git repository:keywords:author: David Piepgrasslicense: (ISC) MIT</code></pre><pre><code>About to write to C:\Dev\climate-app\package.json:{  "name": "climate-app",  "version": "1.0.0",  "description": "Demo to visualize climate data",  "main": "index.js",  "scripts": {    "test": "echo \"Error: no test specified\" &amp;&amp; exit 1"  },  "author": "David Piepgrass",  "license": "MIT"}</code></pre><pre><code>Is this ok? (yes)</code></pre><p>Observe a referência a <code>index.js</code>. Estranhamente, esse arquivo não precisa existir e não o usaremos. Ele é usado apenas <a href="https://stackoverflow.com/a/27971810/22820" rel="noopener">se você compartilhar seu código via npm</a>.</p><h4 id="etapa-4-instalar-o-typescript"><strong>Etapa 4: instalar o Typescript</strong></h4><p>O VS Code <a href="https://code.visualstudio.com/docs/languages/typescript" rel="noopener">supostamente</a> (texto em inglês) tem "suporte à linguagem" TypeScript em vez de um <strong><strong>compilador</strong></strong> TypeScript. Então, agora, precisamos instalar o compilador.</p><p>Existem duas maneiras de instalar o TypeScript com npm. Use</p><pre><code>npm install --global typescript</code></pre><p>ou</p><pre><code>npm install --save-dev typescript</code></pre><p>Se você usar a opção <code>--global</code>, o compilador de TypeScript <code>tsc</code> estará disponível em todos os projetos na mesma máquina. Ele também estará disponível como um comando de terminal, mas não será adicionado ao seu arquivo <code>package.json</code>. Portanto, se você compartilhar seu código com outras pessoas, o TypeScript <strong><strong>não</strong></strong> será instalado quando outra pessoa obtiver seu código e executar <code>npm install</code>.</p><p>Se você usar <code>--save-dev</code>, o TypeScript será adicionado ao <code>package.json</code> e instalado na pasta <code>node_modules</code> do seu projeto (tamanho atual: 34,2 MB), mas <strong><strong>não</strong></strong> estará disponível diretamente como um comando de terminal.</p><p>Você ainda pode executá-lo a partir do terminal como <code>./node_modules/.bin/tsc</code>, e ainda pode usar <code>tsc</code> dentro da seção <code>npm</code> <code>"scripts"</code> do <code>package.json</code>.</p><p><strong>Curiosidade</strong>: o compilador TypeScript é multiplatforma porque é escrito em TypeScript — e compilado para JavaScript.</p><h4 id="etapa-5-instalar-react-ou-preact"><strong>Etapa 5: instalar React ou Preact</strong></h4><p>Para adicionar o React ao seu projeto:</p><pre><code>npm install react react-domnpm install --save-dev @types/react @types/react-dom</code></pre><p><strong>Observação<strong>: </strong></strong><code>--save-dev</code> marca as coisas como "usadas para desenvolvimento", enquanto <code>--save </code> (que é o padrão e, portanto, opcional) significa "usado pelo programa quando é implantado".</p><p>Pacotes <code>@types</code> fornecem informações de tipo para o TypeScript, mas não são usados ​​quando seu código está em execução/implantado.</p><p>Se você esquecer <code>--save-dev</code> ou se você o utilizar no pacote errado, <strong><strong>seu projeto ainda funcionará</strong></strong>. A distinção só é importante se você compartilhar seu projeto como um pacote do npm.</p><p>Como alternativa, você pode usar o Preact, que é <a href="https://preactjs.com/guide/differences-to-react" rel="noopener">quase o mesmo</a> que o React (texto em inglês), mas mais de 10 vezes menor. O Preact possui definições de tipo TypeScript incorporadas. Portanto, você só precisa de um único comando para instalá-lo:</p><pre><code>npm install preact</code></pre><p><strong>Dica<strong>:</strong></strong> <code>npm i</code> é um atalho para <code>npm install</code>, e <code>-D</code> é uma abreviação para <code>--save-dev</code>.</p><p><strong>Observação<strong>:</strong></strong> não instale <code>preact</code> e <code>@types/react</code> no mesmo projeto, ou o <code>tsc</code> vai enlouquecer e dar cerca de 150 erros (veja a <a href="https://github.com/developit/preact/issues/639" rel="noopener">preact issue #639</a> - texto em inglês). Se isso acontecer, desinstale os tipos do React com <code>npm uninstall @types/react @types/react-dom</code></p><h4 id="etapa-6-escrever-c-digo-em-react"><strong>Etapa 6: escrever código em React</strong></h4><p>Faça um arquivo chamado <code>app.tsx</code> com este pequeno programa em React:</p><p><strong>Observação<strong>:</strong></strong> para que o JSX incorporado (HTML/XML) funcione, a extensão do arquivo deve ser <code>tsx</code>, não <code>ts</code>.</p><p>Se você tiver algum problema para fazer seu código funcionar, tente este código — é o programa React mais simples possível:</p><pre><code>import * as ReactDOM from 'react-dom';import * as React from 'react';</code></pre><pre><code>ReactDOM.render(React.createElement("h2", null, "Hello, world!"),                document.body);</code></pre><p>Discutiremos como o código funciona mais tarde. Por enquanto, vamos nos concentrar em fazê-lo funcionar.</p><p>Se você estiver usando o Preact, altere as duas primeiras linhas assim:</p><pre><code>import * as React from 'preact';import * as ReactDOM from 'preact';</code></pre><p>Algumas observações sobre o Preact:</p><ul><li>Existe uma <a href="https://github.com/developit/preact-compat" rel="noopener">biblioteca preact-compat</a> que permite que você use o preact com zero alterações no seu código React. Existem instruções de uso para usuários do Webpack/Browserify/Babel/Brunch, e <a href="https://github.com/parcel-bundler/parcel/pull/850" rel="noopener">essa página</a> mostra como usar preact-compat com Parcel.</li><li>Há rumores de que, no Preact, você deve escrever <code>/** @jsx h */</code> no topo do arquivo, que diz ao TypeScript para chamar <code>h()</code> ao invés do <code>React.createElement</code> padrão. Nesse caso, você <strong><strong>não deve</strong></strong> fazer isso ou receberá um erro no seu navegador, dizendo que <code>h</code> não está definido (<code>React.h</code>, muito embora esteja). Na verdade, Preact define <code>createElement</code> como um alias para <code>h</code>. Como nossa declaração <code>import</code> atribui <code>'preact'</code> para <code>React</code>, <code>React.createElement</code> existe e funciona muito bem.</li></ul><h4 id="opcional-executando-scripts-em-typescript"><strong>Opcional: executando scripts em TypeScript</strong></h4><p>Este tutorial está focado em criar <strong><strong>páginas da Web</strong></strong> que executam código em TypeScript. Se você deseja executar um arquivo TypeScript diretamente do prompt de comando, a maneira mais fácil é usar o <code>ts-node</code>:</p><pre><code>npm install --global ts-node</code></pre><p>Depois de instalar o <code>ts-node</code>, execute <code>ts-node X.ts</code>, onde <code>X.ts</code> é o nome de um script que você deseja executar. No script, você pode chamar <code>console.log("Hello")</code> para escrever texto no terminal (ler texto de um usuário é <a href="https://nodejs.org/api/readline.html#apicontent" rel="noopener">mais complicado</a> - texto em inglês). Em sistemas Linux, você pode colocar um “shebang” no topo do script se quiser executar <code>./X.ts</code> diretamente (sem mencionar o <code>ts-node</code>):</p><pre><code>#!/usr/bin/env ts-node</code></pre><p><strong>Observação<strong>:</strong></strong> se você não precisar executar arquivos <code>.ts</code> de um terminal, não precisará instalar o <code>ts-node</code>.</p><h3 id="executando-seu-projeto-abordagem-a-a-maneira-f-cil"><strong>Executando seu projeto – Abordagem A: a maneira fácil</strong></h3><p>Descobri o Parcel quando terminei de escrever este artigo. Honestamente, se eu soubesse do Parcel desde o início, talvez não tivesse me incomodado em escrever sobre as outras abordagens. É impressionante a facilidade de usar o Parcel! Merece uma medalha!</p><p>No entanto, ele é muito grande (81,9 MB). Então, você deve instalá-lo como global:</p><pre><code>npm install --global parcel-bundler</code></pre><p>A verdade é que eu tenho mentido para você. Parcel é <strong>tã<strong>o</strong></strong> fácil que você nem precisa de todos os seis passos acima! Você realmente só precisa das etapas 1, 2 e 6 (instalar o Node, instalar um editor e escrever código) porque o Parcel fará as etapas 3, 4 e 5 para você automaticamente.</p><p>Então, tudo o que temos que fazer agora é criar um arquivo <code>index.html</code> que se refira ao nosso arquivo <code>app.tsx</code>, como esse:</p><p>Em seguida, simplesmente abra um terminal na mesma pasta e execute o comando <code>parcel index.html</code>.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/09/0_xgfsNFJwzrxfbxEL.png" class="kg-image" alt="0_xgfsNFJwzrxfbxEL" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/09/0_xgfsNFJwzrxfbxEL.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/09/0_xgfsNFJwzrxfbxEL.png 692w" width="692" height="379" loading="lazy"></figure><p>Isso não pode ser executado diretamente em um navegador, é claro. Então, o Parcel:</p><ol><li>Compila o <code>app.tsx</code> automaticamente</li><li>Instala o React ou Preact se ainda não estiver instalado, pois percebe que você está usando</li><li>Agrupa seu aplicativo com suas dependências em um único arquivo chamado <code>app.dd451710.js</code> (ou algum outro nome parecido e engraçado)</li><li>Cria um <code>index.html</code> modificado que se refere ao aplicativo compilado e empacotado</li><li>Coloca esses novos arquivos em uma pasta chamada <code>dist</code>.</li></ol><p>Depois, ele faz todo o resto para você:</p><ol><li>Ele executa seu aplicativo em um minisservidor da web em <code>http://127.0.0.1:1234</code> — visível em um navegador na mesma máquina</li><li>Ele observa as alterações no seu código (<code>app.tsx</code> e <code>index.html</code>) e recompila quando você as altera</li><li>Como se isso não bastasse, quando seus arquivos forem alterados, ele enviará um comando ao seu navegador para <strong><strong>atualizar automaticamente!</strong></strong></li><li>Melhor ainda, ele atualiza a página sem recarregá-la totalmente usando seu recurso <a href="https://parceljs.org/languages/vue/#hmr">Hot Module Replacement</a></li></ol><p>Pode ser um desafio configurar uma construção convencional que faça todas essas coisas. Este tutorial cobre apenas como fazer o nº 1 e o nº 2 em uma compilação convencional, apenas com recompilação de código (não em HTML).</p><p>Para saber mais sobre os recursos do Parcel, consulte a <a href="https://parceljs.org/getting_started.html" rel="noopener">documentação do Parcel</a>.</p><p>Uma limitação do Parcel é que ele não realiza verificação de tipo (seu código é traduzido para JavaScript, mas erros de tipo não são detectados).</p><p>Para projetos pequenos, isso não é um grande problema, pois o Visual Studio Code executa sua própria verificação de tipo. Ele fornece sublinhados ondulados vermelhos para indicar erros e todos os erros são listados no painel "Problemas" (pressione <code><strong><strong>Ctrl</strong></strong></code>+<code><strong><strong>Shift</strong></strong></code>+<code><strong><strong>M</strong></strong></code> para mostrá-lo). Se você quiser, porém, pode executar <code>npm install parcel-plugin-typescript</code> para obter <a href="https://www.npmjs.com/package/parcel-plugin-typescript#features" rel="noopener">suporte aprimorado ao TypeScript</a>, incluindo checagem de tipo (<a href="https://github.com/fathyb/parcel-plugin-typescript/issues/43" rel="noopener">não está funcionando atualmente para mim</a>).</p><h3 id="outras-abordagens"><strong>Outras abordagens</strong></h3><p>As outras abordagens são mais conhecidas e são práticas padrão na comunidade JavaScript. Estaremos criando uma pasta com os seguintes arquivos dentro dela:</p><ul><li><code><strong><strong>app/</strong></strong>index.html</code></li><li><code><strong><strong>app/</strong></strong>app.tsx</code></li><li><code>package.json</code></li><li><code>tsconfig.json</code></li><li><code>server.js</code></li><li><code>webpack.config.js</code> (opcional)</li></ul><p>Por uma questão de comunicação com outras pessoas que examinam seu código posteriormente, é útil separar o <strong><strong>código</strong> do<strong> front-end</strong></strong> do seu programa de sua <strong><strong>configuração de compilação</strong></strong> e <strong><strong>servidor de aplicativos</strong></strong>.</p><p>A pasta raiz de um projeto tende a ficar cheia de arquivos adicionais com o passar do tempo (assim como <code>.gitignore</code> se você usa git, arquivos <code>README</code> e <code>LICENSE</code>, arquivos <code>appveyor</code>/<code>travis</code> se você usa <a href="https://en.wikipedia.org/wiki/Continuous_integration" rel="noopener">integração contínua</a>.) Portanto, devemos separar o código do nosso front-end em uma pasta diferente.</p><p>Em adição aos arquivos que <strong>nós</strong> criamos, o TypeScript compilará <code>app.tsx</code> em <code>app.js</code> e <code>app.js.map</code>, enquanto o <code>npm</code> criará uma pasta chamada <code>node_modules</code> e um arquivo chamado <code>package-lock.json</code>. Não consigo imaginar a razão de se chama "lock", mas <a href="https://medium.com/@Quigley_Ja/everything-you-wanted-to-know-about-package-lock-json-b81911aa8ab8" rel="noopener">esta página explica porque isso existe</a> (em inglês).</p><p>Então, comece criando uma pasta <code>app</code> e colocando seu <code>app.tsx</code> lá.</p><h3 id="executando-seu-projeto-abordagem-b-o-caminho-de-poucas-ferramentas"><strong>Executando seu projeto – Abordagem B: o caminho de poucas ferramentas</strong></h3><p>Parece que o projeto JavaScript de todo mundo usa uma dúzia de ferramentas além da pia da cozinha. É possível fazer um pequeno programa sem ferramentas extras? Certamente é! Aqui está como.</p><h4 id="etapa-b1-criar-o-tsconfig-json"><strong>Etapa B1: criar o tsconfig.json</strong></h4><p>Crie um arquivo de texto chamado <code>tsconfig.json</code> na sua pasta raiz.</p><p>Este arquivo marca a pasta como um projeto TypeScript e habilita comandos de compilação no VSCode com <code><strong><strong>Ctrl</strong></strong></code>+<code><strong><strong>Shift</strong></strong></code>+<code><strong><strong>B</strong></strong></code> (o comando <code>tsc: watch</code> é útil — ele recompilará automaticamente seu código sempre que você o salvar).</p><p><strong>Detalhe</strong>: o <code>tsc</code> permite comentários em arquivos <code>.json</code>, mas o <code>npm</code> não.</p><p>Este arquivo é muito importante, pois se as configurações não estiverem corretas, algo pode dar errado e erros misteriosos ocorrer. Aqui está a <a href="https://www.typescriptlang.org/docs/handbook/tsconfig-json.html" rel="noopener">documentação do tsconfig.json</a>, mas as opções do compilador são <a href="https://www.typescriptlang.org/docs/handbook/compiler-options.html" rel="noopener">documentadas separadamente</a>.</p><h4 id="etapa-b2-adicionar-um-script-de-compila-o"><strong>Etapa B2: adicionar um script de compilação</strong></h4><p>Para permitir o <code>npm</code> compilar seu código TypeScript, você também deve adicionar entradas na parte <code>scripts</code> do <code>package.json</code>. Modifique essa seção para que fique assim:</p><pre><code>"scripts": {  "test": "echo \"Error: no tests installed\" &amp;&amp; exit 1",  "build": "tsc",  "start": "node server.js"},</code></pre><p>O <code>build</code> script simplesmente executa <code>tsc</code>, que compila seu código de acordo com as opções em <code>tsconfig.json.</code> Para invocar este script, você escreve <code>npm run build</code> na linha de comando.</p><p>"Espere aí!", você deve estar pensando. "É muito mais fácil digitar <code>tsc</code> do que <code>npm run build</code>!" Isso é verdade, mas existem duas razões para definir um <code>build</code> script:</p><ol><li>Se você instalou o TypeScript com <code>--save-dev</code> mas não <code>--global</code>, você não pode executar <code>tsc</code> diretamente da linha de comando porque ele não está no <code>PATH</code>.</li><li>Há uma boa chance de seu processo de compilação se tornar mais complicado posteriormente. Ao criar um script de compilação, você pode adicionar facilmente outros comandos ao processo de compilação posteriormente.</li></ol><p><strong>Observação<strong>:</strong></strong> &nbsp;o <code>npm</code> executa o script <code>prestart</code> automaticamente sempre que alguém executa o script <code>start</code>. Então, você <strong>pode</strong> acrescentar um script adicional:</p><pre><code>"prestart": "npm run build",</code></pre><p>Isso compilaria seu projeto sempre que você iniciasse seu servidor com <code>npm start</code> ou <code>npm run start</code>.</p><p>Há, porém, duas desvantagens:</p><ol><li>o <code>tsc</code> é um pouco lento</li><li>se o <code>tsc</code> encontrar erros de tipo, seu servidor não iniciará</li></ol><p>Quando o TypeScript detecta erros de tipo, isso não o impede de gravar arquivos de saída JavaScript, e você pode achar isso útil de vez em quando para executar seu código mesmo com erros de tipo.</p><p>O comportamento padrão do <code>npm start</code> é executar <code>node server.js</code>. Então, parece redundante incluir <code>"start": "node server.js"</code>. No entanto, se o seu servidor estiver escrito em TypeScript, você precisará dessa linha, pois o arquivo <code>server.js</code> não existe até que o <code>server.ts</code> seja compilado. Se o <code>server.js</code> não existir, o <code>npm start</code> dará o erro <code>missing script: start</code>, a não ser que você inclua essa linha.</p><h4 id="etapa-b3-fazer-um-servidor-simples"><strong>Etapa B3: fazer um servidor simples</strong></h4><p>Para garantir que o Node.js esteja funcionando, crie um arquivo de texto chamado <code>server.js</code> e coloque este código nele:</p><pre><code>const http = require('http');</code></pre><pre><code>http.createServer(function (request, response) {  // Send HTTP headers and body with status 200 (meaning success)  response.writeHead(200, {'Content-Type': 'text/html'});  response.end(`    &lt;html&gt;&lt;body&gt;      &lt;h1&gt;Hello, world!&lt;/h1&gt;      You asked for: ${request.url}    &lt;/body&amp;gt;&lt;/html&gt;`);}).listen(1234);</code></pre><p>Execute <code>npm start</code> para iniciá-lo, visite <code>http://127.0.0.1:1234/index.html</code> para se certificar de que está funcionando e, então, pressione <code><strong><strong>Ctrl</strong></strong></code>+<code><strong><strong>C</strong></strong></code> para parar o servidor.</p><p>Para obter o IntelliSense para Node.js, você precisa instalar as informações de tipo para ele com este comando:</p><pre><code>npm install @types/node --save-dev</code></pre><p>Em seguida, no VS Code, digite <code>http.</code> para ter certeza de que funciona:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/09/0_TmTm83d-pJmb6iM5.png" class="kg-image" alt="0_TmTm83d-pJmb6iM5" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/09/0_TmTm83d-pJmb6iM5.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/09/0_TmTm83d-pJmb6iM5.png 704w" width="704" height="306" loading="lazy"></figure><p>Nos bastidores, o VS Code usa o mecanismo do TypeScript para isso. No entanto, se você renomear seu arquivo para <code>server.ts</code>, o <strong><strong>IntelliSense </strong>não funcionará</strong>! O TypeScript está quebrado no Node.js? Na verdade, não. O TypeScript ainda pode compilá-lo, apenas não compreenderá <code>require</code> em um contexto <code>.ts</code>. Portanto, em arquivos TypeScript, você deve usar <code>import</code> ao invés de <code>require</code>:</p><pre><code>import * as http from 'http';</code></pre><p><strong>Observação</strong>: isso é confusamente diferente dos arquivos <code>.mjs</code> do Node, que requerem <code>import http from 'http';</code> (<a href="https://stackoverflow.com/questions/50661510/why-doesnt-fs-work-when-imported-as-an-es6-module" rel="noopener">detalhes</a>)</p><p>O TypeScript então converte <code>import</code> para <code>require</code> em sua saída (por causa da opção <code>"module": "umd"</code> em <code>tsconfig.json</code>).</p><p>Agora, vamos alterar nosso servidor para que ele possa servir qualquer arquivo da nossa pasta <code>/app</code>:</p><p>Você notará que esse código tem alguns… "aninhamentos" engraçados. Isso porque as funções do Node.js são normalmente assíncronas. Quando você chama funções em <code>fs</code>, ao invés de <strong><strong>ret</strong>o<strong>rn</strong>ar</strong> um resultado, elas pausam seu programa até que elas terminem e, então, <strong><strong>chamam</strong></strong> uma função fornecida por você, enviando a essa função um erro (<code>err</code>) ou alguma informação (<code>fileInfo</code>).</p><p>Por exemplo, em vez de <strong><strong>retornar</strong></strong> informações sobre um arquivo, <code>fs.stat</code>, <strong><strong>envia</strong></strong> informações para uma função de callback.</p><p>Uma coisa suspeita sobre este servidor da web é que ele ignora <code><a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods" rel="noopener">request.method</a></code>, tratando cada solicitação como se fosse um arquivo <code>GET</code>. No entanto, ele funciona bem o suficiente para começar.</p><h4 id="etapa-b4-opcional-usar-o-express"><strong>Etapa B4 (opcional): usar o Express</strong></h4><p>Se você quiser que seu lado do servidor faça qualquer "roteamento" que seja mais complicado do que servir alguns arquivos, você provavelmente deve aprender sobre a estrutura do servidor do Node.js mais popular: o <a href="https://expressjs.com/" rel="noopener">Express</a>.</p><p>Se usarmos o Express, nosso código de servidor será muito mais curto.</p><p>Basta instalá-lo com <code>npm install express</code> e colocar o seguinte código no <code>server.js</code>:</p><pre><code>const express = require('express');const app = express();</code></pre><pre><code>app.use('/node_modules', express.static('node_modules'));app.use('/', express.static('app'));app.listen(1234, () =&gt; console.log(    'Express server running at http://127.0.0.1:1234'));</code></pre><h4 id="etapa-b5-criar-uma-p-gina-web-para-manter-seu-aplicativo"><strong>Etapa B5: criar uma página web para manter seu aplicativo</strong></h4><p>Finalmente, em sua pasta <code>app</code>, crie um arquivo <code>index.html</code> para carregar seu aplicativo:</p><p>Esta página inclui o React (<code>react.development.js</code> e <code>react-dom.development.js</code>) e o Preact (<code>preact.dev.js</code>), então não preciso dar instruções separadas para cada um. Você pode remover qualquer um que não esteja usando, mas a página ainda pode carregar com elementos de script não resolvidos.</p><p>Neste ponto, você deve ser capaz de construir seu código (<code>npm run build</code>), iniciar seu servidor (<code>npm start</code>) e visitar <code>http://127.0.0.1:1234 </code> para visualizar seu aplicativo!</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/09/0_ZUymOkFeZhtmNjYF.png" class="kg-image" alt="0_ZUymOkFeZhtmNjYF" width="266" height="140" loading="lazy"></figure><p>Lembre-se: você pode recompilar seu código automaticamente no VS Code. Pressione <code><strong><strong>Ctrl</strong></strong></code>+<code><strong><strong>Shift</strong></strong></code>+<code><strong><strong>B</strong></strong></code> e escolha <code>tsc: watch</code>.</p><p><strong>Observação</strong>: é importante carregar <code>app.js</code> no final do <code>body</code>, ou o React dirá <code>Error: Target container is not a DOM element</code>, porque <code>app.js</code> estaria chamando <code>document.getElementById('app')</code> antes de o elemento app existir.</p><p>Neste ponto, vale a pena notar que este código é um pouco "hackeado". Principalmente esta parte:</p><pre><code>&lt;script&gt;    module = {exports:{}}; exports = {};    window.require = function(name) { return window[name]; };    window['react'] = window['React'];    window['react-dom'] = window['ReactDOM'];&lt;;/script&gt;</code></pre><p>Para que isso? A resposta curta é que: se o seu código contiver <code>import</code>, o TypeScript <strong>não poderá</strong> produzir código que "simplesmente funcione" em um navegador e essa é uma das muitas soluções possíveis para esse problema.</p><p>A resposta longa? Antes de tudo, lembre-se de que o ecossistema JavaScript possui vários sistemas de módulos. No momento, seu arquivo <code>tsconfig.json</code> usa a opção <code>"module": "umd"</code>, porque <code>"module": "umd"</code> e <code>"module": "commonjs"</code> são os únicos modos que podem ser usados ​​no Node.js e em um navegador da web.</p><p>Eu pedi para você fazer um arquivo <code>server.js</code> (não <code>server.ts</code>), mas usando <code>"module": "umd"</code> você poderia escrever seu código de servidor em TypeScript se você quiser.</p><p>O UMD é a escolha natural já que ele deve fazer uma definição de módulo "universal", mas o TypeScript não tenta realmente ser universal — ele simplesmente não tenta funcionar em um navegador da web sem ajuda.</p><p>Em vez disso, ele espera encontrar símbolos predefinidos para um sistema de módulos AMD ou um sistema de módulo CommonJS (ou Node.js). Se nenhum desses estiver definido, o módulo sai sem sequer registrar uma mensagem de erro.</p><p>Mesmo se <strong><strong>pudéssemos </strong></strong>usar a opção <code>"module": "es6"</code>, que mantém os comandos <code>import</code> inalterados no arquivo de saída, não funcionaria porque o Chrome de alguma forma <strong><strong>ainda</strong></strong> não suporta o <code>import</code> no momento de escrita desse texto. Além disso, os URLs de nossos módulos têm pouco em comum com a string em nossas declarações <code>import</code> e aprendi que os <a href="https://www.typescriptlang.org/docs/handbook/module-resolution.html#base-url" rel="noopener">aliases de mapeamento de caminho</a> do TypeScript (texto em inglês) não podem resolver o problema porque não alteram a saída do compilador.</p><p>A implementação do CommonJS do TypeScript requer que o <code>require</code> seja definido, claro — é usado para importar módulos. Ele, porém, também procura por <code>exports</code> e <code>module.exports</code>, mesmo que o nosso módulo não exporte nada. Então, nosso pequeno "hack" deve definir todos os três.</p><p>As versões UMD do React, ReactDOM e Preact definem variáveis ​​globais chamadas <code>React</code>, <code>ReactDOM</code> e <code>preact</code>, respectivamente. Variáveis "globais" em um navegador, porém, são, na verdade, membros de um objeto especial chamado <code>window</code>. Em JavaScript, <code>window.algumacoisa</code> significa exatamente a mesma coisa que <code>window['alguma_coisa']</code> exceto que você pode usar caracteres especiais, como traços, na última forma. Portanto, <code>window['preact']</code> e/ou <code>window['React']</code> já existem. Então, definir uma função <code>require</code> que simplesmente retorna <code>window[nome]</code> permite que React ou Preact sejam importados.</p><p>No entanto, também precisamos criar aliases em letras minúsculas <code>'react'</code> e <code>'react-dom'</code> porque esses são os nomes que devemos usar em nosso código TypeScript (esses nomes são reconhecidos pelo compilador TypeScript, porque são os nomes das pastas em <code>node_modules</code>).</p><p>Há outra coisa em nosso index.html que é um pouco… infeliz:</p><pre><code>&lt;script src="node_modules/react/umd/react.development.js"&gt;&lt;/script&gt;&lt;script src="node_modules/react-dom/umd/react-dom.development.js"&gt;&lt;/script&gt;&lt;script src="node_modules/preact/dist/preact.dev.js"&gt;&lt;/script&gt;</code></pre><p>O que faz com que esse código não seja o ideal?</p><ol><li>Já temos declarações <code>import</code> em nosso arquivo <code>app.tsx</code>. Então, é um infortúnio que precisemos de um comando <strong><strong>separa</strong>do<strong> </strong></strong>para carregar os módulos em nosso <code>index.html</code>.</li><li>Estamos nos referindo especificamente às versões de <strong><strong>de</strong>sen<strong>v</strong>olvimento</strong> do código, que incluem comentários e são muito mais legíveis do que as versões minificadas. Se, contudo, lançarmos nosso site para um grande público, vamos querer mudar para as versões reduzidas para que as páginas carreguem mais rápido. Seria bom se pudéssemos fazer isso sem perder os benefícios de depuração das versões de desenvolvimento.</li><li>Ele assume que podemos acessar arquivos em <code>node_modules</code>, que é uma maneira incomum de configurar um servidor.</li></ol><p>Todas as desvantagens descritas aqui nos levam a querer algum tipo de ferramenta adicional para nos ajudar a implantar código em nosso navegador da web. Já discutimos o Parcel, mas o mais popular é o Webpack.</p><h3 id="executando-seu-projeto-abordagem-c-a-maneira-do-webpack"><strong>Executando seu projeto – Abordagem C: a maneira do Webpack</strong></h3><p>A coisa mais popular a se fazer com aplicativos front-end é “empacotar” todos os módulos (React + seu código + qualquer outra coisa que você precise) em um único arquivo. Isso é comparável ao que é chamado de "linking" em algumas outras linguagens, como o C++. Isso é, basicamente, o que o Parcel e o Webpack são feitos para fazer (o Gulp, não — ele requer ferramentas extras instaladas separadamente). </p><h4 id="etapas-c1-e-c2-criar-os-arquivos-tsconfig-json-e-server-js"><strong>Etapas C1 e C2: criar os arquivos tsconfig.json e server.js</strong></h4><p>Se você pulou a abordagem B, faça as etapas B1 e B4 agora.</p><h4 id="etapa-c3-instalar-o-webpack"><strong>Etapa C3: instalar o webpack</strong></h4><p>Você <strong>p<strong>o</strong>deria</strong> instalá-lo assim:</p><pre><code>npm install --save-dev webpack webpack-cli</code></pre><p>Infelizmente, o Webpack é muito grande: esses dois pacotes têm 735 dependências, pesando at 50.9 MB (13.198 arquivos em 1.868 pastas). Por alguma razão, o <code>webpack-cli</code> requer o pacote Webpack, mas não o marca como uma dependência. Portanto, você deve instalar os dois explicitamente.</p><p>Embora o <code>webpack-cli</code> seja, em grande parte, "apenas" a interface de linha de comando para as APIs do Webpack, ela é desproporcionalmente grande por algum motivo (o Webpack sozinho tem apenas 13,6 MB).</p><p>Devido ao seu tamanho, provavelmente faz mais sentido instalá-lo como global:</p><pre><code>npm install --global webpack webpack-cli </code></pre><p>Quando usar <code>--global</code>, tenha em mente que se você compartilhar seu código com outra pessoa, ela não obterá o Webpack automaticamente quando digitar <code>npm install</code>. Assim, você deve explicar como instalar em seu arquivo <code>README</code>.</p><p>Se você mudar de ideia e quiser mudar de <code>--save-dev</code> para <code>--global</code>, apenas execute o comando de instalação global <code>--global</code> e use <code>npm uninstall webpack webpack-cli</code> para excluir a cópia local.</p><h4 id="etapa-c4-adicionar-scripts-de-compila-o"><strong>Etapa C4: adicionar scripts de compilação</strong></h4><p>Para permitir que o <code>npm</code> construa e sirva seu projeto, adicione entradas na seção <code>"scripts"</code> do <code>package.json</code>.</p><p>Você <strong>poderia</strong> modificar essa seção para que fique assim:</p><pre><code>"scripts": {  "test": "echo \"Error: no tests installed\" &amp;&amp; exit 1",  "build": "tsc &amp;&amp; webpack app/app.js -o app/app.bundle.js --mode=production",  "build:dev": "tsc &amp;&amp; webpack app/app.js -o app/app.bundle.js --mode=development",  "start": "node server.js"},</code></pre><p>Com esses scripts, você usaria ou <code>npm run build</code> para compilar uma versão de produção minificada ou <code>npm run build:dev</code> para compilar uma versão de desenvolvimento com símbolos e comentários completos. No entanto, isso é inconveniente, pois quando você altera seu código, precisa repetir manualmente o comando <code>npm run build:dev</code>.</p><p>Na Abordagem B, poderíamos usar <code>tsc: watch</code> no VS Code, mas isso não funcionará dessa vez, porque nós <strong>também</strong> precisamos executar o Webpack — e o <code>tsc</code> não conhece isso.</p><p>Podemos configurá-lo para reconstruir automaticamente quando nosso código for alterado? Sim, mas precisaremos de um plugin do Webpack para fazer isso. Um dos plugins que podem fazer o trabalho é chamado de <code>awesome-typescript-loader</code>. Instale assim:</p><pre><code>npm install awesome-typescript-loader --save-dev</code></pre><p>Então, em <code>package.json</code>, altere sua seção <code>"scripts"</code> para parecer com isso:</p><p>Isso torna o <code>webpack</code> completamente responsável por compilar nosso código TypeScript e, portanto, podemos usar sua opção <code>--watch</code> para observar as mudanças no código. O comando para compilar e observar as alterações de código é <code>npm run watch</code>.</p><h4 id="etapa-c5-iniciar-o-servidor-e-o-webpack"><strong>Etapa C5: iniciar o servidor e o Webpack</strong></h4><p>Você precisará de dois terminais separados, um para seu sistema de compilação (<code>npm run watch</code>) e outro para seu servidor (<code>npm start</code>). Se o seu servidor estiver escrito em TypeScript, você precisará executar <code>npm run watch</code> primeiro. Caso contrário, não importa qual você inicie primeiro.</p><p>Vale a pena notar que o VS Code pode acompanhar vários terminais. Você pode criar dois terminais e executar um comando em cada um, assim:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/09/0_VRyly_6gxW6aIN8M.png" class="kg-image" alt="0_VRyly_6gxW6aIN8M" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/09/0_VRyly_6gxW6aIN8M.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/09/0_VRyly_6gxW6aIN8M.png 765w" sizes="(min-width: 720px) 720px" width="765" height="428" loading="lazy"></figure><h4 id="etapa-c6-criar-um-index-html-e-carreg-lo"><strong>Etapa C6: criar um index.html e carregá-lo</strong></h4><p>Na Abordagem C, seu arquivo <code>index.html</code> é muito mais simples do que na Abordagem B:</p><pre><code>&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;head&gt;  &lt;title&gt;App&lt;/title&gt;  &lt;meta charset="utf-8"/&gt;&lt;/head&gt;&lt;body&gt;  &lt;h1&gt;Mini React app ❤&lt;/h1&gt;  &lt;div id="app"&gt;&lt;/div&gt;  &lt;script src="app.bundle.js"&gt;&lt;/script&gt;&lt;/body&gt;&lt;/html&gt;</code></pre><p>Visite <code><strong><strong>http://127.0.0.1:1234</strong></strong></code> e a página deve carregar. Você terminou!</p><h4 id="etapa-c7-criar-um-arquivo-webpack-config-js-opcional-"><strong>Etapa C7: criar um arquivo webpack.config.js (opcional)</strong></h4><p>Nosso comando de compilação está ficando bastante longo e é muito semelhante para nossos três modos. Além disso, apenas configuramos a extensão de arquivo <code>tsx</code>. Portanto, o <code>webpack</code> ainda não sabe como compilar arquivos <code>ts</code>.</p><p>A maneira mais popular de usar o Webpack é com um arquivo de configuração especial, separado do <code>package.json</code>. O script <code>"build"</code> acima se torna o seguinte arquivo <code>webpack.config.js</code>:</p><pre><code>module.exports = {  entry: __dirname+'/app/app.tsx',  output: {    path: __dirname+'/app',    filename: 'app.bundle.js'  },  module: {    rules: [      { test: /\.(ts|tsx)$/, loader: 'awesome-typescript-loader' }    ]  }};</code></pre><p>Depois de criar este arquivo, altere seus <code>scripts</code> em <code>package.json</code>.</p><p>Como antes, você pode compilar e observar as alterações com o <code>npm run watch</code> ou usar <code>npm run build</code> para uma compilação de produção minificada.</p><h3 id="voc-terminou-"><strong>Você terminou!</strong></h3><p>É isso! Clique aqui para obter um <a href="http://typescript-react-primer.loyc.net/tutorial-3.html" rel="noopener">resumo</a> de todas as etapas acima e <a href="http://typescript-react-primer.loyc.net/tutorial-4.html" rel="noopener">aqui</a> para continuar aprendendo sobre o TypeScript.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Como aprender React — um roadmap do iniciante ao avançado ]]>
                </title>
                <description>
                    <![CDATA[ Olá, pessoal! Este guia é para pessoas que estão começando com React. Selecionei cuidadosamente os melhores vídeos e artigos em cada seção para facilitar o aprendizado. Observação: não estou associado com qualquer dos sites mencionados abaixo. É puramente minha visão. Pré-requisitos  1. Conhecimento básico de HTML, CSS e JavaScript. ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/como-aprender-react-um-roadmap-do-iniciante-ao-avancado/</link>
                <guid isPermaLink="false">62b20adc87787706fc0ff3ea</guid>
                
                    <category>
                        <![CDATA[ React ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Allynaell ]]>
                </dc:creator>
                <pubDate>Sat, 25 Jun 2022 02:47:14 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2022/06/1_y6C4nSvy2Woe0m7bWEn4BA.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/learning-react-roadmap-from-scratch-to-advanced-bff7735531b6/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Learn React — A roadmap from beginner to advanced</a>
      </p><p>Olá, pessoal!</p><p>Este guia é para pessoas que estão começando com React. Selecionei cuidadosamente os melhores vídeos e artigos em cada seção para facilitar o aprendizado.</p><p><strong>Observação<strong>:</strong></strong> não estou associado com qualquer dos sites mencionados abaixo. É puramente minha visão.</p><h3 id="pr-requisitos"><strong><strong><strong>Pr</strong></strong>é-<strong><strong>requisit</strong></strong>o<strong><strong>s</strong></strong></strong></h3><ol><li>Conhecimento básico de HTML, CSS e JavaScript.</li><li>Compreensão básica dos recursos do ES6. Aqui está meu <a href="https://hackernoon.com/es6-for-beginners-f98120b57414" rel="noopener">artigo</a> (em inglês) explicando alguns deles.<br>Para começar, você deve conhecer pelo menos os seguintes recursos:<br>1. Let<br>2. Const<br>3. Arrow functions<br>4. Imports e Exports<br>5. Classes</li><li>Compreensão básica de como usar o <a href="https://www.npmjs.com/" rel="noopener">npm</a>.</li></ol><h3 id="come-ando"><strong>Começando</strong></h3><p>Você pode usar editores de código on-line para praticar ou pode usar o <a href="https://github.com/facebook/create-react-app" rel="noopener">Create React App</a>.</p><p>Eu configurei um ambiente de desenvolvimento no <a href="https://jsfiddle.net/me4z1xyp/2/" rel="noopener">JSFiddle</a> e no <a href="https://codepen.io/srebalaji/pen/MVbWdB" rel="noopener">Codepen</a>.</p><p>Para entender todos os fundamentos do React, você pode começar com os seguintes tutoriais:</p><p><a href="https://reactjs.org/docs/hello-world.html" rel="noopener">Documentação oficial do React</a> (em inglês), da equipe do React</p><p><a href="https://egghead.io/courses/the-beginner-s-guide-to-reactjs" rel="noopener">Guia para iniciantes em React</a> (em inglês), de Kent C. Dodds</p><p><a href="https://www.freecodecamp.org/news/all-the-fundamental-react-js-concepts-jammed-into-this-single-medium-article-c83f9b53eac2/">Fundamentos do React</a> (em inglês), de Samer Buna</p><p>Até este momento, você já deve ter uma ideia básica dos fundamentos do React. É o suficiente para começar a desenvolver aplicativos para a web simples em React.</p><p>Agora, dê uma olhada no tutorial oficial do React:</p><p><a href="https://reactjs.org/tutorial/tutorial.html" rel="noopener">Tutorial oficial do React</a> (em inglês), da equipe do React</p><p>É um artigo bem escrito, cobrindo os fundamentos do React. Ele também explica os tópicos específicos com muita clareza.</p><p>Por último, porém não menos importante, aprenda a se conectar a APIs com aplicações em React:</p><p><a href="https://blog.hellojs.org/fetching-api-data-with-react-js-460fe8bbf8f2" rel="noopener">Fazendo o fetch de dados de API com React.js</a> (em inglês), de Ethan Jarrell</p><h4 id="comece-construindo-alguns-projetos"><strong>Comece construindo alguns projetos</strong></h4><ol><li>Aplicativo de tarefas simples</li><li>Aplicativo de calculadora simples</li><li>Crie um carrinho de compras</li><li>Exiba as estatísticas de usuário do GitHub usando a API do GitHub</li></ol><h3 id="react-router"><strong><strong><strong>React Router</strong></strong></strong></h3><p>O React Router ajuda você a criar rotas para suas aplicações de página única. É muito poderoso e fácil de usar com sua aplicação em React.</p><p>Para começar:</p><p><a href="https://blog.pshrmn.com/simple-react-router-v4-tutorial/">Tutorial do React Router</a> (em inglês), de Paul Sherman</p><p><a href="https://www.youtube.com/watch?v=1iAG6h9ff5s" rel="noopener">React Router e introdução a SPA</a> (em inglês), da Learn Code Academy</p><p><a href="https://scotch.io/tutorials/routing-react-apps-the-complete-guide" rel="noopener">Roteando aplicações em React</a> (em inglês), da Scotch.io</p><p>Esses artigos são mais que suficientes para você começar com o roteamento em React.</p><h4 id="projetos"><strong><strong><strong>Proje</strong></strong>to<strong><strong>s</strong></strong></strong></h4><ol><li>Uma aplicação CRUD simples</li><li>Clone do Hacker News</li></ol><p>Se você estiver realmente interessado em aprender muito sobre o Router, confira o seguinte guia:</p><p><a href="https://reacttraining.com/react-router/web/example/basic" rel="noopener">Guia completo do React Router</a> (em inglês), de React Training</p><h3 id="webpack"><strong><strong><strong>Webpack</strong></strong></strong></h3><p>Webpack é um famoso empacotador de módulos JavaScript. O Webpack ajuda você a manter as dependências como arquivos estáticos para o seu projeto para que os desenvolvedores não precisem fazer isso.</p><p>O Webpack também vem com carregadores. Eles ajudam a executar tarefas específicas em seu projeto.</p><p>Para aprender mais sobre o Webpack, siga os seguintes tutoriais.</p><p><a href="https://blog.andrewray.me/webpack-when-to-use-and-why/" rel="noopener">Quando e por que usar o Webpack</a> (em inglês), de Andrew Ray</p><p><a href="https://www.youtube.com/watch?v=9kJVYpOqcVU" rel="noopener">Tutorial do Webpack</a> (em inglês), da Learn Code Academy</p><p>Para configurar seu ambiente React local usando o Webpack, você pode consultar o seguinte repositório do GitHub:</p><p><a href="https://github.com/meetajhu/react-spa-template" rel="noopener">Template de SPA em React</a>, de Hanif Roshan</p><p>Acho que os tutoriais acima são o suficiente para começar com o Webpack. No entanto, para obter conhecimento aprofundado, você pode consultar os seguintes guias:</p><p><a href="https://survivejs.com/webpack/introduction/" rel="noopener">Introdução ao Webpack</a> (em inglês), de SurviveJS</p><p><a href="https://webpack.js.org/concepts/" rel="noopener">Documentação oficial do Webpack</a> (em inglês)</p><h3 id="renderiza-o-do-servidor"><strong>Renderização do servidor</strong></h3><p>A renderização do servidor é um dos recursos mais legais do React. Ele pode ser usado com qualquer uma das tecnologias de back-end.</p><p>A Server Side Rendering (SSR, ou renderização do lado do servidor, em português) no React ajuda você a criar componentes no servidor e a renderizá-los como HTML em seu navegador. Quando todos os módulos JavaScript são baixados no navegador, o React entra em cena. Simples!</p><p>Antes de tudo, dê uma olhada na API do React-DOM:</p><p><a href="https://reactjs.org/docs/react-dom-server.html" rel="noopener">API do React-DOM</a> (em inglês), da equipe do React</p><p>E siga os tutoriais abaixo para obter um conhecimento aprofundado:</p><p><a href="https://tylermcginnis.com/react-router-server-rendering/" rel="noopener">Renderização do servidor com React e React Router</a> (em inglês), de Tyler McGinnis</p><p><a href="https://medium.com/front-end-hacking/server-side-rendering-with-react-and-express-382591bfc77c" rel="noopener">Renderização no lado do servidor com React Router</a> (em inglês), de <a href="https://www.freecodecamp.org/news/learning-react-roadmap-from-scratch-to-advanced-bff7735531b6/undefined" rel="noopener">Roilan Salinas</a></p><p><a href="https://medium.com/styled-components/the-simple-guide-to-server-side-rendering-react-with-styled-components-d31c6b2b8fbf" rel="noopener">Guia para renderização no lado do servidor com React</a> (em inglês), de <a href="https://www.freecodecamp.org/news/learning-react-roadmap-from-scratch-to-advanced-bff7735531b6/undefined" rel="noopener">Dennis Brotzky</a></p><h3 id="redux"><strong><strong><strong>Redux</strong></strong></strong></h3><p>Redux é uma biblioteca JavaScript desenvolvida para manter os <em>states</em> (estados, em português) da aplicação. Quando você está construindo uma aplicação complexa, gerenciar estados entre componentes adicionará uma sobrecarga. O Redux ajuda você a armazenar todos os seus <em>states</em> em uma única fonte. E, claro, o React funciona bem com o Redux :)</p><p>Para começar:</p><p><a href="https://www.youtube.com/playlist?list=PLoYCgNOIyGADILc3iUJzygCqC8Tt3bRXt" rel="noopener">Tutorial do Redux</a><strong><strong> </strong></strong>(em inglês), da Learn Code Academy</p><p><a href="https://www.valentinog.com/blog/redux/">Tutorial do Redux para iniciantes</a> (em inglês), de Valentino Gagliardi</p><p><a href="https://css-tricks.com/learning-react-redux/" rel="noopener">React Redux</a> (em inglês), da CSS Tricks</p><p>Esses tutoriais são mais que suficientes para começar com o Redux. No entanto, não posso resistir e mencionar o tutorial abaixo também. Ele vale a pena :)</p><p><a href="https://egghead.io/courses/getting-started-with-redux" rel="noopener">Fundamentos do Redux</a><strong><strong> </strong></strong>(em inglês), de Dan Abramov</p><h3 id="recursos"><strong><strong><strong>Re</strong></strong>curso<strong><strong>s</strong></strong></strong></h3><p><a href="https://github.com/enaqx/awesome-react" rel="noopener">Awesome React</a></p><p>Se você gostou do artigo, não se esqueça de compartilhá-lo :)</p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
