<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/rss/styles.xsl" type="text/xsl"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Randys Machado</title><description>Blog pessoal do Randys Machado: tecnologia, programação e outros assuntos.</description><link>https://randys.dev/</link><language>pt-BR</language><atom:link href="https://randys.dev/rss.xml" rel="self" type="application/rss+xml"/><item><title>Nova versão do blog: saí do Next.js e fui para o Astro</title><link>https://randys.dev/blog/nova-versao-do-blog-de-nextjs-para-astro/</link><guid isPermaLink="true">https://randys.dev/blog/nova-versao-do-blog-de-nextjs-para-astro/</guid><description>Por que reescrevi o blog do zero trocando Next.js, Tailwind e MDX por Astro e CSS nativo, e o que mudou em velocidade, código e visual, com números medidos antes e depois.</description><pubDate>Wed, 30 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://randys.dev/_astro/cover.BcgvYs4Z_Z4Qwbr.jpg&quot; alt=&quot;&quot; width=&quot;1200&quot; height=&quot;630&quot; /&gt;&lt;/p&gt;&lt;p&gt;O blog está de cara nova e, dessa vez, não foi só o visual. Reescrevi tudo do zero: saí do Next.js com Tailwind e MDX e fui para o &lt;a href=&quot;https://astro.build/&quot; target=&quot;_blank&quot; rel=&quot;external nofollow noopener noreferrer&quot;&gt;Astro&lt;/a&gt; com CSS puro. Neste post eu conto o porquê, o que mudou por baixo e por fora, e mostro os números de antes e depois (medidos, não chutados).&lt;/p&gt;
&lt;h2 id=&quot;por-que-mudar&quot;&gt;Por que mudar&lt;/h2&gt;
&lt;p&gt;A &lt;a href=&quot;https://randys.dev/blog/bem-vindos-a-versao-20-do-blog/&quot;&gt;versão 2.0&lt;/a&gt; nasceu em 2024 com Next.js 14, Tailwind CSS, shadcn/ui, TypeScript, Velite e MDX. Funcionava bem, mas com o tempo ficou claro que era ferramenta demais para o que um blog faz: mostrar texto.&lt;/p&gt;
&lt;p&gt;Cada página carregava &lt;strong&gt;102 kB de JavaScript&lt;/strong&gt; só para exibir um post estático. O projeto tinha &lt;strong&gt;33 dependências diretas&lt;/strong&gt; e instalava &lt;strong&gt;685 pacotes&lt;/strong&gt;. E o empurrão final veio de onde eu menos esperava: duas atualizações automáticas do Dependabot levaram o projeto para o Next.js 16, e o build simplesmente parou de funcionar. O Turbopack, agora padrão, recusa a configuração de webpack que o Velite injeta, e a API de &lt;code&gt;params&lt;/code&gt; das páginas mudou.&lt;/p&gt;
&lt;details data-callout=&quot;note&quot; open&gt;&lt;summary&gt;&lt;svg aria-hidden=&quot;true&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentColor&quot; fill-rule=&quot;evenodd&quot; d=&quot;M22 12c0 5.523-4.477 10-10 10S2 17.523 2 12S6.477 2 12 2s10 4.477 10 10m-10 5.75a.75.75 0 0 0 .75-.75v-6a.75.75 0 0 0-1.5 0v6c0 .414.336.75.75.75M12 7a1 1 0 1 1 0 2a1 1 0 0 1 0-2&quot; clip-rule=&quot;evenodd&quot;/&gt;&lt;/svg&gt;&lt;span&gt;Nota&lt;span&gt; (o site não chegou a cair)&lt;/span&gt;&lt;/span&gt;&lt;svg aria-hidden=&quot;true&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m12.37 15.835l6.43-6.63C19.201 8.79 18.958 8 18.43 8H5.57c-.528 0-.771.79-.37 1.205l6.43 6.63c.213.22.527.22.74 0&quot;/&gt;&lt;/svg&gt;&lt;/summary&gt;&lt;p&gt;Quando um build falha, a Vercel mantém o último deploy que funcionou. Então o site continuou no ar, só que preso numa versão que eu não conseguia mais atualizar sem mexer em código que nada tinha a ver com escrever posts.&lt;/p&gt;&lt;/details&gt;
&lt;p&gt;Manter um blog pessoal não deveria exigir isso. Queria algo mais simples, mais leve e que durasse.&lt;/p&gt;
&lt;h2 id=&quot;por-que-astro&quot;&gt;Por que Astro&lt;/h2&gt;
&lt;p&gt;O Astro gera HTML estático e &lt;strong&gt;não manda JavaScript para o navegador por padrão&lt;/strong&gt;: você só adiciona script onde realmente precisa. Para um blog, é exatamente o que faz sentido. Ele também trata Markdown e coleções de conteúdo de forma nativa, com validação dos campos do frontmatter, então o Velite deixou de ser necessário.&lt;/p&gt;
&lt;p&gt;Duas referências me ajudaram muito no caminho: o &lt;a href=&quot;https://github.com/jktrn/astro-erudite&quot; target=&quot;_blank&quot; rel=&quot;external nofollow noopener noreferrer&quot;&gt;astro-erudite&lt;/a&gt;, de onde vieram a ideia de CSS nativo, os callouts e os blocos de código, e o blog do &lt;a href=&quot;https://emile.sh&quot; target=&quot;_blank&quot; rel=&quot;external nofollow noopener noreferrer&quot;&gt;Emile&lt;/a&gt;, de onde vieram o header de vidro, a paleta de cores e a organização da home.&lt;/p&gt;
&lt;h2 id=&quot;o-que-mudou-por-baixo&quot;&gt;O que mudou por baixo&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Versão 2.0&lt;/th&gt;
&lt;th&gt;Versão 3.0&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Framework&lt;/td&gt;
&lt;td&gt;Next.js 14 (React)&lt;/td&gt;
&lt;td&gt;Astro 7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Estilos&lt;/td&gt;
&lt;td&gt;Tailwind CSS + shadcn/ui&lt;/td&gt;
&lt;td&gt;CSS nativo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Conteúdo&lt;/td&gt;
&lt;td&gt;MDX + Velite&lt;/td&gt;
&lt;td&gt;Markdown (Sätteri) + content collections&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Código nos posts&lt;/td&gt;
&lt;td&gt;rehype-pretty-code&lt;/td&gt;
&lt;td&gt;Expressive Code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dependências diretas&lt;/td&gt;
&lt;td&gt;33&lt;/td&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pacotes instalados&lt;/td&gt;
&lt;td&gt;685&lt;/td&gt;
&lt;td&gt;436&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;css-nativo-no-lugar-do-tailwind&quot;&gt;CSS nativo no lugar do Tailwind&lt;/h3&gt;
&lt;p&gt;Sair do Tailwind foi a parte que mais me divertiu. O CSS moderno resolve sozinho coisas que antes precisavam de biblioteca. O tema claro e escuro, por exemplo, virou uma linha por cor com a função &lt;code data-ec=&quot;&quot; data-language=&quot;css&quot;&gt;&lt;span&gt;light-dark()&lt;/span&gt;&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;src/styles/colors.css&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;css&quot; class=&quot;wrap&quot; style=&quot;--ecMaxLine:81ch&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;:root&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:2ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span&gt;--text-main&lt;/span&gt;&lt;span&gt;: light-dark(&lt;/span&gt;&lt;span&gt;oklch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;16.96&lt;/span&gt;&lt;span&gt;%&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0.002&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;17.32&lt;/span&gt;&lt;span&gt;), &lt;/span&gt;&lt;span&gt;oklch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;84.63&lt;/span&gt;&lt;span&gt;%&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0.014&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;102.05&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:2ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span&gt;--bg-main&lt;/span&gt;&lt;span&gt;: light-dark(&lt;/span&gt;&lt;span&gt;oklch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;99.01&lt;/span&gt;&lt;span&gt;%&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0.016&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;95.22&lt;/span&gt;&lt;span&gt;), &lt;/span&gt;&lt;span&gt;oklch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;16.96&lt;/span&gt;&lt;span&gt;%&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0.002&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;17.32&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Escrevi sobre essa função &lt;a href=&quot;https://randys.dev/blog/nova-funcao-light-dark-do-css-adaptando-tema-claro-e-escuro-automaticamente/&quot;&gt;num post anterior&lt;/a&gt; e agora ela está em produção aqui. Outros recursos que entraram:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;color-mix()&lt;/code&gt;&lt;/strong&gt; para os tons esmaecidos e as cores das categorias.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Container queries&lt;/strong&gt; no nome gigante do rodapé: ele ocupa sempre a largura toda, em qualquer tela.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Popover API&lt;/strong&gt; + &lt;strong&gt;&lt;code&gt;@starting-style&lt;/code&gt;&lt;/strong&gt; no menu do celular: abre, fecha com &lt;kbd&gt;Esc&lt;/kbd&gt; e com clique fora, com animação, e sem nenhum JavaScript de framework.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;backdrop-filter&lt;/code&gt;&lt;/strong&gt; no efeito de vidro do header.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;markdown-sem-mdx&quot;&gt;Markdown sem MDX&lt;/h3&gt;
&lt;p&gt;Os posts agora são Markdown puro, processados pelo Sätteri (o processador nativo do Astro). Os recursos extras vêm de plugins pequenos, sem precisar de componentes dentro do texto:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;links de âncora em todos os títulos (passe o mouse sobre qualquer título deste post);&lt;/li&gt;
&lt;li&gt;links externos abrindo em nova aba, com os atributos certos;&lt;/li&gt;
&lt;li&gt;callouts como o que apareceu lá em cima;&lt;/li&gt;
&lt;li&gt;blocos de código com título, botão de copiar e destaque de linhas, e até código colorido no meio do texto, como &lt;code data-ec=&quot;&quot; data-language=&quot;ts&quot;&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;blog&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Astro&quot;&lt;/span&gt;&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Escrever um callout, por exemplo, é só isto no Markdown:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;post.md&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;md&quot; class=&quot;wrap&quot; style=&quot;--ecMaxLine:24ch&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;:::note[título opcional]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;Texto do aviso.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;:::&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;o-que-mudou-por-fora&quot;&gt;O que mudou por fora&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Visual novo&lt;/strong&gt;: paleta &lt;a href=&quot;https://stephango.com/flexoki&quot; target=&quot;_blank&quot; rel=&quot;external nofollow noopener noreferrer&quot;&gt;Flexoki&lt;/a&gt; (tons quentes, com uma textura sutil de papel no fundo), fonte Figtree e JetBrains Mono no código, e um header flutuante com efeito de vidro (Liquid Glass).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Imagens nos posts&lt;/strong&gt;: a versão antiga não tinha capas. Usei I.A. para gerar imagens para os posts antigos, e os posts novos também terão imagens, que podem ou não ter a ver com o texto.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Categorias&lt;/strong&gt;: eu quero escrever sobre vários assuntos e não só sobre desenvolvimento e tecnologia, então os posts agora se dividem em &lt;strong&gt;Dev&lt;/strong&gt; e &lt;strong&gt;Miscelânea&lt;/strong&gt;, cada uma com a própria página e filtro no blog. As tags também ganharam páginas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Projetos&lt;/strong&gt;: uma página nova mostrando o que eu construo e mantenho, como o &lt;a href=&quot;https://randys.dev/projetos/buscacep/&quot;&gt;Busca CEP&lt;/a&gt; e o &lt;a href=&quot;https://randys.dev/projetos/por-onde-andei/&quot;&gt;Por Onde Andei&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RSS completo&lt;/strong&gt; em &lt;a href=&quot;https://randys.dev/rss.xml&quot;&gt;/rss.xml&lt;/a&gt;, com o texto inteiro dos posts para quem usa leitor de RSS.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Acessibilidade&lt;/strong&gt; revisada: navegação por teclado, contraste das cores e hierarquia de títulos.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;os-números&quot;&gt;Os números&lt;/h2&gt;
&lt;p&gt;Medi as duas versões no mesmo computador, com o build de produção e o Lighthouse, sem o Google Analytics nas duas (para não entrar script de terceiros na conta):&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Versão 2.0&lt;/th&gt;
&lt;th&gt;Versão 3.0&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;JavaScript no primeiro carregamento (post)&lt;/td&gt;
&lt;td&gt;102 kB&lt;/td&gt;
&lt;td&gt;2,4 kB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Peso total da home&lt;/td&gt;
&lt;td&gt;336 KiB&lt;/td&gt;
&lt;td&gt;106 KiB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Peso total de um post&lt;/td&gt;
&lt;td&gt;342 KiB&lt;/td&gt;
&lt;td&gt;171 KiB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LCP da home&lt;/td&gt;
&lt;td&gt;2,4 s&lt;/td&gt;
&lt;td&gt;1,4 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tempo bloqueando a página (TBT)&lt;/td&gt;
&lt;td&gt;40 ms&lt;/td&gt;
&lt;td&gt;0 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lighthouse: performance (home / post)&lt;/td&gt;
&lt;td&gt;98 / 97&lt;/td&gt;
&lt;td&gt;100 / 99&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lighthouse: acessibilidade (post)&lt;/td&gt;
&lt;td&gt;96&lt;/td&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tempo de build&lt;/td&gt;
&lt;td&gt;32 s&lt;/td&gt;
&lt;td&gt;3 s&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;A versão antiga já era rápida. A diferença está em não carregar o que não é usado. O pouco de JavaScript que sobrou serve para o botão de tema, o menu do celular, o índice lateral dos posts e o botão de copiar código.&lt;/p&gt;
&lt;h2 id=&quot;o-que-ficou-de-fora-por-enquanto&quot;&gt;O que ficou de fora (por enquanto)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Comentários&lt;/strong&gt;: a versão antiga tinha comentários pelo Giscus. Ainda não trouxe para cá. Estou pensando se implemento ou não nesta nova versão.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Notas&lt;/strong&gt;: a antiga seção de notas curtas não foi migrada; os posts dela ficaram na versão 2.0.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Nada disso se perdeu: a versão 2.0 continua guardada no repositório, na tag &lt;code&gt;v2.0&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;o-que-vem-por-aí&quot;&gt;O que vem por aí&lt;/h2&gt;
&lt;p&gt;Agora que a base está pronta, quero usar o blog para mais do que posts. A próxima ideia é uma área mostrando o que estou lendo, assistindo e ouvindo. Se quiser acompanhar, o &lt;a href=&quot;https://randys.dev/rss.xml&quot;&gt;RSS&lt;/a&gt; está aí.&lt;/p&gt;
&lt;p&gt;Valeu por ler até aqui! 🤘&lt;/p&gt;
</content:encoded><category>Dev</category><category>astro</category><category>nextjs</category><category>css</category><category>migracao</category></item><item><title>Como utilizar o Browsersync no WordPress</title><link>https://randys.dev/blog/como-utilizar-o-browsersync-no-wordpress/</link><guid isPermaLink="true">https://randys.dev/blog/como-utilizar-o-browsersync-no-wordpress/</guid><description>Use o Browsersync pra sincronizar as mudanças no código com o navegador e pare de dar reload na página manualmente.</description><pubDate>Mon, 19 Aug 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://randys.dev/_astro/cover.Duewlse6_Z1p8kCF.jpg&quot; alt=&quot;&quot; width=&quot;1200&quot; height=&quot;630&quot; /&gt;&lt;/p&gt;&lt;p&gt;No post anterior eu falei sobre as funcionalidades e benefícios de utilizar o &lt;code&gt;wordpress/scripts&lt;/code&gt; em seu projeto. Caso tenha perdido &lt;a href=&quot;http://localhost:3000/blog/o-que-e-o-wordpress-scripts-como-usa-lo-e-por-que-ele-e-essencial-para-seu-desenvolvimento-no-wordpress&quot; target=&quot;_blank&quot; rel=&quot;external nofollow noopener noreferrer&quot;&gt;clique aqui&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Agora quero continuar o post anterior adicionando um pouco mais de poder ao &lt;code&gt;wordpress/scripts&lt;/code&gt; utilizando o Browsersync para sincronizar o código que você está escrevendo e atualizando automaticamente a página sem precisar fazer o reload manualmente.&lt;/p&gt;
&lt;h2 id=&quot;o-que-é-o-browsersync&quot;&gt;O que é o Browsersync?&lt;/h2&gt;
&lt;p&gt;O BrowserSync é uma ferramenta que facilita o desenvolvimento web sincronizando automaticamente alterações do código com o navegador. Ele permite que você veja as mudanças do seu código em tempo real, sem precisar atualizar a página manualmente. Há outras funcionalidades que você pode explorar consultando a documentação.&lt;/p&gt;
&lt;h2 id=&quot;como-instalar&quot;&gt;Como instalar?&lt;/h2&gt;
&lt;p&gt;Para instalar é simples, somente executar o comando abaixo:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;bash&quot; class=&quot;wrap&quot; style=&quot;--ecMaxLine:35ch&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;browser-sync&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--save-dev&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Partirei do princípio que você é uma pessoa esperta e leu o post anterior e já tem a estrutura inicial no seu projeto 😉.&lt;br&gt;
Agora precisamos alterar o arquivo &lt;code&gt;package.json&lt;/code&gt; adicionando na parte de &lt;code&gt;scripts&lt;/code&gt; a seguinte linha de código:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;json&quot; class=&quot;wrap&quot; style=&quot;--ecMaxLine:79ch&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:3ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;   &lt;/span&gt;&lt;span&gt;&quot;scripts&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:6ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span&gt;&quot;sync&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;browser-sync start -p &lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;URL_DO_SEU_SITE&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt; --files &lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;**/*.php&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:3ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;É necessário substituir a palavra &lt;code&gt;URL_DO_SEU_SITE&lt;/code&gt; pela URL do servidor que está rodando a aplicação. Importante que não utilize as iniciais &lt;code&gt;http://&lt;/code&gt; ou &lt;code&gt;https://&lt;/code&gt; . Dependendo do servidor a URL pode ser algo como: &lt;code&gt;meu-site.local&lt;/code&gt;,   &lt;code&gt;meu-site.test&lt;/code&gt;, &lt;code&gt;localhost&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Explicando o código acima em poucas palavras, podemos dizer que ele está chamando o browsersync para iniciar o nosso site na URL indicada e ficar olhando os arquivos &lt;code&gt;.php&lt;/code&gt; que foram alterados e atualizar o site automaticamente.&lt;/p&gt;
&lt;h2 id=&quot;juntando-tudo&quot;&gt;Juntando tudo&lt;/h2&gt;
&lt;p&gt;Para que tudo funcione lindamente, precisamos juntar os scripts do &lt;code&gt;wordpress/scripts&lt;/code&gt; com o script do browsersync que acabamos de configurar. Para isso precisamos instalar um novo pacote que nos ajudar a executar tudo de uma vez.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;bash&quot; class=&quot;wrap&quot; style=&quot;--ecMaxLine:17ch&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;npm-run-all&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Agora vem a cereja do bolo, vamos criar um novo script chamado &lt;code&gt;dev&lt;/code&gt; que vai pegar nossos outros scripts e rodar todos juntos e em paralelo. No final nosso arquivo &lt;code&gt;package.json&lt;/code&gt; ficará assim:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;json&quot; class=&quot;wrap&quot; style=&quot;--ecMaxLine:79ch&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:3ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;   &lt;/span&gt;&lt;span&gt;&quot;scripts&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:6ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span&gt;&quot;dev&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;npm-run-all --parallel sync start&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:6ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span&gt;&quot;sync&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;browser-sync start -p &lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;URL_DO_SEU_SITE&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt; --files &lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;**/*.php&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:6ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span&gt;&quot;build&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;wp-scripts build&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:6ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span&gt;&quot;start&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;wp-scripts start&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:6ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span&gt;&quot;lint:js&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;wp-scripts lint-js&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:6ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span&gt;&quot;format&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;wp-scripts format&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:3ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;O script &lt;code&gt;dev&lt;/code&gt; está utilizando no pacote &lt;code&gt;npm-run-all&lt;/code&gt; que rodar vários scripts de uma só vez, neste caso nossos scripts &lt;code&gt;sync&lt;/code&gt; e &lt;code&gt;start&lt;/code&gt; em paralelo.&lt;/p&gt;
&lt;h2 id=&quot;conclusão-2&quot;&gt;Conclusão&lt;/h2&gt;
&lt;p&gt;Agora temos um script que fica de olho nos nossos arquivos &lt;code&gt;.php&lt;/code&gt; e atualiza a página automaticamente sempre que algo muda, graças ao BrowserSync. Legal, né?&lt;/p&gt;
&lt;p&gt;Espero que vocês tenham gostado e fique de olho pois vamos deixar esse script mais poderoso futuramente.&lt;/p&gt;
&lt;p&gt;Saudações,&lt;br&gt;
Grande Abraço!&lt;/p&gt;
&lt;p&gt;{/* ## O que é o &lt;code&gt;@wordpress/scripts&lt;/code&gt;?
O &lt;code&gt;@wordpress/scripts&lt;/code&gt; é um pacote NPM desenvolvido pela equipe do WordPress que facilita a configuração e a automação de tarefas comuns no desenvolvimento de temas e plugins. Ele foi criado para simplificar o processo de desenvolvimento, oferecendo uma série de scripts pré-configurados que lidam com tarefas como compilação, empacotamento e minificação de arquivos JavaScript e CSS.&lt;/p&gt;
&lt;h2 id=&quot;principais-funcionalidades-do-wordpressscripts&quot;&gt;Principais Funcionalidades do &lt;code&gt;@wordpress/scripts&lt;/code&gt;:&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Compilação com Babel:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;O &lt;code&gt;@wordpress/scripts&lt;/code&gt; utiliza Babel para transpilar o código ES6+ para uma versão compatível com navegadores mais antigos. Isso permite que você escreva código moderno sem se preocupar com a compatibilidade.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Empacotamento com Webpack:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Webpack é utilizado para empacotar todos os seus módulos JavaScript em um único arquivo. Ele também lida com importações de CSS e outras dependências, otimizando o carregamento de recursos no seu site.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Minificação de Arquivos:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;O pacote inclui scripts para minificar tanto os arquivos JavaScript quanto CSS, o que reduz o tamanho dos arquivos e melhora o desempenho do site.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Linting e Formatação de Código:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;O &lt;code&gt;@wordpress/scripts&lt;/code&gt; vem configurado com ESLint e Prettier, ferramentas que ajudam a manter a consistência e a qualidade do código, verificando erros e aplicando regras de estilo.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Watch Mode:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ele oferece um modo “watch” que recompila automaticamente os arquivos sempre que há uma mudança, agilizando o processo de desenvolvimento.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;por-que-utilizar-o-wordpressscripts&quot;&gt;Por que utilizar o &lt;code&gt;@wordpress/scripts&lt;/code&gt;?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Configuração Simples:&lt;/strong&gt; Ele elimina a necessidade de configurar ferramentas complexas individualmente, permitindo que você comece a desenvolver rapidamente.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Padrões do WordPress:&lt;/strong&gt; O pacote já vem configurado com as melhores práticas e padrões do WordPress, garantindo que seu código esteja alinhado com o ecossistema da plataforma.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Integração Facilmente Expandível:&lt;/strong&gt; Embora ofereça uma configuração pronta para uso, você pode customizá-lo conforme necessário, adicionando suas próprias ferramentas e ajustes.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;como-instalar-e-usar-o-wordpressscripts&quot;&gt;Como instalar e usar o &lt;code&gt;@wordpress/scripts&lt;/code&gt;?&lt;/h2&gt;
&lt;p&gt;Para começar a usar o &lt;code&gt;@wordpress/scripts&lt;/code&gt;, você precisa tê-lo instalado em seu projeto. Vale lembrar que é preciso ter o &lt;strong&gt;NodeJS&lt;/strong&gt; instado no teu computador, para funcionar.&lt;/p&gt;
&lt;p&gt;Aqui está um exemplo básico de como configurá-lo:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Instalação:&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;bash&quot; class=&quot;wrap&quot; style=&quot;--ecMaxLine:11ch&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;init&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-y&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;em seguida,&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;bash&quot; class=&quot;wrap&quot; style=&quot;--ecMaxLine:41ch&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;@wordpress/scripts&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--save-dev&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;&lt;strong&gt;Configuração do &lt;code&gt;package.json&lt;/code&gt;:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Adicione os seguintes scripts ao seu &lt;code&gt;package.json&lt;/code&gt;:&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;json&quot; class=&quot;wrap&quot; style=&quot;--ecMaxLine:40ch&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:4ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span&gt;&quot;scripts&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:8ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span&gt;&quot;build&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;wp-scripts build&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:8ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span&gt;&quot;start&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;wp-scripts start&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:8ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span&gt;&quot;lint:js&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;wp-scripts lint-js&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:8ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span&gt;&quot;format&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;wp-scripts format&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:4ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;&lt;strong&gt;Execução:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Para compilar o código em modo de produção: &lt;code&gt;npm run build&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Para iniciar o modo de desenvolvimento: &lt;code&gt;npm run start&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Com essas configurações, o &lt;code&gt;@wordpress/scripts&lt;/code&gt; cuidará da maioria das tarefas de desenvolvimento, permitindo que você foque no que realmente importa: criar um site incrível.&lt;/p&gt;
&lt;h2 id=&quot;conclusão-3&quot;&gt;Conclusão&lt;/h2&gt;
&lt;p&gt;O &lt;code&gt;@wordpress/scripts&lt;/code&gt; é uma ferramenta poderosa que simplifica o desenvolvimento no WordPress, tornando o processo mais rápido e eficiente. Ao utilizá-lo, você adere às melhores práticas do WordPress, garantindo que seu projeto esteja bem estruturado e otimizado.&lt;/p&gt;
&lt;p&gt;Nos próximos posts quero mostrar como utilizar o &lt;code&gt;@wordpress/scripts&lt;/code&gt; juntamente com o Browser Sync e TailwindCSS de forma simples é pratica. Fique ligado! 😉&lt;/p&gt;
&lt;p&gt;Saudações,&lt;br&gt;
Grande Abraço! */}&lt;/p&gt;
</content:encoded><category>Dev</category><category>wordpress</category></item><item><title>O que é o @wordpress/scripts, como usá-lo e por que ele é essencial para seu desenvolvimento</title><link>https://randys.dev/blog/o-que-e-o-wordpress-scripts-como-usa-lo-e-por-que-ele-e-essencial-para-seu-desenvolvimento-no-wordpress/</link><guid isPermaLink="true">https://randys.dev/blog/o-que-e-o-wordpress-scripts-como-usa-lo-e-por-que-ele-e-essencial-para-seu-desenvolvimento-no-wordpress/</guid><description>Conheça o @wordpress/scripts, uma ferramenta essencial que simplifica o desenvolvimento no WordPress. Descubra como utilizá-lo e por que ele é indispensável para otimizar e acelerar seus projetos de temas e plugins.</description><pubDate>Mon, 19 Aug 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://randys.dev/_astro/cover.CvnHZxq-_Z1W8szp.jpg&quot; alt=&quot;&quot; width=&quot;1200&quot; height=&quot;630&quot; /&gt;&lt;/p&gt;&lt;h2 id=&quot;o-que-é-o-wordpressscripts&quot;&gt;O que é o &lt;code&gt;@wordpress/scripts&lt;/code&gt;?&lt;/h2&gt;
&lt;p&gt;O &lt;code&gt;@wordpress/scripts&lt;/code&gt; é um pacote NPM desenvolvido pela equipe do WordPress que facilita a configuração e a automação de tarefas comuns no desenvolvimento de temas e plugins. Ele foi criado para simplificar o processo de desenvolvimento, oferecendo uma série de scripts pré-configurados que lidam com tarefas como compilação, empacotamento e minificação de arquivos JavaScript e CSS.&lt;/p&gt;
&lt;h2 id=&quot;principais-funcionalidades-do-wordpressscripts-1&quot;&gt;Principais Funcionalidades do &lt;code&gt;@wordpress/scripts&lt;/code&gt;:&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Compilação com Babel:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;O &lt;code&gt;@wordpress/scripts&lt;/code&gt; utiliza Babel para transpilar o código ES6+ para uma versão compatível com navegadores mais antigos. Isso permite que você escreva código moderno sem se preocupar com a compatibilidade.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Empacotamento com Webpack:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Webpack é utilizado para empacotar todos os seus módulos JavaScript em um único arquivo. Ele também lida com importações de CSS e outras dependências, otimizando o carregamento de recursos no seu site.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Minificação de Arquivos:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;O pacote inclui scripts para minificar tanto os arquivos JavaScript quanto CSS, o que reduz o tamanho dos arquivos e melhora o desempenho do site.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Linting e Formatação de Código:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;O &lt;code&gt;@wordpress/scripts&lt;/code&gt; vem configurado com ESLint e Prettier, ferramentas que ajudam a manter a consistência e a qualidade do código, verificando erros e aplicando regras de estilo.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Watch Mode:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ele oferece um modo “watch” que recompila automaticamente os arquivos sempre que há uma mudança, agilizando o processo de desenvolvimento.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;por-que-utilizar-o-wordpressscripts-1&quot;&gt;Por que utilizar o &lt;code&gt;@wordpress/scripts&lt;/code&gt;?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Configuração Simples:&lt;/strong&gt; Ele elimina a necessidade de configurar ferramentas complexas individualmente, permitindo que você comece a desenvolver rapidamente.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Padrões do WordPress:&lt;/strong&gt; O pacote já vem configurado com as melhores práticas e padrões do WordPress, garantindo que seu código esteja alinhado com o ecossistema da plataforma.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Integração Facilmente Expandível:&lt;/strong&gt; Embora ofereça uma configuração pronta para uso, você pode customizá-lo conforme necessário, adicionando suas próprias ferramentas e ajustes.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;como-instalar-e-usar-o-wordpressscripts-1&quot;&gt;Como instalar e usar o &lt;code&gt;@wordpress/scripts&lt;/code&gt;?&lt;/h2&gt;
&lt;p&gt;Para começar a usar o &lt;code&gt;@wordpress/scripts&lt;/code&gt;, você precisa tê-lo instalado em seu projeto. Vale lembrar que é preciso ter o &lt;strong&gt;NodeJS&lt;/strong&gt; instado no teu computador, para funcionar.&lt;/p&gt;
&lt;p&gt;Aqui está um exemplo básico de como configurá-lo:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Instalação:&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;bash&quot; class=&quot;wrap&quot; style=&quot;--ecMaxLine:11ch&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;init&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-y&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;em seguida,&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;bash&quot; class=&quot;wrap&quot; style=&quot;--ecMaxLine:41ch&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;@wordpress/scripts&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--save-dev&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;&lt;strong&gt;Configuração do &lt;code&gt;package.json&lt;/code&gt;:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Adicione os seguintes scripts ao seu &lt;code&gt;package.json&lt;/code&gt;:&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;json&quot; class=&quot;wrap&quot; style=&quot;--ecMaxLine:40ch&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:4ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span&gt;&quot;scripts&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:8ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span&gt;&quot;build&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;wp-scripts build&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:8ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span&gt;&quot;start&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;wp-scripts start&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:8ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span&gt;&quot;lint:js&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;wp-scripts lint-js&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:8ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span&gt;&quot;format&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;wp-scripts format&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:4ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;&lt;strong&gt;Execução:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Para compilar o código em modo de produção: &lt;code&gt;npm run build&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Para iniciar o modo de desenvolvimento: &lt;code&gt;npm run start&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Com essas configurações, o &lt;code&gt;@wordpress/scripts&lt;/code&gt; cuidará da maioria das tarefas de desenvolvimento, permitindo que você foque no que realmente importa: criar um site incrível.&lt;/p&gt;
&lt;h2 id=&quot;conclusão-5&quot;&gt;Conclusão&lt;/h2&gt;
&lt;p&gt;O &lt;code&gt;@wordpress/scripts&lt;/code&gt; é uma ferramenta poderosa que simplifica o desenvolvimento no WordPress, tornando o processo mais rápido e eficiente. Ao utilizá-lo, você adere às melhores práticas do WordPress, garantindo que seu projeto esteja bem estruturado e otimizado.&lt;/p&gt;
&lt;p&gt;Nos próximos posts quero mostrar como utilizar o &lt;code&gt;@wordpress/scripts&lt;/code&gt; juntamente com o Browser Sync e TailwindCSS de forma simples é pratica. Fique ligado! 😉&lt;/p&gt;
&lt;p&gt;Saudações,&lt;br&gt;
Grande Abraço!&lt;/p&gt;
</content:encoded><category>Dev</category><category>wordpress</category></item><item><title>Como adicionar fontes do Google de forma segura no WordPress utilizando o arquivo theme.json</title><link>https://randys.dev/blog/como-adicionar-fontes-do-google-de-forma-segura-no-wordpress-utilizando-o-arquivo-theme-json/</link><guid isPermaLink="true">https://randys.dev/blog/como-adicionar-fontes-do-google-de-forma-segura-no-wordpress-utilizando-o-arquivo-theme-json/</guid><description>Guia passo a passo de como adicionar fontes do Google no seu site WordPress de forma segura e otimizada, utilizando o arquivo theme.json.</description><pubDate>Fri, 16 Aug 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://randys.dev/_astro/cover.vyM8Ol31_134Yno.jpg&quot; alt=&quot;&quot; width=&quot;1200&quot; height=&quot;630&quot; /&gt;&lt;/p&gt;&lt;h2 id=&quot;introdução-1&quot;&gt;Introdução&lt;/h2&gt;
&lt;p&gt;No WordPress, a maneira tradicional de adicionar fontes do Google utilizando links disponibilizados pela Google Fonts pode acarretar problemas de privacidade, especialmente em relação a &lt;strong&gt;GDPR&lt;/strong&gt;, ao expor dados de usuários, como o endereço IP. Um exemplo disso é um site que foi multado por uma corte alemã por utilizar fontes hospedadas pelo Google de forma inadequada. Você pode ler mais sobre este caso neste &lt;a href=&quot;https://wptavern.com/german-court-fines-website-owner-for-violating-the-gdpr-by-using-google-hosted-fonts&quot; target=&quot;_blank&quot; rel=&quot;external nofollow noopener noreferrer&quot;&gt;artigo em inglês&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Para resolver esse problema, a equipe do WordPress desenvolveu uma solução integrada ao projeto Gutenberg, centralizando a configuração de fontes no arquivo &lt;code&gt;theme.json&lt;/code&gt;. Este método não apenas melhora a privacidade, mas também pode aumentar a velocidade do seu site e simplificar o desenvolvimento, ao evitar a necessidade de configurar o &lt;code&gt;@font-face&lt;/code&gt; manualmente.&lt;/p&gt;
&lt;h2 id=&quot;o-que-é-o-themejson&quot;&gt;O que é o &lt;code&gt;theme.json&lt;/code&gt;?&lt;/h2&gt;
&lt;p&gt;Introduzido no WordPress 5.8 como parte do projeto Gutenberg, o arquivo theme.json permite centralizar várias configurações do tema, incluindo paleta de cores, tipografia e outras definições globais. Este arquivo pode ser utilizado tanto em temas clássicos quanto em temas baseados em blocos. Mais detalhes podem ser encontrados na &lt;a href=&quot;https://developer.wordpress.org/themes/global-settings-and-styles/&quot; target=&quot;_blank&quot; rel=&quot;external nofollow noopener noreferrer&quot;&gt;documentação oficial do WordPress&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;como-adicionar-fontes-do-google-no-wordpress&quot;&gt;Como Adicionar Fontes do Google no WordPress?&lt;/h2&gt;
&lt;h3 id=&quot;passo-1-escolha-e-baixe-a-fonte&quot;&gt;Passo 1: Escolha e Baixe a Fonte&lt;/h3&gt;
&lt;p&gt;Acesse o site &lt;strong&gt;Google Fonts&lt;/strong&gt;, escolha a fonte desejada e faça o download. Por exemplo, para utilizar a fonte &lt;strong&gt;“Inter”&lt;/strong&gt;, baixe o arquivo correspondente e adicione-o ao seu tema WordPress. É recomendável criar uma pasta chamada assets e, dentro dela, uma subpasta fonts onde os arquivos de fontes serão armazenados. Note que os arquivos baixados podem estar no formato &lt;strong&gt;.ttf&lt;/strong&gt;, que não é ideal para a web. Os formatos mais recomendados para uso na web são &lt;strong&gt;.woff&lt;/strong&gt; e &lt;strong&gt;.woff2&lt;/strong&gt;, que oferecem melhor desempenho e compatibilidade. Para converter os arquivos &lt;strong&gt;.ttf&lt;/strong&gt; em &lt;strong&gt;.woff&lt;/strong&gt; ou &lt;strong&gt;.woff2&lt;/strong&gt;, utilize um conversor online como o &lt;a href=&quot;https://convertio.co/pt/ttf-woff/&quot; target=&quot;_blank&quot; rel=&quot;external nofollow noopener noreferrer&quot;&gt;Convertio&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;passo-2-criação-e-configuração-do-themejson&quot;&gt;Passo 2: Criação e Configuração do &lt;code&gt;theme.json&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Crie um arquivo chamado &lt;code&gt;theme.json&lt;/code&gt; na raiz do seu tema e adicione o seguinte código básico:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;json&quot; class=&quot;wrap&quot; style=&quot;--ecMaxLine:57ch&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:4ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span&gt;&quot;$schema&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;https://schemas.wp.org/trunk/theme.json&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:4ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span&gt;&quot;version&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:4ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span&gt;&quot;settings&quot;&lt;/span&gt;&lt;span&gt;: {}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h3 id=&quot;passo-3-configurando-a-tipografia-no-themejson&quot;&gt;Passo 3: Configurando a Tipografia no &lt;code&gt;theme.json&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Para adicionar a fonte, insira a configuração de tipografia dentro do objeto &lt;code&gt;settings&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;json&quot; class=&quot;wrap&quot; style=&quot;--ecMaxLine:91ch&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:4ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span&gt;&quot;$schema&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;https://schemas.wp.org/trunk/theme.json&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:4ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span&gt;&quot;version&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:4ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span&gt;&quot;settings&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:8ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span&gt;&quot;typography&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:12ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span&gt;&quot;fontFamilies&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:16ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:20ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                    &lt;/span&gt;&lt;span&gt;&quot;slug&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;inter&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:20ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                    &lt;/span&gt;&lt;span&gt;&quot;name&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;Inter&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:20ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                    &lt;/span&gt;&lt;span&gt;&quot;fontFamily&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;Inter&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;, sans-serif&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:20ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                    &lt;/span&gt;&lt;span&gt;&quot;fontFace&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:24ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span&gt;                        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:28ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                            &lt;/span&gt;&lt;span&gt;&quot;fontFamily&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;inter&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:28ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                            &lt;/span&gt;&lt;span&gt;&quot;src&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:32ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                                &lt;/span&gt;&lt;span&gt;&quot;file:./assets/fonts/inter/inter-VariableFont_opz,wght.ttf&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:28ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span&gt;                            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:28ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                            &lt;/span&gt;&lt;span&gt;&quot;fontStyle&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;normal&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:28ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                            &lt;/span&gt;&lt;span&gt;&quot;fontWeight&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;300 400 500 600 700&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:24ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span&gt;                        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:20ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span&gt;                    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:16ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:12ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:8ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:4ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;usando-a-fonte-no-backend-do-wordpress&quot;&gt;Usando a Fonte no Backend do WordPress&lt;/h2&gt;
&lt;p&gt;Agora que configuramos a fonte, vá ao painel administrativo do WordPress e acesse a área de posts do seu site. No editor de posts, localize o menu &lt;strong&gt;“Tipografia”&lt;/strong&gt; no lado direito. Clique nos três pontinhos para expandir as opções e selecione &lt;strong&gt;“Fonte”&lt;/strong&gt;. A fonte que configuramos estará disponível para uso.&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;quot;alt&amp;quot;:&amp;quot;Imagem da opção de tipografia na área de posts do wordpress&amp;quot;,&amp;quot;title&amp;quot;:&amp;quot;Imagem da opção de tipografia na área de posts do wordpress&amp;quot;,&amp;quot;src&amp;quot;:&amp;quot;./tipografia-1.png&amp;quot;,&amp;quot;index&amp;quot;:0}&quot;&gt;&lt;/p&gt;
&lt;p&gt;Você poderá utilizar a fonte em qualquer parte do WordPress onde a tipografia estiver disponível. Os pesos das fontes, que também configuramos, estarão acessíveis também no menu &lt;strong&gt;“Tipografia”&lt;/strong&gt; na opção de &lt;strong&gt;“Aparência”&lt;/strong&gt;, permitindo personalizações adicionais.&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;quot;alt&amp;quot;:&amp;quot;Imagem da opção de peso da tipografia na área de posts do wordpress&amp;quot;,&amp;quot;title&amp;quot;:&amp;quot;Imagem da opção de peso da tipografia na área de posts do wordpress&amp;quot;,&amp;quot;src&amp;quot;:&amp;quot;./tipografia-2.png&amp;quot;,&amp;quot;index&amp;quot;:0}&quot;&gt;&lt;/p&gt;
&lt;p&gt;Após realizar as alterações, salve o post e visualize-o no frontend do site. Todas as mudanças feitas no backend serão replicadas com sucesso no frontend, garantindo que o estilo aplicado esteja consistente em ambas as interfaces.&lt;/p&gt;
&lt;h2 id=&quot;variável-global&quot;&gt;Variável Global&lt;/h2&gt;
&lt;p&gt;Como mencionado anteriormente, ao configurar uma fonte no &lt;code&gt;theme.json&lt;/code&gt;, o WordPress gera automaticamente uma variável CSS global. Para descobrir o nome exato dessa variável, inspecione o código do site utilizando as ferramentas de desenvolvedor do navegador. Você verá que uma classe relacionada à nova fonte foi adicionada, algo como &lt;code&gt;has-inter-font-family&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;quot;alt&amp;quot;:&amp;quot;Imagem da variável aplicada no frontend&amp;quot;,&amp;quot;title&amp;quot;:&amp;quot;Imagem da variável aplicada no frontend&amp;quot;,&amp;quot;src&amp;quot;:&amp;quot;./css-var.png&amp;quot;,&amp;quot;index&amp;quot;:0}&quot;&gt;&lt;/p&gt;
&lt;p&gt;O nome da variável pode variar conforme o nome e as configurações da fonte que você escolheu. Essa variável estará disponível globalmente e pode ser utilizada em qualquer arquivo CSS do seu site. Por exemplo, ao inspecionar o código nas opções de style, você encontrará algo como &lt;code&gt;--wp--preset--font-family--inter&lt;/code&gt;. Essa variável pode ser usada para aplicar a fonte personalizada em qualquer parte do seu site.&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;quot;alt&amp;quot;:&amp;quot;Imagem da variável global aplicada no frontend&amp;quot;,&amp;quot;title&amp;quot;:&amp;quot;Imagem da variável global aplicada no frontend&amp;quot;,&amp;quot;src&amp;quot;:&amp;quot;./css-global-var.png&amp;quot;,&amp;quot;index&amp;quot;:0}&quot;&gt;&lt;/p&gt;
&lt;p&gt;Incrível, não é?&lt;/p&gt;
&lt;h2 id=&quot;conclusão-1&quot;&gt;Conclusão&lt;/h2&gt;
&lt;p&gt;Seguindo este passo a passo, você pode adicionar fontes do Google ao seu tema WordPress de forma segura e otimizada, evitando problemas com a &lt;strong&gt;GDPR&lt;/strong&gt; e melhorando a performance do seu site. Se tiver dúvidas, sinta-se à vontade para deixá-las nos comentários abaixo.&lt;/p&gt;
&lt;p&gt;Saudações,&lt;br&gt;
Grande Abraço!&lt;/p&gt;
</content:encoded><category>Dev</category><category>wordpress</category></item><item><title>Nova função light-dark do CSS: Adaptando tema claro e escuro automaticamente</title><link>https://randys.dev/blog/nova-funcao-light-dark-do-css-adaptando-tema-claro-e-escuro-automaticamente/</link><guid isPermaLink="true">https://randys.dev/blog/nova-funcao-light-dark-do-css-adaptando-tema-claro-e-escuro-automaticamente/</guid><description>Descubra como implementar a nova função light-dark do CSS, permitindo que suas interfaces web se ajustem automaticamente ao tema claro e escuro do sistema operacional ou às preferências do usuário.</description><pubDate>Fri, 26 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://randys.dev/_astro/cover.DsHlXw10_19Pc6Y.jpg&quot; alt=&quot;&quot; width=&quot;1200&quot; height=&quot;630&quot; /&gt;&lt;/p&gt;&lt;p&gt;Embora existam várias maneiras de adaptar um tema claro e escuro em interfaces web, a nova função light-dark do CSS simplifica consideravelmente o processo.&lt;br&gt;
Anteriormente, precisávamos recorrer a soluções complexas e às vezes trabalhosas para alcançar esse efeito desejado. No entanto, com a introdução da função light-dark, essa tarefa se tornou muito mais simples. Agora, implementar um esquema de cores adaptável ao tema claro e escuro é tão fácil quanto usar uma única função CSS.&lt;/p&gt;
&lt;h2 id=&quot;o-que-é-a-função-light-dark&quot;&gt;O que é a função light-dark?&lt;/h2&gt;
&lt;p&gt;A função permite definir duas cores para uma propriedade, retornando uma delas com base na detecção do esquema de cores preferido pelo usuário ou do tema claro ou escuro do sistema operacional. Isso significa que podemos adaptar dinamicamente as cores de seus elementos sem a necessidade de consultar diretamente o esquema de cores preferenciais do usuário ou do sistema operacional.&lt;/p&gt;
&lt;h2 id=&quot;como-funciona&quot;&gt;Como funciona?&lt;/h2&gt;
&lt;p&gt;Como dito anteriormente a função aceita dois valores de cores &lt;code&gt;light-dark(&amp;lt;color1&amp;gt;, &amp;lt;color2&amp;gt;)&lt;/code&gt; onde qualquer valor de cor CSS é válido. Ela retorna o primeiro valor se a preferência do usuário ou do sistema estiver definida como light (clara), e o segundo valor se estiver definida como dark (escura).&lt;br&gt;
Ficou confuso? Vamos dar uma olhada em um exemplo prático para entender melhor.&lt;/p&gt;
&lt;h2 id=&quot;passo-1-definindo-o-color-scheme&quot;&gt;Passo 1: Definindo o &lt;code&gt;color-scheme&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;Antes de usar a função &lt;code&gt;light-dark()&lt;/code&gt;, é importante definir o &lt;code&gt;color-scheme&lt;/code&gt; no elemento &lt;code&gt;:root&lt;/code&gt; do seu documento CSS. Isso informa ao navegador que o documento deve ser renderizado com um esquema de cores preferido que inclui tanto cores claras quanto escuras. Adicione o seguinte código ao seu arquivo CSS:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;css&quot; class=&quot;wrap&quot; style=&quot;--ecMaxLine:29ch&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;:root&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:4ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span&gt;color-scheme&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;light&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dark&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;passo-2-usando-a-função-light-dark&quot;&gt;Passo 2: Usando a função &lt;code&gt;light-dark()&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;Agora que o &lt;code&gt;color-scheme&lt;/code&gt; está definido, você pode usar a função &lt;code&gt;light-dark()&lt;/code&gt; para ajustar automaticamente as cores com base na preferência do usuário. Vamos abordar um exemplo comum na web, onde definiremos tons de preto e branco para cada esquema de cores. Você pode seguir os passos abaixo:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;css&quot; class=&quot;wrap&quot; style=&quot;--ecMaxLine:46ch&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:2ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span&gt;background-color&lt;/span&gt;&lt;span&gt;: light-dark(&lt;/span&gt;&lt;span&gt;white&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;#09090B&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;h1&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:4ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span&gt;color&lt;/span&gt;&lt;span&gt;: light-dark(&lt;/span&gt;&lt;span&gt;#111827&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;white&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;passo-3-testando-e-ajustando&quot;&gt;Passo 3: Testando e ajustando&lt;/h2&gt;
&lt;p&gt;Após implementar a funcionalidade light-dark, você pode testá-la diretamente no seu navegador, sem precisar escrever código JavaScript. Por exemplo, no Google Chrome, abra as Ferramentas do Desenvolvedor clicando com o botão direito e selecionando &lt;strong&gt;“Inspecionar”&lt;/strong&gt;. Vá até o menu &lt;strong&gt;“Customize and constrol Dev Tools”&lt;/strong&gt; representado por três pontos, que pode ser encontrado no topo direito da aba, depois em &lt;strong&gt;“More tools”&lt;/strong&gt; e em seguida clique na opção &lt;strong&gt;“Rendering”&lt;/strong&gt;, conforme imagem abaixo:&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;quot;alt&amp;quot;:&amp;quot;Ferramentas do Desenvolvedor do Google Chrome&amp;quot;,&amp;quot;title&amp;quot;:&amp;quot;Imagem Ferramentas do Desenvolvedor do Google Chrome&amp;quot;,&amp;quot;src&amp;quot;:&amp;quot;./dev-tools-1.png&amp;quot;,&amp;quot;index&amp;quot;:0}&quot;&gt;&lt;/p&gt;
&lt;p&gt;Nas opções que se abrem encontre a opção &lt;strong&gt;“Emulate CSS media feature prefers-color-scheme”&lt;/strong&gt; e altere entre as opções light e dark, e veja a mudança no navegador, conforme abaixo:&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;quot;alt&amp;quot;:&amp;quot;Configurações avançadas da ferramentas de desenvolvedor do Google Chrome&amp;quot;,&amp;quot;title&amp;quot;:&amp;quot;Configurações avançadas da ferramentas de desenvolvedor do Google Chrome&amp;quot;,&amp;quot;src&amp;quot;:&amp;quot;./dev-tools-2.png&amp;quot;,&amp;quot;index&amp;quot;:0}&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Obs.:&lt;/strong&gt; É importante testar sua aplicação em diferentes dispositivos e sistemas operacionais para garantir que a adaptação de cores funcione conforme esperado. Você também pode ajustar as cores de acordo com as preferências visuais do seu projeto.&lt;/p&gt;
&lt;h2 id=&quot;por-que-isso-é-importante&quot;&gt;Por que isso é importante?&lt;/h2&gt;
&lt;p&gt;Adaptabilidade é a chave para uma ótima experiência do usuário. Com a funcionalidade light-dark, nos desenvolvedores podemos garantir que as interfaces se ajustem perfeitamente ao tema preferido do usuário, proporcionando uma experiência mais coesa e agradável.&lt;/p&gt;
&lt;h2 id=&quot;compatibilidade&quot;&gt;Compatibilidade&lt;/h2&gt;
&lt;p&gt;Embora a funcionalidade light-dark do CSS ofereça uma maneira conveniente de adaptar automaticamente as cores da sua aplicação com base nas preferências do usuário, é importante estar ciente de que nem todos os navegadores oferecem suporte total a essa funcionalidade.&lt;br&gt;
Portanto, ao implementá-la em seus projetos, é essencial realizar testes abrangentes em uma variedade de navegadores e dispositivos para garantir que a adaptação de cores funcione conforme o esperado em todas as plataformas.&lt;br&gt;
Isso pode envolver a utilização de ferramentas de teste e validação, além de ajustes manuais, se necessário, para garantir uma experiência consistente para todos os usuários, independentemente do navegador que estiverem utilizando.&lt;br&gt;
Uma boa dica é ficar de olho nos sites abaixo para acompanhar o desenvolvimento e adaptação da funcionalidade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://drafts.csswg.org/css-color-5/#light-dark&quot; target=&quot;_blank&quot; rel=&quot;external nofollow noopener noreferrer&quot;&gt;W3C Drafts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://caniuse.com/?search=light-dark&quot; target=&quot;_blank&quot; rel=&quot;external nofollow noopener noreferrer&quot;&gt;Can I Use&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/light-dark&quot; target=&quot;_blank&quot; rel=&quot;external nofollow noopener noreferrer&quot;&gt;MDN&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;conclusão-4&quot;&gt;Conclusão&lt;/h2&gt;
&lt;p&gt;A funcionalidade light-dark do CSS é uma adição poderosa ao arsenal de qualquer desenvolvedor front-end. Com sua capacidade de criar interfaces adaptáveis e visualmente atraentes, ela está definida para se tornar um padrão na criação de experiências digitais modernas.&lt;br&gt;
Experimente esta técnica em seus projetos e veja como ela pode melhorar a usabilidade e a atratividade das suas criações!&lt;/p&gt;
&lt;p&gt;Saudações,&lt;br&gt;
Grande Abraço!&lt;/p&gt;
</content:encoded><category>Dev</category><category>css</category></item><item><title>Bem-vindos a versão 2.0 do blog</title><link>https://randys.dev/blog/bem-vindos-a-versao-20-do-blog/</link><guid isPermaLink="true">https://randys.dev/blog/bem-vindos-a-versao-20-do-blog/</guid><description>Uma nova era de conteúdo com Next.js 14, Tailwind CSS, Shadcn UI, TypeScript, Velite e MDX. Junte-se a mim nesta jornada de descoberta e aprendizado!</description><pubDate>Fri, 19 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;E aí, pessoal! É com grande entusiasmo que hoje trago para vocês o lançamento oficial da versão 2.0 do meu blog. Depois de semanas de dedicação e muito trabalho árduo, estou extremamente empolgado para compartilhar com todos vocês as novidades e melhorias que implementei.&lt;/p&gt;
&lt;p&gt;Então, o que há de novo nesta versão, vocês podem estar se perguntando? Bem, vamos lá!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Next.js 14&lt;/strong&gt;: Decidi dar um grande salto e migrar para o Next.js 14 para potencializar a experiência de navegação. Com sua eficiência e desempenho aprimorados, tenho certeza de que vocês notarão uma diferença significativa ao acessar o blog.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tailwind CSS&lt;/strong&gt;: Quanto ao design, adotei o Tailwind CSS para criar uma estética moderna e limpa. Sua abordagem baseada em classes tornou a estilização mais eficiente e flexível, permitindo-me personalizar cada elemento de acordo com minhas preferências.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Shadcn UI&lt;/strong&gt;: Para os componentes da interface do usuário, escolhi o Shadcn UI. Sua vasta coleção de componentes prontos para uso me permitiu construir páginas de forma rápida e sem complicações, mantendo um visual consistente em todo o blog.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TypeScript&lt;/strong&gt;: Em termos de desenvolvimento, adotei o TypeScript para garantir um código mais robusto e seguro. Com sua tipagem estática, pude detectar e corrigir erros mais rapidamente, proporcionando uma experiência de desenvolvimento mais tranquila.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Velite&lt;/strong&gt;: Uma ferramenta para construir uma camada de dados segura por tipo, transformando Markdown/MDX, YAML, JSON ou outros arquivos em uma camada de dados do aplicativo com esquema Zod.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;MDX&lt;/strong&gt;: Por fim, para a criação de conteúdo, adotei o MDX, uma poderosa extensão do Markdown que me permite incorporar componentes React diretamente nos meus posts. Com isso, posso criar conteúdos mais dinâmicos e interativos para vocês, meus queridos leitores.&lt;/p&gt;
&lt;p&gt;Em resumo, a versão 2.0 representa não apenas uma atualização, mas sim uma evolução significativa na minha jornada de conhecimento e experiências. Estou animado para ver como essas novas ferramentas e tecnologias irão enriquecer e tornar a experiência ainda mais gratificante.&lt;/p&gt;
&lt;p&gt;Por favor, sintam-se à vontade para explorar o novo blog, ler os posts recentes e deixar seus comentários e feedback pois stou sempre aberto a sugestões e melhorias.&lt;/p&gt;
&lt;p&gt;Saudações,&lt;/p&gt;
&lt;p&gt;Grande abraço!&lt;/p&gt;
</content:encoded><category>Miscelânea</category><category>blog</category></item><item><title>Diferença entre var, let e const</title><link>https://randys.dev/blog/diferenca-entre-var-let-e-const/</link><guid isPermaLink="true">https://randys.dev/blog/diferenca-entre-var-let-e-const/</guid><description>Guia definitivo para entender as diferenças entre var, let e const, além de escopo e hoisting</description><pubDate>Thu, 25 May 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://randys.dev/_astro/cover.CD6ganJV_IQtfp.jpg&quot; alt=&quot;&quot; width=&quot;1200&quot; height=&quot;630&quot; /&gt;&lt;/p&gt;&lt;p&gt;Atualmente há três formas de se declarar variáveis em JavaScript, utilizando as palavras &lt;code&gt;var&lt;/code&gt;, &lt;code&gt;let&lt;/code&gt; e &lt;code&gt;const&lt;/code&gt;. Todas as formas são aceitas, mas a partir da versão &lt;strong&gt;ES6/ES2015&lt;/strong&gt; do JavaScript uma das medidas que foi adotada foi a utilização da sintaxe com &lt;code&gt;const&lt;/code&gt; e &lt;code&gt;let&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Mas o que torna diferente do &lt;code&gt;var&lt;/code&gt;? Se você não sabe, este artigo é para você.&lt;/p&gt;
&lt;p&gt;Aqui, vou abordar a diferença entre &lt;code&gt;var&lt;/code&gt;, &lt;code&gt;let&lt;/code&gt; e &lt;code&gt;const&lt;/code&gt; com relação ao &lt;strong&gt;escopo&lt;/strong&gt; e &lt;strong&gt;hoisting&lt;/strong&gt;, que é um dos principais problemas que foi solucionado com o &lt;code&gt;const&lt;/code&gt; e &lt;code&gt;let&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Antes de mais nada precisamos entender dois conceitos importantes que são escopo e hoisting.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;escopo&quot;&gt;Escopo&lt;/h2&gt;
&lt;p&gt;É o local onde as variáveis ou expressões são declaradas dentro do código. Por exemplo, uma função cria um escopo, se uma variável for declarada dentro desta função ela não poderá ser acessada fora da função ou dentro de outras funções.&lt;/p&gt;
&lt;h2 id=&quot;hoisting&quot;&gt;Hoisting&lt;/h2&gt;
&lt;p&gt;O hoisting foi introduzido no &lt;strong&gt;ES6&lt;/strong&gt; e foi pensado sobre como o código JavaScript funciona em modo de execução. Para definir o hoisting em palavras simples podemos dizer que todas as declarações de variáveis e funções são movidas para o topo do seu código antes dele ser executado.&lt;/p&gt;
&lt;p&gt;Contudo não é isso que realmente acontece, as declarações de variáveis e funções são colocados em memória durante a fase de execução, mas permanece exatamente onde você as declarou no código.&lt;/p&gt;
&lt;p&gt;Agora que foi esclarecido esses dois termos vamos falar um pouco sobre as variáveis declaradas com o &lt;code&gt;var&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;var&quot;&gt;Var&lt;/h2&gt;
&lt;p&gt;Antes do ES6 as variáveis eram declaradas com o &lt;code&gt;var&lt;/code&gt;, essa era a regra. Todavia havia problemas relacionados a essa declaração, por isso foi necessário o surgimento das duas novas formas. Antes de tudo, vamos entender o comportamento do &lt;code&gt;var&lt;/code&gt; e depois discutir seus problemas.&lt;/p&gt;
&lt;h2 id=&quot;variáveis-com-var-podem-ser-redeclaradas-e-atualizadas&quot;&gt;Variáveis com var podem ser redeclaradas e atualizadas&lt;/h2&gt;
&lt;p&gt;Em outras palavras significa que podemos criar uma variável e alterar o valor que foi atribuído a ela. Isso pode ser feito de duas formas, veja abaixo:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;javascript&quot; class=&quot;wrap&quot; style=&quot;--ecMaxLine:22ch&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; name &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Bastião&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; name &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Bastiana&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;// ou&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; number &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;20&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;number &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;30&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;escopo-de-var&quot;&gt;Escopo de var&lt;/h2&gt;
&lt;p&gt;A declaração utilizando o &lt;code&gt;var&lt;/code&gt; tem três escopos: &lt;strong&gt;global&lt;/strong&gt;, &lt;strong&gt;de função&lt;/strong&gt; ou &lt;strong&gt;local&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;O escopo global é quando a variável é declarada fora de uma função, em outras palavras qualquer variável declarada com &lt;code&gt;var&lt;/code&gt; fora de um bloco de função pode ser utilizada em todo o arquivo.&lt;/p&gt;
&lt;p&gt;Sob o mesmo ponto de vista, quando a variável for declarada dentro de uma função significa que ela está disponível e pode ser acessada somente dentro da função correspondente.&lt;/p&gt;
&lt;p&gt;Veja o exemplo:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;javascript&quot; class=&quot;wrap&quot; style=&quot;--ecMaxLine:21ch&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; name &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Bastião&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sayHello&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:2ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; hello &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Olá!&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Aqui a variável &lt;code&gt;name&lt;/code&gt; tem escopo global, pois foi declarada fora da função, enquanto a variável &lt;code&gt;hello&lt;/code&gt; tem escopo de função por ser declarada dentro da função. Neste sentido, não é possível acessar a variável &lt;code&gt;hello&lt;/code&gt; fora da função, se você tentar acessá-la um erro será retornado informando que &lt;code&gt;hello&lt;/code&gt; não foi definida.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;javascript&quot; class=&quot;wrap&quot; style=&quot;--ecMaxLine:44ch&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; name &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Bastião&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sayHello&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:2ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; hello &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Olá!&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;console.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(hello); &lt;/span&gt;&lt;span&gt;// helllo is not defined&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;hoisting-de-var&quot;&gt;Hoisting de var&lt;/h2&gt;
&lt;p&gt;Variáveis de &lt;code&gt;var&lt;/code&gt; sofrem o hoisting e vão para o topo do escopo, e elas são inicializadas com o valor de &lt;code&gt;undefined&lt;/code&gt;. Vejamos no código abaixo.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;javascript&quot; class=&quot;wrap&quot; style=&quot;--ecMaxLine:31ch&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; name;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;console.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(name); &lt;/span&gt;&lt;span&gt;// undefined&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;name &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Bastião&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;problemas-com-o-var&quot;&gt;Problemas com o var&lt;/h2&gt;
&lt;p&gt;O uso do &lt;code&gt;var&lt;/code&gt; tem um ponto fraco, que abordarei no código abaixo.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;javascript&quot; class=&quot;wrap&quot; style=&quot;--ecMaxLine:26ch&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; car &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Fusca&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:2ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; car &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Palio&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;console.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(car); &lt;/span&gt;&lt;span&gt;// Palio&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Inicialmente criamos a variável &lt;code&gt;car&lt;/code&gt; e atribuímos o valor &lt;code&gt;“Fusca”&lt;/code&gt;, quando chegar no &lt;code&gt;if&lt;/code&gt; a variável será redefinida para &lt;code&gt;“Palio”&lt;/code&gt;. A princípio você não verá um problema em atualizar o valor de &lt;code&gt;car&lt;/code&gt;, mas se tornará um problema a partir do momento em que você não se lembrar de já ter declarado essa variável antes.&lt;/p&gt;
&lt;p&gt;Imagine um código com várias linhas, nele é declarado inúmeras variáveis, consequentemente em algum momento você vai se surpreender com o resultado que vai receber e provavelmente poderá causar vários erros de código. Dessa forma é necessário o uso de &lt;code&gt;cont&lt;/code&gt; e &lt;code&gt;let&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Se você ainda não visualizou o problema do var no código acima, vou utilizar o mesmo código utilizando &lt;code&gt;let&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;let&quot;&gt;Let&lt;/h2&gt;
&lt;p&gt;Atualmente é a forma mais indicada para criação de variável no lugar do &lt;code&gt;var&lt;/code&gt;. Ele resolve o problema de escopo do &lt;code&gt;var&lt;/code&gt; que acabei de mostrar acima, bem como mantém o escopo de bloco, evita redeclaração, mas permite alterar o valor da variável.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;javascript&quot; class=&quot;wrap&quot; style=&quot;--ecMaxLine:53ch&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt; name &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Bastião&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt; name &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Bastiana&apos;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;// erro, name já foi declarado&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;// forma correta&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt; number &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;20&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;number &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;30&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Vejamos agora o mesmo código do problema com o var utilizando o &lt;code&gt;let&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;javascript&quot; class=&quot;wrap&quot; style=&quot;--ecMaxLine:26ch&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt; car &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Fusca&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:2ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt; car &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Palio&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;console.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(car); &lt;/span&gt;&lt;span&gt;// Fusca&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Perceba que o uso do &lt;code&gt;let&lt;/code&gt; impediu a redeclaração da variável &lt;code&gt;car&lt;/code&gt;, evitando gerar bugs e resultados inesperados no código.&lt;/p&gt;
&lt;h2 id=&quot;escopo-de-bloco&quot;&gt;Escopo de bloco&lt;/h2&gt;
&lt;p&gt;Antes de mais nada, precisamos falar sobre o escopo de bloco que é o comportamento do &lt;code&gt;let&lt;/code&gt; e &lt;code&gt;const&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Um bloco é criado com chaves &lt;code&gt;{ }&lt;/code&gt;, ou seja, tudo que está dentro das chaves é um bloco. Não confunda com a criação de objetos &lt;code&gt;={ }&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;escopo-de-let&quot;&gt;Escopo de Let&lt;/h2&gt;
&lt;p&gt;Uma variável declarada com &lt;code&gt;let&lt;/code&gt; dentro de um bloco, está disponível somente dentro daquele bloco.&lt;/p&gt;
&lt;p&gt;Vejamos no exemplo:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;javascript&quot; class=&quot;wrap&quot; style=&quot;--ecMaxLine:72ch&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt; fruit &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Maçã&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:2ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt; animal &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Gato&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:2ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(animal); &lt;/span&gt;&lt;span&gt;// retorna Gato&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;console.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(animal); &lt;/span&gt;&lt;span&gt;// animal is not defined - animal não foi definido.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Veja que a variável criada com &lt;code&gt;let&lt;/code&gt; dentro do bloco retorna um erro dizendo que ela não foi definida, pois &lt;code&gt;let&lt;/code&gt; tem escopo de bloco.&lt;/p&gt;
&lt;p&gt;Para finalizar o escopo de &lt;code&gt;let&lt;/code&gt; com chave de ouro, veja o código a seguir:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;javascript&quot; class=&quot;wrap&quot; style=&quot;--ecMaxLine:38ch&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt; car &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Fusca&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:2ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt; car &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Palio&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:2ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(car); &lt;/span&gt;&lt;span&gt;// retorna &quot;Palio&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;console.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(car); &lt;/span&gt;&lt;span&gt;// retorna &quot;Fusca&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Se você olhar rápido vai falar que é o mesmo código anterior que retornou erro informando que a variável não foi definida, mas não é.&lt;/p&gt;
&lt;p&gt;Mas porque não ocorre erro? Porque as instâncias de &lt;code&gt;car&lt;/code&gt; são tratadas como variáveis diferentes por estarem em escopos diferentes, em outras palavras, pelo simples fato de adicionar um &lt;code&gt;console.log()&lt;/code&gt; dentro do bloco &lt;code&gt;if&lt;/code&gt; o JavaScript é inteligente o suficiente para diferenciar as variáveis.&lt;/p&gt;
&lt;p&gt;Portanto é indicado utilizar &lt;code&gt;let&lt;/code&gt; ou invés de &lt;code&gt;var&lt;/code&gt; para declaração de variáveis.&lt;/p&gt;
&lt;h2 id=&quot;hoisting-de-let&quot;&gt;Hoisting de Let&lt;/h2&gt;
&lt;p&gt;Assim como o &lt;code&gt;var&lt;/code&gt;, as declarações de &lt;code&gt;let&lt;/code&gt; também sofrem o efeito do hoisting, mas diferentes do &lt;code&gt;var&lt;/code&gt; que é iniciado com &lt;code&gt;undefined&lt;/code&gt;, o &lt;code&gt;let&lt;/code&gt; não é inicializada. Sendo assim, se você tentar acessar a variável &lt;code&gt;let&lt;/code&gt; antes da sua declaração terá um erro informando que a variável não foi definida.&lt;/p&gt;
&lt;h2 id=&quot;const&quot;&gt;Const&lt;/h2&gt;
&lt;p&gt;Variáveis declaradas com &lt;code&gt;const&lt;/code&gt; tem os valores constantes, ou seja, não é possível reatribuir outro valor, nem redeclarar a variável. Caso tente reatribuir um valor ou redeclarar a variável um erro será impresso.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;javascript&quot; class=&quot;wrap&quot; style=&quot;--ecMaxLine:72ch&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Bastiana&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;name &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Joana&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// Error: Assignment to constant variable&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;// ou&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;car&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Fusca&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;car&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Palio&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// Error: Identifier &apos;car&apos; has already been declared&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;As declarações de &lt;code&gt;const&lt;/code&gt; devem ser inicializadas no momento forem declaradas.&lt;/p&gt;
&lt;p&gt;Portanto este comportamento muda quando declaramos um objeto com &lt;code&gt;const&lt;/code&gt;, embora os objetos não possam ser atualizados é possível atualizar as propriedades do objeto. Vejamos:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;javascript&quot; class=&quot;wrap&quot; style=&quot;--ecMaxLine:15ch&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;car&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:2ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ports: &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:2ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;name: &lt;/span&gt;&lt;span&gt;&apos;Fusca&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Não é possível fazer isso:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;javascript&quot; class=&quot;wrap&quot; style=&quot;--ecMaxLine:44ch&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;car &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:2ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;engine: &lt;/span&gt;&lt;span&gt;&apos;2.0&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;} &lt;/span&gt;&lt;span&gt;// error: Assignment to constant variable.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Porém isso é possível:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;javascript&quot; class=&quot;wrap&quot; style=&quot;--ecMaxLine:18ch&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;car.name &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Palio&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;O código acima atualizará o valor de &lt;code&gt;car.name&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;escopo-de-const&quot;&gt;Escopo de const&lt;/h2&gt;
&lt;p&gt;Da mesma forma que as declarações de &lt;code&gt;let&lt;/code&gt;, as declarações de &lt;code&gt;const&lt;/code&gt; tem escopo de bloco, ou seja, podem ser acessadas somente dentro do bloco onde foram declaradas.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;javascript&quot; class=&quot;wrap&quot; style=&quot;--ecMaxLine:72ch&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fruit&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Maçã&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:2ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;animal&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Gato&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:2ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(animal); &lt;/span&gt;&lt;span&gt;// retorna Gato&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;console.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(animal); &lt;/span&gt;&lt;span&gt;// animal is not defined - animal não foi definido.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;hoisting-de-const&quot;&gt;Hoisting de const&lt;/h2&gt;
&lt;p&gt;Assim como as declarações de &lt;code&gt;let&lt;/code&gt;, as de &lt;code&gt;const&lt;/code&gt; sofrem hoisting, mas não são inicializadas.&lt;/p&gt;
&lt;h2 id=&quot;resumo&quot;&gt;Resumo&lt;/h2&gt;
&lt;p&gt;Caso não tenha entendido a diferença, aqui vai:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Declaração de &lt;code&gt;var&lt;/code&gt;, tem escopo global e de função&lt;/li&gt;
&lt;li&gt;Declaração de &lt;code&gt;let&lt;/code&gt; e &lt;code&gt;const&lt;/code&gt; tem escopo de bloco.&lt;/li&gt;
&lt;li&gt;Variáveis com &lt;code&gt;var&lt;/code&gt; podem ser atualizadas e redeclaradas dentro do escopo.&lt;/li&gt;
&lt;li&gt;Variáveis de &lt;code&gt;let&lt;/code&gt; podem ser atualizadas, mas não podem ser redeclaradas&lt;/li&gt;
&lt;li&gt;Variáveis de &lt;code&gt;const&lt;/code&gt; não pode ser atualizadas nem redeclaradas novamente&lt;/li&gt;
&lt;li&gt;Ambas declarações sofrem o hoisting, mas variáveis com &lt;code&gt;var&lt;/code&gt; são inicializadas com &lt;code&gt;undefined&lt;/code&gt;, e variáveis com &lt;code&gt;let&lt;/code&gt; e &lt;code&gt;const&lt;/code&gt; não são inicializadas&lt;/li&gt;
&lt;li&gt;Portando &lt;code&gt;var&lt;/code&gt; e &lt;code&gt;let&lt;/code&gt; podem ser declaradas sem ser inicializadas&lt;/li&gt;
&lt;li&gt;Enquanto &lt;code&gt;const&lt;/code&gt; precisa de inicialização durante a declaração.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;considerações-finais&quot;&gt;Considerações finais&lt;/h2&gt;
&lt;p&gt;Por fim, acredito que é importante saber as diferenças nas declarações de variáveis principalmente para quem está iniciando com o JavaScript, assim como entender conceitos como escopo, bloco, hoisting para não ser pego de surpresa quando estiver codando.&lt;/p&gt;
&lt;p&gt;Espero que tenham gostado.&lt;/p&gt;
&lt;p&gt;Grande abraço.&lt;/p&gt;
</content:encoded><category>Dev</category><category>javascript</category></item><item><title>Nova sintaxe para media query CSS</title><link>https://randys.dev/blog/nova-sintaxe-para-media-query-css/</link><guid isPermaLink="true">https://randys.dev/blog/nova-sintaxe-para-media-query-css/</guid><description>Aprenda em primeira mão como utilizar a nova sintaxe.</description><pubDate>Wed, 12 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://randys.dev/_astro/cover.CuxZUkFF_kU8Ws.jpg&quot; alt=&quot;&quot; width=&quot;1200&quot; height=&quot;630&quot; /&gt;&lt;/p&gt;&lt;h2 id=&quot;introdução-2&quot;&gt;Introdução&lt;/h2&gt;
&lt;p&gt;A media query atualmente recebeu uma pequena atualização simplificando a escrita e ajudando na compreensão.&lt;/p&gt;
&lt;p&gt;Quem nunca ficou confuso na hora de escrever um media query e determinar se a propriedade seria &lt;code&gt;min-width&lt;/code&gt; ou &lt;code&gt;max-width&lt;/code&gt;?&lt;/p&gt;
&lt;p&gt;Eventualmente a media query é mais utilizada para definir regra de acordo com o tamanho da tela, ou seja, a viewport e com a nova sintaxe a escrita ficará mais simples. Vejamos como funciona.&lt;/p&gt;
&lt;h2 id=&quot;como-funcionará&quot;&gt;Como funcionará?&lt;/h2&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;css&quot; class=&quot;wrap&quot; style=&quot;--ecMaxLine:27ch&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;@media&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;min-width&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;600&lt;/span&gt;&lt;span&gt;px&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:2ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;// &lt;/span&gt;&lt;span&gt;code&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Aqui temos um código de implementação de uma media query, é neste momento que fica um pouco confuso, porque escrevemos &lt;code&gt;min-width&lt;/code&gt; para viewport maior ou igual à 600px.&lt;/p&gt;
&lt;p&gt;Mas com a nova sintaxe o código ficará assim:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;css&quot; class=&quot;wrap&quot; style=&quot;--ecMaxLine:25ch&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;@media&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;600&lt;/span&gt;&lt;span&gt;px&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:2ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;// &lt;/span&gt;&lt;span&gt;code&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;No código acima é utilizado uma regra matemática para definir o tamanho do width deixando o código mais simples, ao passo que utilizamos essas regras matemáticas o tempo todo.&lt;/p&gt;
&lt;h2 id=&quot;outros-exemplos&quot;&gt;Outros exemplos&lt;/h2&gt;
&lt;p&gt;Para utilizar duas ou mais definições de media query utilizamos:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;css&quot; class=&quot;wrap&quot; style=&quot;--ecMaxLine:50ch&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;@media&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;min-width&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;600&lt;/span&gt;&lt;span&gt;px&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;and&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;max-width&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;800&lt;/span&gt;&lt;span&gt;px&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:2ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;// &lt;/span&gt;&lt;span&gt;code&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Com a nova sintaxe o código fica:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;css&quot; class=&quot;wrap&quot; style=&quot;--ecMaxLine:34ch&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;@media&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;600&lt;/span&gt;&lt;span&gt;px&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;lt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;800&lt;/span&gt;&lt;span&gt;px&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:2ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;// &lt;/span&gt;&lt;span&gt;code&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;suporte&quot;&gt;Suporte&lt;/h2&gt;
&lt;p&gt;Atualmente o suporte a nova sintaxe de media query está nos seguintes navegadores:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Chrome 104&lt;/li&gt;
&lt;li&gt;Edge 104&lt;/li&gt;
&lt;li&gt;Firefox 63&lt;/li&gt;
&lt;li&gt;Safari 16.4&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;conclusão-6&quot;&gt;Conclusão&lt;/h2&gt;
&lt;p&gt;Eu gostei bastante, acho que simplifica um pouco a leitura e a escrita.&lt;/p&gt;
&lt;p&gt;E você o que achou dessa nova sintaxe do media query?&lt;/p&gt;
&lt;p&gt;Grande Abraço!&lt;/p&gt;
</content:encoded><category>Dev</category><category>css</category></item><item><title>Adicione super poderes a seus comentários JavaScript</title><link>https://randys.dev/blog/adicione-super-poderes-a-seus-comentarios-javascript/</link><guid isPermaLink="true">https://randys.dev/blog/adicione-super-poderes-a-seus-comentarios-javascript/</guid><description>Saiba como fazer comentários úteis e inteligentes no seu código JavaScript.</description><pubDate>Sat, 25 Feb 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://randys.dev/_astro/cover.Bqh17fv2_t59tL.jpg&quot; alt=&quot;&quot; width=&quot;1200&quot; height=&quot;630&quot; /&gt;&lt;/p&gt;&lt;h2 id=&quot;introdução&quot;&gt;Introdução&lt;/h2&gt;
&lt;p&gt;Comentários é uma maneira muito eficaz de explicar o que o código faz e como ele funciona. Adicionando comentários úteis ao seu código você pode torná-lo fácil de entender, dar manutenções e manter. Além disso, comentários podem te ajudar a se lembrar do que você fez naquela sexta-feira às 17h50 e que depois é preciso refatorar (entendedores entenderão).&lt;/p&gt;
&lt;p&gt;É importante lembrar que comentários também podem ser utilizados para documentar um código explicando o motivo de porque certas decisões foram tomadas e fornecer informações a outros devs que trabalham ou irão trabalhar no código.&lt;/p&gt;
&lt;h2 id=&quot;situação&quot;&gt;Situação&lt;/h2&gt;
&lt;p&gt;Vejamos a seguinte situação:&lt;/p&gt;
&lt;p&gt;Você criou uma função que vai retornar o nome completo do usuário, essa função vai receber dois parâmetros, &lt;code&gt;name&lt;/code&gt; e &lt;code&gt;lastName&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;javascript&quot; class=&quot;wrap&quot; style=&quot;--ecMaxLine:65ch&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fullName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;lastName&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:2ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`${&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;} ${&lt;/span&gt;&lt;span&gt;lastName&lt;/span&gt;&lt;span&gt;}`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;console.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;fullName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Maria&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Sebastiana&quot;&lt;/span&gt;&lt;span&gt;)); &lt;/span&gt;&lt;span&gt;// Maria Sebastiana&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Esse é um código muito simples é só você bater o olho que consegue entender e se você estiver utilizando o VS Code ele é inteligente o suficiente para te falar que a função recebe dois parâmetros.&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;quot;alt&amp;quot;:&amp;quot;Código JavaScript de uma função que retorna o nome completo de um usuário&amp;quot;,&amp;quot;title&amp;quot;:&amp;quot;Código JavaScript de uma função que retorna o nome completo de um usuário&amp;quot;,&amp;quot;src&amp;quot;:&amp;quot;./code-1.png&amp;quot;,&amp;quot;index&amp;quot;:0}&quot;&gt;&lt;/p&gt;
&lt;p&gt;Mas perceba que o &lt;code&gt;name&lt;/code&gt; e &lt;code&gt;lastName&lt;/code&gt; são do tipo &lt;code&gt;any&lt;/code&gt;, ou seja, podem ser qualquer valor, mas por algum motivo você quer ser explícito com os argumentos que deseja receber na sua função, como por exemplo falar que o &lt;code&gt;name&lt;/code&gt; e &lt;code&gt;lastName&lt;/code&gt; sejam do tipo &lt;code&gt;string&lt;/code&gt; e quando for utilizar a função o editor já consiga avisar quais tipos de parâmetros deve passar.&lt;/p&gt;
&lt;p&gt;Talvez adicionar algo assim:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;javascript&quot; class=&quot;wrap&quot; style=&quot;--ecMaxLine:65ch&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;// name e lastName são strings&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fullName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;lastName&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:2ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`${&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;} ${&lt;/span&gt;&lt;span&gt;lastName&lt;/span&gt;&lt;span&gt;}`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;console.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;fullName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Maria&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Sebastiana&quot;&lt;/span&gt;&lt;span&gt;)); &lt;/span&gt;&lt;span&gt;// Maria Sebastiana&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Isso seria informativo, mas e se a função estiver sendo utilizada em outro arquivo?
Além do mais o VS Code continuaria informando que os valores são do tipo &lt;code&gt;any&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;como-resolver&quot;&gt;Como resolver?&lt;/h2&gt;
&lt;p&gt;É neste momento que você vai dar super poder a seus comentários utilizando a API de documentação do JavaScript o &lt;a href=&quot;https://jsdoc.app/&quot; target=&quot;_blank&quot; rel=&quot;external nofollow noopener noreferrer&quot;&gt;JSDoc&lt;/a&gt;.
Na nossa função podemos adicionar a tag &lt;code&gt;@param&lt;/code&gt; no comentário, informando o tipo de parâmetro que será recebido na função.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Agora os comentários devem ser adicionados antes do código documentado e começar com a seguinte sequência &lt;code&gt;/**&lt;/code&gt;&lt;strong&gt;.&lt;/strong&gt; Comentáro começando com &lt;code&gt;/**&lt;/code&gt;, &lt;code&gt;/***&lt;/code&gt; serão ignorados.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;javascript&quot; class=&quot;wrap&quot; style=&quot;--ecMaxLine:42ch&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:1ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:1ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:1ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fullName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;lastName&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:2ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`${&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;} ${&lt;/span&gt;&lt;span&gt;lastName&lt;/span&gt;&lt;span&gt;}`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;console.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;fullName&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;A sintaxe é simples, você utiliza o &lt;code&gt;@param { type }&lt;/code&gt; onde o &lt;code&gt;type&lt;/code&gt; é o tipo de dado disponível em JavaScript como: &lt;code&gt;string&lt;/code&gt;, &lt;code&gt;number&lt;/code&gt;, &lt;code&gt;boolean&lt;/code&gt;, &lt;code&gt;Object&lt;/code&gt; etc.
Ao colocar o mouse sobre a função &lt;code&gt;fullName()&lt;/code&gt;, você verá que o &lt;code&gt;name&lt;/code&gt; está assinalado como &lt;code&gt;string&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;quot;alt&amp;quot;:&amp;quot;Código JavaScript de uma função que retorna o nome completo de um usuário&amp;quot;,&amp;quot;title&amp;quot;:&amp;quot;Código JavaScript de uma função que retorna o nome completo de um usuário&amp;quot;,&amp;quot;src&amp;quot;:&amp;quot;./code-2.png&amp;quot;,&amp;quot;index&amp;quot;:0}&quot;&gt;&lt;/p&gt;
&lt;p&gt;Vamos fazer a mesma coisa para o parâmetro &lt;code&gt;lastName&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;javascript&quot; class=&quot;wrap&quot; style=&quot;--ecMaxLine:42ch&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:1ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:1ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt; - Chico&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:1ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lastName&lt;/span&gt;&lt;span&gt; - Bastião&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:1ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@returns&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:1ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fullName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;lastName&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:2ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`${&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;} ${&lt;/span&gt;&lt;span&gt;lastName&lt;/span&gt;&lt;span&gt;}`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Perceba que adicionei outra tag &lt;code&gt;@param&lt;/code&gt; para o &lt;code&gt;lastName&lt;/code&gt; e na frente adicionei uma descrição, isso é bem útil porque você pode adicionar uma descrição detalhada sobre o parâmetro. Outra tag que foi adicionada foi o &lt;code&gt;@returns&lt;/code&gt; nela você pode discriminar que tipo de retorno terá a função.&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;quot;alt&amp;quot;:&amp;quot;Código JavaScript de uma função que retorna o nome completo de um usuário&amp;quot;,&amp;quot;title&amp;quot;:&amp;quot;Código JavaScript de uma função que retorna o nome completo de um usuário&amp;quot;,&amp;quot;src&amp;quot;:&amp;quot;./code-3.png&amp;quot;,&amp;quot;index&amp;quot;:0}&quot;&gt;&lt;/p&gt;
&lt;p&gt;Show!, não é?&lt;/p&gt;
&lt;h2 id=&quot;conclusão&quot;&gt;Conclusão&lt;/h2&gt;
&lt;p&gt;Viram como é simples e interessante adicionar comentários inteligentes no seu código JavaScript? E você não precisa se limitar somente em &lt;code&gt;@param&lt;/code&gt; ou &lt;code&gt;@returns&lt;/code&gt; há diversas outras tags para você usar e abusar, é só olhar na documentação do &lt;a href=&quot;https://jsdoc.app/index.html#block-tags&quot; target=&quot;_blank&quot; rel=&quot;external nofollow noopener noreferrer&quot;&gt;JSDoc&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Claro que isso não seria necessário se você estivesse utilizando TypeScript. Mas às vezes você ainda não sabe TypeScript ou o projeto seja em JavaScript.&lt;/p&gt;
&lt;p&gt;Espero que tenham gostado dessa dica.&lt;/p&gt;
&lt;p&gt;Grande abraço.&lt;/p&gt;
</content:encoded><category>Dev</category><category>javascript</category></item><item><title>Backstage: Introdução</title><link>https://randys.dev/blog/backstage-introducao/</link><guid isPermaLink="true">https://randys.dev/blog/backstage-introducao/</guid><description>Porque eu criei este blog e como ele pode me ajudar na minha vida pessoal e profissional</description><pubDate>Mon, 17 Oct 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Sejam bem vindos ao meu blog.&lt;/p&gt;
&lt;p&gt;Neste primeiro post quero explicar porque criei um blog e como isso me ajuda na minha vida pessoal e profissional.&lt;/p&gt;
&lt;p&gt;O principal motivo é praticar o que estou estudando e trabalhando. Eu utilizo uma metodologia de sempre escrever algo sobre o que estou estudando e tento escrever como se eu estivesse explicando o assunto para uma pessoa que tenha pouco conhecimento e de forma simples, assim eu consigo fixar melhor o conteúdo. Essa é uma metodologia que muitas pessoas utilizam.&lt;/p&gt;
&lt;p&gt;Eu criei o blog do zero utilizando diversas tecnologias como? React, NextJS, Styled Components, NetlifyCMS dentre outras. Apesar de já trabalhar com a maioria dessas tecnologias eu aprendi diversas outras coisas que foram necessárias para que o blog funcionasse como deveria e isso é enriquecedor.&lt;/p&gt;
&lt;p&gt;Como eu tento escrever como se fosse explicar para uma pessoa que tem pouco conhecimento, outra coisa que preciso aperfeiçoar é minha escrita, apesar de ler bastante eu tenho muitos vícios na hora que vou escrever e só conseguimos melhorar praticando.&lt;/p&gt;
&lt;p&gt;Quero escrever sobre desenvolvimento web, tecnologias e demais assuntos que considero interessantes, além de criar tutoriais que possam ajudar outros desenvolvedores que estão começando e querem aprender algo novo ou até mesmo que tem dificuldades sobre determinado assunto.&lt;/p&gt;
&lt;p&gt;Enfim, não quero me estender muito, mas como vocês viram será um blog pessoal e profissional. Espero aprender muito com ele e quem sabe ajudar outras pessoas.&lt;/p&gt;
&lt;p&gt;Espero que curtam!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;P.S.:&lt;/strong&gt; Caso encontre algum bug, erro de escrita ou alguma outra coisa pode entrar em contato comigo através nas minhas redes sociais e reportar, pois não adicionei um sistema de comentários ainda estou analisando algumas opções.&lt;/p&gt;
&lt;p&gt;Grande abraço!&lt;/p&gt;
</content:encoded><category>Miscelânea</category><category>blog</category></item></channel></rss>