{"componentChunkName":"component---src-templates-blog-post-index-js","path":"/como-criar-variaveis-de-ambiente-no-nextjs/","result":{"data":{"markdownRemark":{"fields":{"slug":"/como-criar-variaveis-de-ambiente-no-nextjs/"},"frontmatter":{"category":"JavaScript","date":"23/06/2020","description":"Variáveis de ambiente no Next.js é bem fácil, mas existem casos com staging que precisamos de algo a mais","featuredImage":{"childImageSharp":{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAANABQDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAQBAgX/xAAWAQEBAQAAAAAAAAAAAAAAAAAAAQL/2gAMAwEAAhADEAAAAWqpQzoiJH//xAAbEAACAwADAAAAAAAAAAAAAAAAAgEREgMTIf/aAAgBAQABBQLw3kjmgZ4cujtc/8QAFREBAQAAAAAAAAAAAAAAAAAAEBH/2gAIAQMBAT8Bh//EABYRAAMAAAAAAAAAAAAAAAAAAAABEv/aAAgBAgEBPwG0Wj//xAAcEAABAwUAAAAAAAAAAAAAAAAAASExAhAiQZH/2gAIAQEABj8CZTKDY9KWlOH/xAAcEAACAgIDAAAAAAAAAAAAAAABEQAxEGEhQVH/2gAIAQEAAT8hcpQyXqIcAhoTsNpiA0oqmHhH/9oADAMBAAIAAwAAABAjH//EABYRAQEBAAAAAAAAAAAAAAAAAAARIf/aAAgBAwEBPxCmv//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8QN//EAB4QAQACAgEFAAAAAAAAAAAAAAEAESExUUFhobHw/9oACAEBAAE/EGqiTuYlRxK1jEl6aXSVLwyvQ5mqHoqEWfl5n//Z","aspectRatio":1.5384615384615385,"src":"/static/8e598f2de4e96857b66117b268ef3ccf/86e90/environments-nuvens.jpg","srcSet":"/static/8e598f2de4e96857b66117b268ef3ccf/17b1e/environments-nuvens.jpg 240w,\n/static/8e598f2de4e96857b66117b268ef3ccf/2d331/environments-nuvens.jpg 480w,\n/static/8e598f2de4e96857b66117b268ef3ccf/86e90/environments-nuvens.jpg 960w,\n/static/8e598f2de4e96857b66117b268ef3ccf/42348/environments-nuvens.jpg 1088w","srcWebp":"/static/8e598f2de4e96857b66117b268ef3ccf/c30ee/environments-nuvens.webp","srcSetWebp":"/static/8e598f2de4e96857b66117b268ef3ccf/e8667/environments-nuvens.webp 240w,\n/static/8e598f2de4e96857b66117b268ef3ccf/87b7f/environments-nuvens.webp 480w,\n/static/8e598f2de4e96857b66117b268ef3ccf/c30ee/environments-nuvens.webp 960w,\n/static/8e598f2de4e96857b66117b268ef3ccf/a61dd/environments-nuvens.webp 1088w","sizes":"(max-width: 960px) 100vw, 960px"}}},"photographer":"<a href=\"https://unsplash.com/@noaa?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText\">NOAA</a>","title":"Como criar variáveis de ambiente no Nextjs"},"timeToRead":6,"html":"<p>E lá vamos nós com mais um artigo sobre JavaScript, o primeiro sobre o Next.js. Ainda não tenho tanto contato com ele, mas já temos um primeiro projeto na Wooza utilizando. Um dos pontos que precisávamos era de variáveis de ambiente no Next.js para funcionar nos nossos diversos (não me diga, Dulça?). Environments são fáceis de configurar no Next.js, porém, no nosso caso precisávamos de um algo mais. Veremos o que é...</p>\n<h2>Mas como que configura variáveis de ambiente no Next.js?</h2>\n<p>Simples, basta criar os seguintes arquivos:</p>\n<ul>\n<li>env.local (ambiente local)</li>\n<li>env.development (ambiente de homologação - staging)</li>\n<li>env.production (ambiente de produção)</li>\n</ul>\n<p>E dentro deles você coloca as variáveis, por exemplo:</p>\n<div class=\"gatsby-highlight\" data-language=\"shell\"><pre class=\"language-shell\"><code class=\"language-shell\"><span class=\"token assign-left variable\">API_URL</span><span class=\"token operator\">=</span>https://fodasse.com\n<span class=\"token assign-left variable\">DEFAULT_SCROWBLES</span><span class=\"token operator\">=</span>VALOR</code></pre></div>\n<p>Claro, esses valores podem ou devem ser diferentes para cada um deles.</p>\n<h2>Beleza, Dulcetti, mas qual é o problema então?</h2>\n<p>Essas variáveis funcionam de boa localmente, durante o desenvolvimento e tudo mais. Porém, na hora do build, por exemplo, podem rolar problemas.</p>\n<p>No caso do projeto da empresa nós usamos essas variáveis num service de captura de dados de uma API. No start do projeto, usando o <code class=\"language-text\">next dev</code> ou <code class=\"language-text\">next start</code>, ele pega corretamente as informações dos arquivos de environment, o primeiro de homologação e o segundo de produção.</p>\n<p>O problema era na hora do Build do Next.js. Trabalhando com a parte de arquivos estáticos e geração de todas as págins nós não teríamos problema, porque no tempo de Build ele pega as informações que estão nos arquivos de environment. Mas na hora do acesso do usuário o service pega os dados de produção, que são os dados padrões. Isso porque as variáveis de ambientes só são acessadas no tempo de build, se perdem quando sobe pro servidor, S3 e afins.</p>\n<p>Com isso, precisamos criar um arquivo JS com essas configurações pro nosso service acessar de qualquer lugar.</p>\n<h3>E como são os ambientes, Bruno?</h3>\n<p>Temos três ambientes:</p>\n<ul>\n<li><strong>Desenvolvimento:</strong> develop</li>\n<li><strong>Homologação:</strong> homolog</li>\n<li><strong>Produção:</strong> master</li>\n</ul>\n<p>Como o <code class=\"language-text\">next build</code> pega por padrão as variáveis de ambiente de Produção, no CI/CD de Homologação acaba pegando as informações erradas, o que não queremos. Por isso eu precisava resolver isso, certo?</p>\n<h2>Então mostra como resolveu a criação de variáveis de ambientes no Next.js, Dulça</h2>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 980px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 68.16326530612245%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAOABQDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAUBAwT/xAAVAQEBAAAAAAAAAAAAAAAAAAAAAf/aAAwDAQACEAMQAAABdQrqp8YiP//EABsQAAIDAAMAAAAAAAAAAAAAAAECAAQRAxQh/9oACAEBAAEFAg2zcg9DXDO0wfjshl//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/AT//xAAdEAABAwUBAAAAAAAAAAAAAAAAARExAhASImGR/9oACAEBAAY/AlO21p9HxSGIP//EABsQAQEBAAIDAAAAAAAAAAAAAAERACFhMUFR/9oACAEBAAE/IW5Dx1mzzZs6zguu4wvthB/MF1ksRm//2gAMAwEAAgADAAAAELgv/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPxA//8QAFhEBAQEAAAAAAAAAAAAAAAAAAAER/9oACAECAQE/EMWP/8QAGxABAQEAAwEBAAAAAAAAAAAAAREAITFBgdH/2gAIAQEAAT8Q5YlTtw4UPhFnxlERfNXGFWi/DLwpUAltze/AETo/d//Z'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image lazyload\"\n        alt=\"Variáveis de ambiente no Next.js\"\n        title=\"Variáveis de ambiente no Next.js\"\n        data-src=\"/static/a06fb5ffe6a32c408670d22553c013bb/4012a/environmental.jpg\"\n        data-srcset=\"/static/a06fb5ffe6a32c408670d22553c013bb/a0fb2/environmental.jpg 245w,\n/static/a06fb5ffe6a32c408670d22553c013bb/6b254/environmental.jpg 490w,\n/static/a06fb5ffe6a32c408670d22553c013bb/4012a/environmental.jpg 980w,\n/static/a06fb5ffe6a32c408670d22553c013bb/00220/environmental.jpg 1059w\"\n        sizes=\"(max-width: 980px) 100vw, 980px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>Simples. Precisamos instalar dois pacotes:</p>\n<div class=\"gatsby-highlight\" data-language=\"shell\"><pre class=\"language-shell\"><code class=\"language-shell\"><span class=\"token function\">yarn</span> <span class=\"token function\">add</span> -D dotenv cross-env</code></pre></div>\n<p>Claro, se usar o <code class=\"language-text\">npm</code> você executa o comando <code class=\"language-text\">npm install --save-dev dotenv cross-env</code>. Depois disso você precisa adicionar ou alterar as tasks de build nos scripts do seu packaeg.json:</p>\n<div class=\"gatsby-highlight\" data-language=\"json\"><pre class=\"language-json\"><code class=\"language-json\"><span class=\"token punctuation\">{</span>\n  <span class=\"token property\">\"name\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"seu-pacote\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"scripts\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">\"build:hmg\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"npm run clear &amp;&amp; npm run env:hmg next build &amp;&amp; next export\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"build:prod\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"npm run clear &amp;&amp; npm run env:prod next build &amp;&amp; next export\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"env:hmg\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"cross-env ACTIVE_ENV=development\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"env:prod\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"cross-env ACTIVE_ENV=production\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"start\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"npm run env:hmg next dev\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"start:prod\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"npm run env:prod next start\"</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Percebam que existem duas tasks de env: uma de hmg e outra para prod. Elas executam o cross-env, passando seus respectivos valores. Eu preferi usar <code class=\"language-text\">development</code> como valor para homologação por ser o valor default de desenvolvimento do Next.js, mas pode nomear como quiser.</p>\n<h3>Ponto importante sobre desenvolvimento local</h3>\n<p>Percebam que só coloquei duas tasks, de hmg e prod, isso porque nesse projeto nós usamos o ambiente de HMG para o desenvolvimento local. Mas você, e deve, colocar as informações de desenvolvimento local apontando para o ambiente de DEV.</p>\n<h3>Voltando...</h3>\n<p>Depois é só criar os dois arquivos de variáveis de ambiente, um com os dados de homologação chamado <code class=\"language-text\">.env.development</code> (ou com o sufixo que quiser):</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">API_URL=https://hmg-fodasse.com\nDEFAULT_SCROWBLES=VALOR_HMG</code></pre></div>\n<p>E outro com os dados de produção chamado <code class=\"language-text\">.env.production</code>:</p>\n<div class=\"gatsby-highlight\" data-language=\"shell\"><pre class=\"language-shell\"><code class=\"language-shell\"><span class=\"token assign-left variable\">API_URL</span><span class=\"token operator\">=</span>https://fodasse.com\n<span class=\"token assign-left variable\">DEFAULT_SCROWBLES</span><span class=\"token operator\">=</span>VALOR</code></pre></div>\n<p>Percebam que a URL é diferente, assim como a propriedade que inventei em cada um dos arquivos.</p>\n<p>Lembrando que no local você coloca as informações que precisar, caso tenha um ambiente de desenvolvimento apartado.</p>\n<h3>Vamos para o gerador do arquivo de enviroment:</h3>\n<p>E depois disso você precisa criar um Builder que gere um arquivo que será usado pelos services. Eu o batizei de <code class=\"language-text\">environment-builder.js</code>. Vamos a ele:</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> fs <span class=\"token operator\">=</span> <span class=\"token function\">require</span><span class=\"token punctuation\">(</span><span class=\"token string\">'fs'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">const</span> activeEnv <span class=\"token operator\">=</span> process<span class=\"token punctuation\">.</span>env<span class=\"token punctuation\">.</span><span class=\"token constant\">ACTIVE_ENV</span> <span class=\"token operator\">||</span> <span class=\"token string\">'development'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> env <span class=\"token operator\">=</span> <span class=\"token function\">require</span><span class=\"token punctuation\">(</span><span class=\"token string\">'dotenv'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">config</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n  path<span class=\"token operator\">:</span> <span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">.env.</span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>activeEnv<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token template-punctuation string\">`</span></span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> <span class=\"token function-variable function\">createEnvFile</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Promise</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">resolve<span class=\"token punctuation\">,</span> reject</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    fs<span class=\"token punctuation\">.</span><span class=\"token function\">writeFile</span><span class=\"token punctuation\">(</span><span class=\"token string\">'environment.js'</span><span class=\"token punctuation\">,</span> <span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">export default </span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span><span class=\"token constant\">JSON</span><span class=\"token punctuation\">.</span><span class=\"token function\">stringify</span><span class=\"token punctuation\">(</span>env<span class=\"token punctuation\">.</span>parsed<span class=\"token punctuation\">)</span><span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token template-punctuation string\">`</span></span><span class=\"token punctuation\">,</span> <span class=\"token string\">'utf8'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">error</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">return</span> error <span class=\"token operator\">?</span> <span class=\"token function\">reject</span><span class=\"token punctuation\">(</span>error<span class=\"token punctuation\">)</span> <span class=\"token operator\">:</span> <span class=\"token function\">resolve</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\nmodule<span class=\"token punctuation\">.</span>exports <span class=\"token operator\">=</span> createEnvFile<span class=\"token punctuation\">;</span></code></pre></div>\n<p>Nesse arquivo nós vimos que ele usa o <code class=\"language-text\">dotenv</code> para fazer a configuração baseado nos arquivos que foram criados, <code class=\"language-text\">.env.development</code> e <code class=\"language-text\">.env.production</code>.</p>\n<p>E veja também que nas primeiras linhas ele pega o <code class=\"language-text\">process.env.ACTIVE_ENV</code>, que foi setado no package.json. Caso ele não exista, entra o padrão <code class=\"language-text\">development</code>. E depois uma variável <code class=\"language-text\">env</code> é criada com o config do dotenv.</p>\n<p>Com isso, todas as variáveis que estão nos arquivos de environment são atribuídos a um objeto parseado pelo dotenv de acordo com o <code class=\"language-text\">ACTIVE_ENV</code> passado. Veja que na Promise a gente coloca um <code class=\"language-text\">JSON.stringify</code> com o nó <code class=\"language-text\">parsed</code>.</p>\n<p>Um método <code class=\"language-text\">createEnvFile</code> é criado e exportado para ser executado em algum local que veremos logo, logo.</p>\n<h4>E o que esse método faz?</h4>\n<p>Ele cria um arquivo chamado <code class=\"language-text\">environment.js</code>, e é nesse arquivo que os services e afins vão se basear. Abaixo segue como o arquivo fica quando gerado:</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token string\">'API_URL'</span><span class=\"token operator\">:</span> <span class=\"token string\">'https://fodasse.com'</span><span class=\"token punctuation\">,</span>\n  <span class=\"token string\">'DEFAULT_SCROWBLES'</span><span class=\"token operator\">:</span> <span class=\"token string\">'VALOR'</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>Porém, você precisa colocar esse arquivo no <code class=\"language-text\">.gitignore</code>, pois esse arquivo será gerado a cada start e build, já que ele sofre alterações dependendo do ambiente.</p>\n<h3>Exportando esse environment.js no next-config.js</h3>\n<p>Aí você acaba se perguntando \"Mas como que eu gero esse fodasse?\". E é bem tranquilo, só vai depender de como você tem o seu next-config.js. Caso não tenha nenhum plugin e afins, é só colocar a execução do <code class=\"language-text\">createEnvFile()</code> no <code class=\"language-text\">module.exports</code>:</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> createEnvFile <span class=\"token operator\">=</span> <span class=\"token function\">require</span><span class=\"token punctuation\">(</span><span class=\"token string\">'./environment-builder'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\nmodule<span class=\"token punctuation\">.</span>exports <span class=\"token operator\">=</span> <span class=\"token function\">createEnvFile</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>Mas pode ser que você já use plugins, como o <code class=\"language-text\">next-images</code>, aí precisa adicionar dentro da configuração dele, passando o webpack, executando o método <code class=\"language-text\">createEnvFile()</code> e retornando as configurações:</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> withImages <span class=\"token operator\">=</span> <span class=\"token function\">require</span><span class=\"token punctuation\">(</span><span class=\"token string\">'next-images'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">const</span> createEnvFile <span class=\"token operator\">=</span> <span class=\"token function\">require</span><span class=\"token punctuation\">(</span><span class=\"token string\">'./environment-builder'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\nmodule<span class=\"token punctuation\">.</span>exports <span class=\"token operator\">=</span> <span class=\"token function\">withImages</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n  <span class=\"token function-variable function\">webpack</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">config</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">createEnvFile</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">return</span> config<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h3>Praticamente tudo pronto, agora é só capturar nas services</h3>\n<p>Agora que temos o arquivo <code class=\"language-text\">environment.js</code> gerado, use à vontade. Veja um exemplo numa service fodasse:</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">import</span> env <span class=\"token keyword\">from</span> <span class=\"token string\">'../../environment'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">const</span> <span class=\"token function-variable function\">fetchData</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">async</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> url <span class=\"token operator\">=</span> <span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>env<span class=\"token punctuation\">.</span><span class=\"token constant\">API_URL</span><span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token string\">/</span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>env<span class=\"token punctuation\">.</span><span class=\"token constant\">DEFAULT_SCROWBLES</span><span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token template-punctuation string\">`</span></span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">const</span> result <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> <span class=\"token function\">fetch</span><span class=\"token punctuation\">(</span>url<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">then</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">items</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> items<span class=\"token punctuation\">.</span><span class=\"token function\">json</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">const</span> dataResult <span class=\"token operator\">=</span> result<span class=\"token punctuation\">.</span>data<span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span> dataResult <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>Claro, é um exemplo completamente fodasse, você faz o que quiser, manipulações, Builders, tratamento de erros e afins, mas só quis mostrar que agora você pode importar o objeto exportado no arquivo <code class=\"language-text\">environment.js</code>.</p>\n<h2>Finalizando</h2>\n<p>Espero que tenha ajudado vocês aí, que tenham conseguido entender o propósito do artigo, os motivos e porquês. Depois dessas alterações nós alteramos o Build da Pipeline de Homologação, adicionando a task de homologação <code class=\"language-text\">build:hmg</code>.</p>\n<p>Ficou alguma dúvida? Mandem nos comentários. Precisa de melhorias? Mandem brasa nos comentários também, tamo junto ;)</p>\n<p>Beijo na alcatra.</p>\n<p><strong>[EDITED]</strong></p>\n<p>Atualizei o código do Builder, dando uma simplificada. Valeu, Filipe ;)</p>\n<p><strong>[/EDITED]</strong></p>"}},"pageContext":{"nextPost":{"fields":{"slug":"/como-criar-testes-em-listeners-no-react-testing-library/"},"frontmatter":{"title":"Como criar testes em listeners no React Testing Library"}},"previousPost":{"fields":{"slug":"/o-que-e-e-como-resolver-o-content-security-policy/"},"frontmatter":{"title":"O que é e como resolver o Content Security Policy"}},"slug":"/como-criar-variaveis-de-ambiente-no-nextjs/"}},"staticQueryHashes":["1271460761","2963127411","3623170217","764694655"]}