O Bun 1.4 acabou de eliminar 15 das suas dependências
BBetter Stack
Computing/SoftwareInternet Technology
Transcript
00:00:00A maior e mais controversa atualização do Bun acabou de ser lançada, o Bun 1.4, reescrito em Rust.
00:00:04Bem, eu já fiz um vídeo sobre o drama da reescrita antes, então vamos focar no que há de novo,
00:00:07porque eu realmente gosto de algumas coisas, especificamente da biblioteca padrão,
00:00:11pois agora ela traz um navegador headless embutido, biblioteca de imagens, pseudoterminal, markdown,
00:00:15tarefas cron, tabelas e muito mais, substituindo 15 dependências que você talvez esteja usando.
00:00:19Nos últimos anos, uma das maiores reclamações no JavaScript tem sido a falta de uma biblioteca
00:00:23padrão, e o Bun está resolvendo isso, o que é um ótimo passo em um mundo de ataques semanais à cadeia de suprimentos.
00:00:30Primeiro, podemos desinstalar o Playwright e o Puppeteer e usar o Bun WebView em vez disso.
00:00:37Com este código aqui, posso controlar um navegador headless, encontrar o botão de inscrição e clicar nele,
00:00:41embora eu ainda não possa rodar isso na sua máquina, então você vai ter que se inscrever para mim.
00:00:44Todos os métodos de entrada como click, type, press e scroll disparam eventos nativos do navegador,
00:00:48então a página deve achar que você é um usuário real. No Mac, isso usa o WebKit do sistema,
00:00:52ou seja, o motor do Safari, o que significa que não há nada para instalar, mas se você quiser uma instância do Chrome,
00:00:56você pode definir a opção backend como Chrome, e isso usará uma instância instalada do Chrome ou Chromium,
00:01:01que é o que você faria se estivesse usando Windows ou Linux. Isso pode rodar um subprocesso do Chrome headless
00:01:04ou se conectar a uma instância do Chrome já em execução, então usando este código aqui,
00:01:09eu posso controlar a versão aberta do Chrome no meu Mac, tudo a partir do Bun. Além disso,
00:01:13você também pode usar o Evaluate para rodar JavaScript na página e obter os resultados de volta em valores
00:01:17nativos do JavaScript, e se ainda não houver uma API para o recurso que você deseja, você pode recorrer
00:01:21aos comandos brutos do CDP. Vejo isso sendo muito útil para algumas automações leves de navegador,
00:01:25embora eu ache que ainda não substitui totalmente o Playwright, pois ele não tem um executor de testes ou visualizador de rastreio,
00:01:29mas para coisas como raspagem de dados ou scripts de uso de computador, não é uma má opção.
00:01:32Em seguida, vamos desinstalar o Sharp e usar o Bun.image em vez disso. Esta é uma biblioteca de imagens completa,
00:01:37permitindo pegar um arquivo, chamar .image nele e encadear operações como redimensionamento, rotação,
00:01:42inversão horizontal e vertical, alteração de brilho, nitidez e conversão para vários formatos
00:01:46diferentes de imagem. Ela também permite ler metadados, como largura, altura e formato,
00:01:50sem decodificar os dados dos pixels. Outra opção legal de que gosto muito é a capacidade de criar
00:01:54uma imagem placeholder. Esta é uma versão de baixa qualidade que você pode incorporar no HTML antes da imagem real carregar.
00:01:59O Bun.image é um dos recursos que mais me empolga usar, pois eu já tive problemas
00:02:04em implantações e compilações antes relacionados ao Sharp. Agora, se eu usar o Bun,
00:02:08não preciso mais me preocupar com isso. Também não preciso mais pensar no Marked, pois agora podemos
00:02:12simplesmente usar o Bun.markdown para analisar Markdown. São apenas três APIs.
00:02:16BUN.markdown.html renderiza Markdown para uma string HTML. BUN.markdown.render renderiza Markdown com
00:02:22retornos de chamada personalizados para cada elemento. Isso dá a flexibilidade de renderizar HTML com classes personalizadas,
00:02:27saída de terminal ANSI ou qualquer outro formato de string. BUN.markdown.react renderiza Markdown para React.jsx,
00:02:33e isso também permite passar qualquer componente desejado para cada elemento, obtendo um Markdown muito bem estilizado.
00:02:37Há também várias opções que você pode alternar para controlar os recursos de Markdown
00:02:41que deseja. É possível ter coisas como tabelas formatadas do GitHub, links automáticos,
00:02:45IDs de cabeçalho e links wiki, embora um aviso que eles destacam é que a saída HTML não é sanitizada,
00:02:50então HTML puro, atributos de eventos de cabeçalho, JavaScript, tudo passa direto, portanto, se você estiver
00:02:54renderizando Markdown escrito por usuários, isso ainda é um problema seu para resolver. Independentemente disso, há tanto
00:02:59Markdown sendo gerado hoje em dia que esta parece ser uma adição muito boa para mim. Seguindo em frente, agora
00:03:03você pode desinstalar o Node.pty. O Bun.terminal fornece um pseudoterminal embutido, permitindo controlar
00:03:08o Bash, Vim ou HTOP a partir do JavaScript. Se você já tentou embutir um terminal em um aplicativo Electron,
00:03:12sabe qual é a dor de cabeça. Na verdade, isso é uma adição ao Bun.spawn. Você passa a opção de terminal e ele
00:03:17inicia um subprocesso com um pseudoterminal acoplado. O subprocesso enxerga um terminal real, o que permite
00:03:22saída colorida, movimentação do cursor e prompts interativos. Uma vez tendo um terminal, você pode
00:03:26gravar dados nele, redimensioná-lo, fechá-lo e muito mais. Você também pode
00:03:31criar seu próprio terminal, permitindo reutilizá-lo entre subprocessos. Começo a ver um padrão
00:03:35em todos esses recursos. Eles parecem ser algo que o Claude Code usaria, então eu gostaria que eles
00:03:39usassem código aberto nisso para podermos ver esses recursos sendo usados em grande escala. A próxima dependência que estamos
00:03:43desinstalando é o Node.cron, porque agora podemos apenas usar o Bun.cron. Se você passar uma função para ele,
00:03:47ela simplesmente rodará no loop de eventos sem envolver o cron do sistema, mas se você passar um script,
00:03:51ele registrará uma tarefa cron a nível de sistema operacional, usando crontab no Linux, launchd no macOS
00:03:56e o agendador de tarefas no Windows. Você pode usar a sintaxe cron padrão, incluindo dias nomeados e ajudantes como
00:04:01daily, e ele também oferece suporte à análise dessa sintaxe cron, que retornará a próxima data correspondente
00:04:05no fuso horário local do sistema. E por falar em fusos horários, todos os trabalhos rodam no horário local por padrão,
00:04:11mas há opções explícitas para mudar isso, garantindo que você saiba exatamente quando vai rodar.
00:04:15O próximo item na minha agenda é dizer para você desinstalar o concurrently ou npm-run-all, porque o Bun agora tem
00:04:20sua própria opção paralela. Usar esta flag permite rodar múltiplos scripts do package.json simultaneamente,
00:04:24e a saída traz o prefixo do nome do script de origem. Ela também permite usar correspondência
00:04:28por glob para os nomes dos scripts, tem um filtro para definir em quais pacotes do seu workspace
00:04:32o comando deve rodar, e também possui uma opção para deixar os outros scripts continuarem se um deles apresentar erro. E não
00:04:37precisa ser apenas concorrente, você também pode usar sequential para rodar scripts um de cada vez
00:04:41com a mesma saída com prefixo e filtragem. Este é provavelmente o recurso que mais me vejo usando.
00:04:45Nossa próxima desinstalação é qualquer biblioteca de arquivos tar. O Bun.archive é uma implementação nativa rápida
00:04:50de tar e gzip. Criar um arquivo é apenas um objeto cujas chaves são os caminhos e os valores são os
00:04:55conteúdos, e o conteúdo pode ser qualquer coisa, desde uma string, blob, Uint8Array ou array buffer. Para compactação,
00:05:00você também pode usar a opção compress, definida como gzip, com um nível de 1 a 12. Obviamente, você pode
00:05:05então extraí-los com opções como um padrão glob para extrair apenas arquivos específicos, e um recurso que eu realmente
00:05:10gosto é que você pode ler um arquivo compactado sem precisar extraí-lo. Este código aqui pode puxar o lodash do registro
00:05:14do npm e ler o seu package.json sem que um único arquivo seja extraído. Até agora removemos a necessidade
00:05:19de cerca de 7 pacotes npm, e ainda há mais por vir, embora estes sejam recursos menores para passarmos
00:05:24por eles mais rápido. Primeiro, o Bun.serve agora pode servir arquivos estáticos, eliminando a necessidade de
00:05:28serve-static, o que é ótimo para aquela pasta pública do seu site. Segundo, o Bun adicionou suporte
00:05:33a JSON5 e XML, então você não precisa mais dos pacotes deles. Você pode importar, analisar e serializar ambos
00:05:38os formatos no Bun. Os últimos três são ajudantes para o terminal. Temos Bun.sliceAnsi, Bun.wrapAnsi,
00:05:43e Bun.stringWidth, que oferecem corte, quebra de linha e medição conscientes das colunas do terminal,
00:05:47substituindo a necessidade de pacotes como slice-ansi, cli-truncate, wrap-ansi e string-width.
00:05:52No geral, são cerca de 15 pacotes a menos, e eu cobri apenas metade deste lançamento.
00:05:56O resumo da ópera desta postagem no blog é que muitas coisas ficaram mais rápidas, o uso de CPU melhorou, a inicialização
00:06:01ficou mais rápida e, apesar de todos esses recursos, o binário ficou 17% menor. Ah, e ele é escrito em Rust.
00:06:06Um recurso bônus que vale a pena mencionar é que o bun install ganhou um armazenamento virtual global.
00:06:10Se você habilitar o vinculador isolado, os pacotes são extraídos uma vez na sua máquina e vinculados simbolicamente
00:06:14aos seus node_modules, em vez de serem copiados para cada projeto separadamente. Isso deve
00:06:19tornar tudo mais rápido e também economizar espaço se você tiver vários projetos. E o que você acha do Bun agora?
00:06:23Você o usa? Vai usar algum desses recursos? Deixe-me saber nos comentários abaixo,
00:06:27espere aí, inscreva-se e, como sempre, vejo você no próximo.
00:06:36Vejo você na próxima.
Community Posts
No posts yet. Be the first to write about this video!
Write about this video