<?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[ Felipe Archanjo - 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[ Felipe Archanjo - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/portuguese/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sat, 16 May 2026 19:16:33 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/portuguese/news/author/felipe-archanjo/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Como configurar e fazer o deploy da sua aplicação React do zero usando o Webpack e o Babel ]]>
                </title>
                <description>
                    <![CDATA[ > Nota de tradução: assim como em outros artigos mais antigos sobre React, enfatizamos que, a partir da versão 18 do React, muitas modificações ocorreram e é possível que, tendo a versão mais recente instalada, as configurações feitas neste projeto não funcionem. Para o projeto funcionar, é preciso a instalação ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/como-configurar-e-fazer-o-deploy-da-sua-aplicacao-react-do-zero-usando-o-webpack-e-o-babel/</link>
                <guid isPermaLink="false">64e7470278917103e8a165e9</guid>
                
                    <category>
                        <![CDATA[ React ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Felipe Archanjo ]]>
                </dc:creator>
                <pubDate>Tue, 26 Sep 2023 15:21:25 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2023/09/1_NluDivebM4nQi0OLMYuVHw.png" 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-deploy-your-react-app-from-scratch-using-webpack-and-babel-a669891033d4/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to set up &amp; deploy your React app from scratch using Webpack and Babel</a>
      </p><blockquote>Nota de tradução: assim como em outros artigos mais antigos sobre React, enfatizamos que, a partir da versão 18 do React, muitas modificações ocorreram e é possível que, tendo a versão mais recente instalada, as configurações feitas neste projeto não funcionem. Para o projeto funcionar, é preciso a instalação da versão sugerida no projeto.</blockquote><p>Você já vem usando o <em>create-react-app</em>, também conhecido como CRA, há algum tempo. É ótimo e você pode começar a programar diretamente. Porém, quando você precisar sair do <em>create-react-app</em> e começar a configurar sua própria aplicação do React, haverá um momento em que precisará abrir mão do controle automático e começar a explorar por conta própria.</p><p>Este guia abordará uma configuração mais simples do React que, pessoalmente, tenho usado em quase todos os meus projetos com React. Ao final deste tutorial, teremos nosso próprio esqueleto (em inglês, <em>boilerplate</em>) pessoal e aprenderemos algumas configurações a partir dele.</p><h4 id="-ndice"><strong>Índice</strong></h4><ul><li>Por que criar sua própria configuração?</li><li>Configurando o Webpack 4</li><li>Configurando o Babel 7</li><li>Adicionando o Prettier</li><li>Adicionando mapa de origem para obter melhores logs de erro</li><li>Configurando o ESLint</li><li>Encontrei erros! O que faço agora?</li><li>Adicionando o processador de CSS LESS</li><li>Fazendo o <em>deploy </em>da aplicação do React no Netlify</li><li>Conclusão</li></ul><h3 id="por-que-criar-sua-pr-pria-configura-o">Por que criar sua própria configuração?</h3><p>Existem razões específicas que tornam a criação da sua própria configuração do React algo sensato a se fazer. Provavelmente, você já está familiarizado com o React e deseja aprender a usar ferramentas como o Webpack e o Babel por conta própria. Essas ferramentas de construção são poderosas. Se tiver um tempo extra, sempre é bom aprender mais sobre elas.</p><p>Os desenvolvedores são naturalmente pessoas curiosas. Se você sente que gostaria de saber como as coisas funcionam e qual parte faz o quê, deixe-me ajudá-lo com isso.</p><p>Além disso, ocultar a configuração do React por meio do <em>create-react-app</em> é voltado para desenvolvedores que estão começando a aprender React, já que a configuração não deve ser um obstáculo para começar. No entanto, quando as coisas ficam mais sérias, é claro que você precisa de mais ferramentas para integrar ao seu projeto. Pense em:</p><ul><li>Adicionar carregadores do Webpack para LESS e SASS</li><li>Realizar a renderização no lado do servidor</li><li>Usar novas versões do ES</li><li>Adicionar MobX e Redux</li><li>Criar sua própria configuração apenas para fins de aprendizado</li></ul><p>Se você procurar pela Internet, encontrará alguns truques para contornar as limitações do CRA, como o "<em>create-react-app rewired</em>". Por que não aprender a configurar o React por conta própria, no entanto? Eu vou ajudar você a chegar lá, passo a passo.</p><p>Agora que você está convencido a aprender um pouco sobre configuração, vamos começar iniciando um projeto em React do zero.</p><p>Abra o prompt de comando ou o Git bash e crie um diretório.</p><pre><code>mkdir react-config-tutorial &amp;&amp; cd react-config-tutorial</code></pre><p>Inicialize o projeto com o NPM executando:</p><pre><code>npm init -y</code></pre><p>Agora, instale o React:</p><pre><code>npm install react react-dom</code></pre><p>Além disso, você pode visualizar o código-fonte no GitHub enquanto lê este tutorial para obter explicações sobre as configurações.</p><h3 id="configurando-o-webpack-4">Configurando o Webpack 4</h3><blockquote>Nota da tradução: o próprio Webpack recomendado neste tutorial está na versão 4. No momento da tradução, a versão do Webpack é a versão 5.</blockquote><p>Nosso primeiro passo será configurar o Webpack. É uma ferramenta muito popular e poderosa para configurar não apenas o React, mas também quase todos os projetos de <em>front-end</em>. A função principal do Webpack é pegar vários arquivos JavaScript que escrevemos em nosso projeto e transformá-los em um único arquivo minificado, para que ele seja rápido de ser servido. A partir do Webpack 4, não é mais necessário escrever um arquivo de configuração para usá-lo, mas neste tutorial escreveremos um para entendermos melhor.</p><p>Primeiro, vamos fazer algumas instalações</p><pre><code>npm install --save-dev webpack webpack-dev-server webpack-cli</code></pre><p>Isso instalará:</p><ul><li><strong><strong>webpack</strong></strong> — que inclui todas as funcionalidades principais do Webpack</li><li><strong><strong>webpack-dev-server</strong></strong> — esse servidor de desenvolvimento executa automaticamente o Webpack novamente quando nosso arquivo é alterado</li><li><strong><strong>webpack-cli</strong></strong> — permite executar o Webpack a partir da linha de comando</li></ul><p>Vamos tentar executar o Webpack adicionando o seguinte script ao arquivo <code>package.json</code>:</p><pre><code class="language-js">"scripts": {
 "start": "webpack-dev-server --mode development",
},</code></pre><p>Agora, crie um arquivo <code>index.html</code> na raiz do seu projeto com o seguinte conteúdo:</p><pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
 &lt;head&gt;
 &lt;title&gt;My React Configuration Setup&lt;/title&gt;
 &lt;/head&gt;
 &lt;body&gt;
 &lt;div id="root"&gt;&lt;/div&gt;
 &lt;script src="./dist/bundle.js"&gt;&lt;/script&gt;
 &lt;/body&gt;
&lt;/html&gt;</code></pre><p>Crie um diretório chamado <code>src</code> e, dentro dele, crie um arquivo chamado <code>index.js</code>.</p><pre><code>mkdir src &amp;&amp; cd src &amp;&amp; touch index.js</code></pre><p>Então, escreva um componente do React no arquivo:</p><pre><code class="language-js">import React from "react";
import ReactDOM from "react-dom";
class Welcome extends React.Component {
  render() {
    return &lt;h1&gt;Hello World from React boilerplate&lt;/h1&gt;;
  }
}
ReactDOM.render(&lt;Welcome /&gt;, document.getElementById("root"));</code></pre><p>Execute o Webpack usando <code>npm run start</code> … Ocorrerá um erro.</p><figure class="kg-card kg-code-card"><pre><code>You may need an appropriate loader to handle this file type</code></pre><figcaption>"Você pode precisar de um carregador adequado para lidar com esse tipo de arquivo"</figcaption></figure><h3 id="configurando-o-babel-7">Configurando o Babel 7</h3><p>O componente do React que escrevemos acima utilizou a sintaxe de <code>classe</code>, que é uma característica do ES6. O Webpack precisa do Babel para processar o ES6 em sintaxes do ES5, a fim de que essa classe funcione.</p><p>Vamos instalar o Babel no nosso projeto:</p><pre><code>npm install --save-dev @babel/core @babel/preset-env \@babel/preset-react babel-loader</code></pre><p>Por que precisamos desses pacotes?</p><ul><li><strong><strong>@babel/core</strong></strong> é a dependência principal que inclui o script de transformação do Babel.</li><li><strong><strong>@babel/preset-env</strong></strong> é o <em>preset </em>padrão do Babel usado para transformar ES6+ em código ES5 válido. Opcionalmente, configura automaticamente <em>polyfills </em>do navegador.</li><li><strong><strong>@babel/preset-react</strong></strong> é usado para transformar JSX e a sintaxe de classe do React em código JavaScript válido.</li><li><strong><strong>babel-loader</strong></strong> é um loader do Webpack que conecta o Babel ao Webpack. Vamos executar o Babel a partir do Webpack usando este pacote.</li></ul><p>Para integrar o Babel ao nosso Webpack, precisamos criar um arquivo de configuração do Webpack. Vamos criar um arquivo <code>webpack.config.js</code>:</p><pre><code class="language-js">module.exports = {
  entry: './src/index.js',
  output: {
    path: __dirname + '/dist',
    publicPath: '/',
    filename: 'bundle.js'
  },
  devServer: {
    contentBase: './dist',
  },
  module: {
    rules: [
    {
      test: /\.(js|jsx)$/,
      exclude: /node_modules/,
      use: ['babel-loader']
    }
    ]
  },
};</code></pre><p>Esta configuração do Webpack basicamente está dizendo que o ponto de entrada (em inglês, <code>entry)</code>) da nossa aplicação é <code>index.js</code>, então pegue tudo o que é necessário por esse arquivo e coloque a saída (em inglês, <code>output</code>) do processo de agrupamento (<em>bundling</em>) no diretório dist, com o nome <em><em>bundle.js</em></em>. Ah, se estivermos executando no <code>webpack-dev-server</code>, diga ao servidor para servir o conteúdo a partir da configuração <code>contentBase</code>, que é também o diretório onde a configuração está. Para os arquivos .js ou .jsx, utilize o <code>babel-loader</code> para transpilar todos eles.</p><p>Para usar os <em>presets </em>do Babel, crie um arquivo <code>.babelrc</code>.</p><pre><code>touch .babelrc</code></pre><p>Escreva o seguinte conteúdo:</p><pre><code class="language-js">{
  "presets": [
    "@babel/preset-env",
    "@babel/preset-react"
  ]
}</code></pre><p>Agora, execute <code>npm run start</code> novamente. Dessa vez, funcionará.</p><h3 id="adicionando-o-prettier"><strong><strong>Ad</strong>icionando o<strong> Prettier</strong></strong></h3><p>Para acelerar ainda mais o desenvolvimento, vamos criar um formatador de código usando o Prettier. Instale a dependência localmente e use o argumento --save-exact, já que o Prettier introduz mudanças estilísticas em lançamentos de correções.</p><pre><code>npm install --save-dev --save-exact prettier</code></pre><p>Agora, precisamos escrever o arquivo de configuração <code>.prettierrc</code>:</p><pre><code class="language-js">{
 "semi": true,
 "singleQuote": true,
 "trailingComma": "es5"
}</code></pre><p>As regras significam que queremos adicionar ponto e vírgula no final de cada instrução, usar aspas simples sempre que apropriado e adicionar vírgulas finais para código ES5 com várias linhas, como objetos ou <em>arrays</em>.</p><p>Você pode executar o Prettier a partir da linha de comando com:</p><pre><code>npx prettier --write "src/**/*.js"</code></pre><p>Também é possível adicionar um novo script ao arquivo <code>package.json</code>:</p><pre><code class="language-js">"scripts": {
 "test": "echo \"Error: no test specified\" &amp;&amp; exit 1",
 "start": "webpack-dev-server --mode development",
 "format": "prettier --write \"src/**/*.js\""
},</code></pre><p>Agora, podemos executar o Prettier usando <code>npm run format</code>.</p><p>Além disso, se você estiver usando o VSCode para desenvolvimento, pode instalar a <a href="https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode" rel="noopener">extensão do Prettier</a> e executá-la toda vez que salvar suas alterações, adicionando esta configuração:</p><pre><code>"editor.formatOnSave": true</code></pre><h3 id="adicionando-mapa-de-origem-para-obter-melhores-logs-de-erro">Adicionando mapa de origem para obter melhores logs de erro </h3><p>Uma vez que o Webpack empacota o código, os mapas de origem são obrigatórios para obter uma referência ao arquivo original que gerou um erro. Por exemplo, se você empacotar três arquivos de origem (<code>a.js</code>, <code>b.js</code>, e <code>c.js</code>) em um único pacote (<code>bundler.js</code>) e um dos arquivos de origem contiver um erro, o rastreamento de pilha simplesmente apontará para <code>bundle.js</code>. Isso é problemático, pois você provavelmente deseja saber exatamente se é o arquivo a, b ou c que está causando um erro.</p><p>Você pode instruir o Webpack a gerar mapas de origem usando a propriedade <strong>devtool</strong> na configuração:</p><pre><code class="language-js">module.exports = {
  devtool: 'inline-source-map',
  // … o resto da configuração
};</code></pre><p>Embora isso possa tornar a compilação mais lenta, não afeta a produção. Os <em>sourcemaps</em> só são baixados <a href="https://stackoverflow.com/a/44316255" rel="noopener">se você abrir as ferramentas de desenvolvimento do navegador (DevTools</a>) (texto em inglês).</p><h3 id="configurando-o-eslint">Configurando o ESLint</h3><p>Um <em>linter</em> é um programa que verifica nosso código em busca de erros ou avisos que possam causar bugs. O linter do JavaScript, o ESLint, é um programa de <em>linting</em> muito flexível que pode ser configurado de várias maneiras.</p><p>Antes de prosseguirmos, contudo, vamos instalar o ESLint em nosso projeto:</p><pre><code>npm --save-dev install eslint eslint-loader babel-eslint eslint-config-react eslint-plugin-react</code></pre><ul><li>O<strong> <strong>eslint</strong></strong> é a dependência principal para todas as funcionalidades, enquanto o eslint-loader nos permite integrar o eslint ao Webpack. Agora, como o React usa a sintaxe ES6+, vamos adicionar o <strong><strong>babel-eslint</strong></strong> — um analisador que permite que o eslint verifique todos os códigos ES6+ válidos.</li><li><strong><strong>eslint-config-react</strong></strong> e <strong><strong>eslint-plugin-react</strong></strong> são ambos usados para permitir que o ESLint utilize regras pré-definidas.</li></ul><p>Como já temos o Webpack, só precisamos modificar a configuração ligeiramente:</p><pre><code class="language-js">module.exports = {
  // modify the module
  module: {
    rules: [{
      test: /\.(js|jsx)$/,
      exclude: /node_modules/,
      use: ['babel-loader', 'eslint-loader'] // include eslint-loader
    }]
  },
};</code></pre><p>Em seguida, crie um arquivo de configuração do ESLint chamado <code>.eslintrc</code> com este conteúdo:</p><pre><code>{
  "parser": "babel-eslint",
  "extends": "react",
  "env": {
    "browser": true,
    "node": true
  },
  "settings": {
    "react": {
      "version": "detect"
    }
  }
}</code></pre><p>A configuração basicamente está dizendo, <em>"Ei, ESLint, por favor, analise o código usando o</em> <em><em> <code>babel-eslint</code> </em>antes de verificá-lo e, ao fazer a verificação, verifique se todas as regras do nosso arquivo de configuração de regras do React estão sendo cumpridas. Pegue as variáveis globais do ambiente do navegador e do Node. Ah, e se for código do React, pegue a versão do próprio módulo. Desse modo, o usuário não precisará especificar a versão manualmente."</em></p><p>Em vez de especificar nossas próprias regras manualmente, simplesmente estendemos as regras do <code>react</code>, que foram disponibilizadas por <code>eslint-config-react</code> e <code>eslint-plugin-react</code>.</p><h3 id="encontrei-erros-o-que-fa-o-agora"><strong>Encontrei erros<strong>! </strong>O que faço agora<strong>?</strong></strong></h3><p>Infelizmente, a única maneira de realmente descobrir como corrigir erros do ESLint é olhando a documentação das regras. Há uma maneira rápida de corrigir erros do ESLint usando <code>eslint--fix</code>. Na verdade, isso é útil para uma correção rápida. Vamos adicionar um script ao nosso arquivo <code>package.json</code>:</p><pre><code class="language-js">"scripts": {
  "test": "echo \"Error: no test specified\" &amp;&amp; exit 1",
  "start": "webpack-dev-server --mode development",
  "format": "prettier --write \"src/**/*.js\"",
  "eslint-fix": “eslint --fix \"src/**/*.js\"", // the eslint script
  "build": "webpack --mode production"
},</code></pre><p>Em seguida, execute-o com <code>npm run eslint-fix</code>. Não se preocupe se você ainda não está muito familiarizado com o ESLint por enquanto. Você aprenderá mais sobre o ESLint à medida que o utilizar.</p><h3 id="adicionando-o-processador-de-css-less"><strong>Adicionando o processador de CSS LESS</strong></h3><p>Para adicionar o processador LESS à nossa aplicação do React, precisaremos dos pacotes <strong>less</strong> e <strong>loader </strong>do Webpack:</p><pre><code>npm install --save-dev less less-loader css-loader style-loader</code></pre><p>O <code>less-loader</code> compilará nosso arquivo <em>less</em> em CSS, enquanto o <code>css-loader</code> resolverá a sintaxe do CSS, como <code>import</code> or <code>url()</code>. O <code>style-loader</code> pegará nosso CSS compilado e o carregará na tag <code>&lt;style&gt;</code> em nosso pacote. Isso é ótimo para o desenvolvimento, pois nos permite atualizar nosso estilo instantaneamente, sem precisar atualizar o navegador.</p><p>Agora, vamos adicionar alguns arquivos de CSS para criar um diretório de estilo em <code>src/style</code></p><pre><code>cd src &amp;&amp; mkdir style &amp;&amp; touch header.less &amp;&amp; touch main.less</code></pre><p>Conteúdo do <code>header.less</code>:</p><pre><code class="language-js">.header {
  background-color: #3d3d;
}</code></pre><p>Conteúdo do <code>main.less</code>:</p><pre><code class="language-css">@import "header.less";
@color: #f5adad;
body {
  background-color: @color;
}</code></pre><p>Depois, importe nosso arquivo <code>main.less</code> do <code>index.js</code>:</p><pre><code>import "./style/main.less";</code></pre><p>Em seguida, atualize a propriedade <code>module</code> na configuração do Webpack:</p><pre><code class="language-js">module: {
  rules: [{
    test: /\.(js|jsx)$/,
    exclude: /node_modules/,
    use: ['babel-loader', 'eslint-loader']
  },
  {
    test: /\.less$/,
    use: [
      'style-loader',
      'css-loader',
      'less-loader',
    ],
  },
 ]
},</code></pre><p>Execute o script de <code>start</code> e estamos prontos para seguir em frente!</p><h3 id="fazendo-o-deploy-da-aplica-o-do-react-no-netlify"><strong>Fazendo o deploy da aplicação<strong> </strong>do <strong>React </strong>no<strong> Netlify</strong></strong></h3><p>Todas as aplicações precisam passar pelo processo de <em>deploy</em> na etapa final, e para aplicações do React, o <em>deploy</em> é muito fácil.</p><p>Primeiro, vamos alterar a saída de <em>build</em> e o <code>contentBase</code> de <code>dist</code> para <code>build</code> em nossa configuração do Webpack.</p><pre><code class="language-js">module.exports = {
  entry: './src/index.js',
  output: {
    path: path.resolve(__dirname, 'build'), // change this
    publicPath: '/',
    filename: 'bundle.js'
  },
  devServer: {
    contentBase: "./build",
  },
//…</code></pre><p>Agora, vamos instalar um novo plug-in do Webpack, chamado <code>HtmlWebpackPlugin</code>.</p><pre><code>npm install html-webpack-plugin -D</code></pre><p>Esse plug-in gerará um arquivo <code>index.html</code> no mesmo diretório onde o nosso <code>bundle.js</code> é criado pelo Webpack. Nesse caso, estamos falando do diretório <code>build</code>.</p><p>Por que precisamos desse plug-in? Porque o Netlify requer que um único diretório seja definido como o diretório raiz. Por isso, não podemos usar o <code>index.html</code> em nosso diretório raiz com o Netlify. Você precisa atualizar sua configuração do Webpack para que fique assim:</p><pre><code class="language-js">const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
  entry: //…
  output: {
    //…
  },
  devServer: {
    contentBase: "./build",
  },
  module: {
    //…
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: path.resolve('./index.html'),
    }),
  ]
};</code></pre><p>Não se esqueça de remover a tag <code>script</code> do seu <code>index.html</code>:</p><pre><code class="language-html">&lt;!DOCTYPE html&gt;&lt;html&gt;  &lt;head&gt;    &lt;title&gt;My React Configuration Setup&lt;/title&gt;  &lt;/head&gt;  &lt;body&gt;    &lt;div id="root"&gt;&lt;/div&gt;  &lt;/body&gt;&lt;/html&gt;&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;My React Configuration Setup&lt;/title&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;div id="root"&gt;&lt;/div&gt;
  &lt;/body&gt;
&lt;/html&gt;</code></pre><p>Agora, você pode testar a configuração com o comando <code>npm run build</code>. Uma vez concluído, faça o push do seu esqueleto (<em>boilerplate</em>) para um repositório do GitHub. É hora de fazer o <em>deploy</em> da nossa aplicação!</p><p>Vamos criar uma conta no <a href="https://netlify.com/" rel="noopener">Netlify</a>. Se você ainda não ouviu falar do Netlify antes, é um incrível serviço de hospedagem de sites estáticos que oferece todas as ferramentas necessárias para implantar um site estático gratuitamente. O que é um site estático? É um site criado a partir de um conjunto de páginas HTML estáticas, sem nenhum <em>back-end</em>. Nosso esqueleto (<em>boilerplate</em>) do React, como está agora, conta como um site estático, pois não configuramos nenhum <em>back-end</em> – sendo composto apenas por HTML e JavaScript.</p><p>Após se cadastrar, selecione "New site" do Git e escolha o GitHub como seu provedor de Git:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/09/WfWqORsZjfHKwOpZ63d-nZUC6N2FF9CPzDrg.png" class="kg-image" alt="WfWqORsZjfHKwOpZ63d-nZUC6N2FF9CPzDrg" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/09/WfWqORsZjfHKwOpZ63d-nZUC6N2FF9CPzDrg.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/09/WfWqORsZjfHKwOpZ63d-nZUC6N2FF9CPzDrg.png 800w" sizes="(min-width: 720px) 720px" width="800" height="365" loading="lazy"></figure><p>Você precisa conceder permissões para o Netlify e, em seguida, selecionar o repositório do seu esqueleto (boilerplate) do React.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/09/MtKFlYYRZVZ7JNcmP8AHiiDV5OLlJoy4hBk5.png" class="kg-image" alt="MtKFlYYRZVZ7JNcmP8AHiiDV5OLlJoy4hBk5" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/09/MtKFlYYRZVZ7JNcmP8AHiiDV5OLlJoy4hBk5.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/09/MtKFlYYRZVZ7JNcmP8AHiiDV5OLlJoy4hBk5.png 800w" sizes="(min-width: 720px) 720px" width="800" height="555" loading="lazy"></figure><p>Agora, você precisa inserir o comando de construção (<em>build</em>) e o diretório de publicação. Como você pode ver, é por isso que precisamos do <em>HtmlWebpackPlugin</em>, porque precisamos servir tudo a partir de um único diretório. Em vez de atualizar manualmente nosso arquivo <code>index.html</code> raiz para as alterações, simplesmente o geramos usando o plug-in.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/09/aecd4gyxtTE22EuPoHzXRe1yA9I9BqTaPfa1.png" class="kg-image" alt="aecd4gyxtTE22EuPoHzXRe1yA9I9BqTaPfa1" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/09/aecd4gyxtTE22EuPoHzXRe1yA9I9BqTaPfa1.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/09/aecd4gyxtTE22EuPoHzXRe1yA9I9BqTaPfa1.png 800w" sizes="(min-width: 720px) 720px" width="800" height="771" loading="lazy"></figure><p>Certifique-se de ter o mesmo comando que a captura de tela acima, ou sua aplicação pode não funcionar.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/09/T3GN2LRCZtTIfNNOSVPV-tKgrmlllnRVcmcs.png" class="kg-image" alt="T3GN2LRCZtTIfNNOSVPV-tKgrmlllnRVcmcs" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/09/T3GN2LRCZtTIfNNOSVPV-tKgrmlllnRVcmcs.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/09/T3GN2LRCZtTIfNNOSVPV-tKgrmlllnRVcmcs.png 800w" sizes="(min-width: 720px) 720px" width="800" height="506" loading="lazy"></figure><p>Assim que o status de deploy mudar para <code>published</code> (em português, publicado – número 2 acima), você pode acessar o nome de site aleatório que o Netlify atribuiu à sua aplicação (número 1).</p><p>Sua aplicação React foi implantada. Parabéns!</p><h3 id="conclus-o"><strong>Conclusão</strong></h3><p>Você acaba de criar o seu próprio esqueleto (<em>boilerplate</em>) de projeto em React e de implantá-lo ao vivo no Netlify. É verdade que não mergulhamos muito fundo nas configurações do Webpack, porque este <em>boilerplate</em> foi projetado para ser um ponto de partida genérico. Em alguns casos, quando precisamos de recursos avançados como renderização no lado do servidor, precisamos ajustar a configuração novamente.</p><p>Porém, fique tranquilo! Você chegou até aqui, o que significa que já compreende o que o Webpack, o Babel, o Prettier e o ESLint fazem. O Webpack possui muitos carregadores poderosos que podem ajudar em muitos casos que você encontrará com frequência ao construir uma aplicação para a web.</p><p>Além disso, estou atualmente escrevendo um livro para ajudar os desenvolvedores de software a aprender sobre o React, que você talvez queira <a href="https://sebhastian.com/react-distilled/" rel="noopener">dar uma olhada</a> (livro em inglês)!</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/09/3ZrRhRwWyXnRsvrtUyYmir0KVQEteEd5yi3G.jpeg" class="kg-image" alt="3ZrRhRwWyXnRsvrtUyYmir0KVQEteEd5yi3G" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/09/3ZrRhRwWyXnRsvrtUyYmir0KVQEteEd5yi3G.jpeg 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/09/3ZrRhRwWyXnRsvrtUyYmir0KVQEteEd5yi3G.jpeg 800w" sizes="(min-width: 720px) 720px" width="800" height="301" loading="lazy"></figure><p>Você também pode ler mais dos meus tutoriais sobre React em <a href="https://sebhastian.com/" rel="noopener">sebhastian.com</a>.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Deploy no Heroku – como colocar uma aplicação ou site da web em produção ]]>
                </title>
                <description>
                    <![CDATA[ Quando se trata de fazer o deploy (em português, implantação) de uma aplicação, geralmente existem duas opções: um VPS [https://pt.wikipedia.org/wiki/Servidor_virtual_privado] (servidor virtual privado) ou um PaaS [https://pt.wikipedia.org/wiki/Plataforma_como_servi%C3%A7o]  (plataforma como serviço). Este artigo mostrará a você uma receita de como publicar uma aplicação em produção em um PaaS como o ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/deploy-no-heroku-como-colocar-uma-aplicacao-ou-site-da-web-em-producao/</link>
                <guid isPermaLink="false">64dd140cfa562503c1cafb1f</guid>
                
                    <category>
                        <![CDATA[ Desenvolvimento para a Web ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Felipe Archanjo ]]>
                </dc:creator>
                <pubDate>Sun, 20 Aug 2023 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2023/08/preview.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-deploy-an-application-to-heroku/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Heroku Deploy – How to Push a Web App or Site to Production</a>
      </p><p>Quando se trata de fazer o <em>deploy</em> (em português, implantação) de uma aplicação, geralmente existem duas opções: um <a href="https://pt.wikipedia.org/wiki/Servidor_virtual_privado">VPS</a> (servidor virtual privado) ou um <a href="https://pt.wikipedia.org/wiki/Plataforma_como_servi%C3%A7o">PaaS</a> (plataforma como serviço). Este artigo mostrará a você uma receita de como publicar uma aplicação em produção em um PaaS como o <a href="https://www.heroku.com/">Heroku</a>.</p><blockquote>Nota da tradução: ao final de 2022, o Heroku encerrou o <em><strong>tier</strong> </em>gratuito para implantação. Os planos mensais básicos por lá, no momento desta tradução, custam 5 dólares ao mês.</blockquote><h2 id="passo-1-criar-o-projeto"><strong>Passo 1 - criar o projeto</strong></h2><p><br>O primeiro passo é criar uma estrutura simples para o nosso projeto com alguns arquivos básicos. Para este artigo, vou criar um servidor de demonstração com NodeJS.</p><p>Em uma nova pasta, vou abrir um terminal e executar o comando <code>npm init -y</code> para criar um projeto. O servidor fictício será desenvolvido em Express. Assim, precisamos executar o comando <code>npm install express</code> para instalar esse módulo.</p><p>Assim que essa biblioteca estiver instalada, podemos criar um arquivo para o nosso projeto, chamado <code>app.js</code>. Dentro dele, escreveremos o código para o nosso servidor simples:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/08/server.png" class="kg-image" alt="server" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/08/server.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/08/server.png 974w" sizes="(min-width: 720px) 720px" width="974" height="768" loading="lazy"><figcaption>Versão <a href="https://carbon.now.sh/?bg=rgba(171%2C%20184%2C%20195%2C%201)&amp;t=seti&amp;wt=none&amp;l=javascript&amp;ds=true&amp;dsyoff=20px&amp;dsblur=68px&amp;wc=true&amp;wa=true&amp;pv=56px&amp;ph=56px&amp;ln=false&amp;fl=1&amp;fm=Hack&amp;fs=14px&amp;lh=133%25&amp;si=false&amp;es=2x&amp;wm=false&amp;code=const%2520app%2520%253D%2520require(%2522express%2522)()%253B%250A%250Aconst%2520PORT%2520%253D%2520process.env.PORT%2520%257C%257C%25203000%253B%250A%250Aapp.get(%2522%2522%252C%2520(req%252C%2520res)%2520%253D%253E%2520%257B%250A%2520%2520res.send(%2522Hello%2520world%2522)%253B%250A%257D)%253B%250A%250Aapp.listen(PORT%252C%2520()%2520%253D%253E%2520%257B%250A%2520%2520console.log(%2560App%2520up%2520at%2520port%2520%2524%257BPORT%257D%2560)%253B%250A%257D)%253B">RAW</a> do projeto</figcaption></figure><p>Podemos iniciar a aplicação executando <code>node app.js</code>. Em seguida, podemos testá-la no seguinte URL <code>http://localhost:3000</code>. Neste ponto, você deve ver a mensagem <code>Hello World</code> no navegador.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/08/output.png" class="kg-image" alt="output" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/08/output.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/08/output.png 614w" width="614" height="157" loading="lazy"></figure><h2 id="passo-2-sistema-de-controle-de-vers-o"><strong>Passo <strong>2 - </strong>sistema de controle de versão</strong></h2><p>O próximo passo é escolher um sistema de controle de versão e colocar nosso código em uma plataforma de desenvolvimento em um repositório.</p><p>O sistema de controle de versão mais popular é o <a href="https://git-scm.com/">Git</a>, juntamente com o <a href="https://github.com/">Github</a> como plataforma de desenvolvimento. É isso que usaremos aqui.</p><p>No GitHub, crie um repositório para sua aplicação, como mostrado abaixo:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/08/1.png" class="kg-image" alt="1" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/08/1.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/08/1.png 845w" sizes="(min-width: 720px) 720px" width="845" height="813" loading="lazy"></figure><p>Para enviar o seu código local para um repositório, você precisa executar os comandos listados no GitHub após clicar no botão <code>Create repository</code>:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/08/git.png" class="kg-image" alt="git" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/08/git.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/08/git.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/08/git.png 1088w" sizes="(min-width: 720px) 720px" width="1088" height="235" loading="lazy"><figcaption>Comandos para enviar nosso código para o repositório do Github</figcaption></figure><p><strong>Importante: </strong>antes de fazer isso, precisamos ignorar alguns arquivos. Queremos enviar para o repositório apenas o código que escrevemos, sem as dependências (os módulos instalados).</p><p>Para isso, precisamos criar um arquivo <code>.gitignore</code> e, dentro dele, escrever o nome dos arquivos que queremos ignorar.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/08/ignore.png" class="kg-image" alt="ignore" width="448" height="220" loading="lazy"><figcaption>Estrutura de pastas e arquivo .gitignore</figcaption></figure><p>Agora, podemos escrever os comandos listados na imagem acima (aquela do GitHub).</p><p>Se você executou os comandos corretamente, eles estarão na página do seu repositório. Se você atualizar a página, deverá ver seus arquivos, exceto aqueles que você ignorou explicitamente, ou seja, os do diretório <code>node_modules</code>.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/08/git-master.png" class="kg-image" alt="git-master" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/08/git-master.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/08/git-master.png 903w" sizes="(min-width: 720px) 720px" width="903" height="268" loading="lazy"></figure><h2 id="passo-3-vincular-o-reposit-rio-ao-heroku">Passo <strong>3 - </strong>vincular o repositório ao<strong> Heroku</strong></h2><p><br>Neste passo, podemos vincular o repositório do GitHub à nossa aplicação no Heroku.</p><p>Primeiro, crie uma aplicação no Heroku e siga os passos listados na plataforma.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/08/heroku-new.png" class="kg-image" alt="heroku-new" width="539" height="122" loading="lazy"></figure><p>Assim que a aplicação for criada, uma janela semelhante a esta deve aparecer:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/08/heroku-shoud-see.png" class="kg-image" alt="heroku-shoud-see" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/08/heroku-shoud-see.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/08/heroku-shoud-see.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/08/heroku-shoud-see.png 1179w" sizes="(min-width: 720px) 720px" width="1179" height="566" loading="lazy"><figcaption>Painel da aplicação</figcaption></figure><p>Agora, se você olhar para a navegação na parte superior, verá <code>Overview</code>, <code>Resources</code>, <code>Deploy</code>, <code>Metrics</code> e assim por diante. Certifique-se que <code>Deploy</code> esteja selecionado. Em seguida, na segunda linha, clique no ícone do GitHub.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/08/search-and-cionnect.png" class="kg-image" alt="search-and-cionnect" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/08/search-and-cionnect.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/08/search-and-cionnect.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/08/search-and-cionnect.png 1061w" sizes="(min-width: 720px) 720px" width="1061" height="422" loading="lazy"><figcaption>Clique para conectar</figcaption></figure><p>Procure pela aplicação desejada, que, no nosso caso, é <code>demo-deploy-app-09</code> . Em seguida, clique em <code>Connect</code>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/08/deploy.png" class="kg-image" alt="deploy" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/08/deploy.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/08/deploy.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/08/deploy.png 1026w" sizes="(min-width: 720px) 720px" width="1026" height="583" loading="lazy"><figcaption><em>Branch</em> da implantação (<em>deploy</em>)</figcaption></figure><p>Uma vez que a aplicação esteja conectada com sucesso à sua conta do Heroku, você pode clicar em <code>Deploy Branch</code> para implantar a sua aplicação.</p><p><br>Se desejar, você também pode selecionar a opção <code>Enable Automatic Deploys</code>, que buscará automaticamente o código do seu repositório do GitHub sempre que você fizer um <em>push </em>para esse repositório.</p><p><br>Assim que a aplicação for implantada, você pode clicar em <em>View</em> para abrir a sua aplicação.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/08/final.png" class="kg-image" alt="final" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/08/final.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/08/final.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/08/final.png 1031w" sizes="(min-width: 720px) 720px" width="1031" height="706" loading="lazy"></figure><h2 id="passo-4-configurar-o-heroku-para-executar-corretamente-a-aplica-o"><strong>Passo <strong>4 - </strong>c<strong>onfigur</strong>ar o<strong> Heroku </strong>para executar corretamente a aplicação</strong></h2><p><br>Se você abrir a aplicação nesse momento, deverá ver algo parecido com isso:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/08/errr.png" class="kg-image" alt="errr" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/08/errr.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/08/errr.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/08/errr.png 1056w" sizes="(min-width: 720px) 720px" width="1056" height="789" loading="lazy"></figure><p>Isso mesmo: um erro. Isso ocorre porque o Heroku não sabe como iniciar nossa aplicação.</p><p>Se você se lembra, executamos o comando <code>node app.js</code> para iniciar a aplicação localmente. O Heroku não tem como saber quais comandos precisa executar para iniciar a aplicação. É por isso que ele gerou um erro.</p><p>Para resolver esse problema, precisamos criar um arquivo chamado <code>Procfile</code> com o seguinte conteúdo: <code>web: node ./app.js</code>.</p><p>Para atualizar nossa aplicação, tudo o que precisamos fazer é enviar um novo <em>commit </em>para o GitHub. Se tivermos ativado a opção de <code>Automatic Deploys</code>, o código será automaticamente puxado para o Heroku. Caso contrário, precisamos clicar novamente <code>Deploy Branch</code>.</p><p>Assim que a aplicação for reconstruída, deveríamos vê-la funcionando assim:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/08/deployed.png" class="kg-image" alt="deployed" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/08/deployed.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/08/deployed.png 636w" width="636" height="263" loading="lazy"></figure><h2 id="passo-5-como-adicionar-um-complemento"><strong>Passo <strong>5 - </strong>como adicionar um complemento</strong></h2><p><br>Um dos principais benefícios que o Heroku oferece é a facilidade de adicionar recursos na forma de complementos (<em>add-ons</em>) ao seu projeto. Esses recursos externos podem ser bancos de dados, ferramentas de registro e monitoramento, ferramentas de Integração e Entrega Contínua (CI/CD) ou ferramentas de teste.</p><p>Agora vamos ver como adicionar um novo recurso ao seu projeto. Primeiro, acessamos <em>Resources </em>(em português, recursos) e, a partir daí, adicionaremos uma nova ferramenta para testes.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/08/add-addon.png" class="kg-image" alt="add-addon" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/08/add-addon.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/08/add-addon.png 796w" sizes="(min-width: 720px) 720px" width="796" height="629" loading="lazy"></figure><p>Clique em <code>Find more add-ons</code> e, depois, procure por <code>Loadmill</code>.</p><p>O Loadmill é uma ferramenta de teste que é realmente ótima para testes de regressão e testes de carga.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/08/install-loadmill.png" class="kg-image" alt="install-loadmill" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/08/install-loadmill.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/08/install-loadmill.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/08/install-loadmill.png 1130w" sizes="(min-width: 720px) 720px" width="1130" height="649" loading="lazy"></figure><p>Clique em <code>Install…</code>. Em seguida, escolha a aplicação que deseja vincular.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/08/provision-add-on.png" class="kg-image" alt="provision-add-on" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/08/provision-add-on.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/08/provision-add-on.png 747w" sizes="(min-width: 720px) 720px" width="747" height="593" loading="lazy"></figure><p>Neste passo, o Heroku criará automaticamente uma conta para você na plataforma fornecida.</p><p>Na guia de recursos, você pode ver o recurso que foi adicionado há pouco:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/08/ff.png" class="kg-image" alt="ff" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/08/ff.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/08/ff.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/08/ff.png 1141w" sizes="(min-width: 720px) 720px" width="1141" height="502" loading="lazy"></figure><p>Se você acessar esse complemento, deverá ver o painel de controle com um tutorial de introdução e um teste de demonstração criado para você.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/08/fff2.png" class="kg-image" alt="fff2" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/08/fff2.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/08/fff2.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/08/fff2.png 1139w" sizes="(min-width: 720px) 720px" width="1139" height="449" loading="lazy"><figcaption>Painel do Loadmill</figcaption></figure><h1 id="conclus-o"><strong>Conclusão</strong></h1><p>O Heroku permite que os desenvolvedores implantem rapidamente e quase sem esforço uma aplicação em um servidor web.</p><p>Ele também oferece uma variedade de <em>plug-ins</em> que você pode integrar à sua aplicação.</p><p>Uma solução PaaS sempre permitirá que você avance mais rapidamente do que uma solução com um VPS, onde você precisa configurar tudo desde o início.</p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
