Bun 1.4 Baru Saja Menghapus 15 Dependensi Anda

BBetter Stack
Computing/SoftwareInternet Technology

Transcript

00:00:00Pembaruan terbesar dan paling kontroversial BUN baru saja dirilis, BUN 1.4, versi tulis ulang Rust.
00:00:04Sebelumnya saya sudah membuat video tentang drama tulis ulangnya, jadi mari kita fokus pada apa yang baru,
00:00:07karena saya benar-benar menyukai beberapa di antaranya, khususnya hal-hal terkait pustaka standar,
00:00:11karena sekarang ada browser headless bawaan, pustaka gambar, pseudo-terminal, markdown,
00:00:15cron job, tabel, dan banyak lagi, menggantikan 15 dependensi yang mungkin Anda gunakan.
00:00:19Selama beberapa tahun terakhir, salah satu keluhan terbesar JavaScript adalah tidak adanya pustaka
00:00:23standar, dan BUN mengatasi hal itu, langkah yang cukup bagus di tengah maraknya serangan rantai pasok mingguan.
00:00:30Pertama-tama, kita bisa menghapus Playwright dan Puppeteer, dan menggunakan BUN WebView sebagai gantinya.
00:00:37Dengan kode ini, saya bisa mengontrol browser headless, mencari tombol subscribe, dan mengekliknya,
00:00:41meskipun saya belum bisa menjalankannya di komputer Anda, jadi Anda harus mengeklik subscribe untuk saya.
00:00:44Semua metode input seperti klik, mengetik, menekan, dan menggulir, mengirimkan event browser asli,
00:00:48sehingga halaman mengira Anda adalah pengguna sungguhan. Di Mac, ini menggunakan webkit sistem,
00:00:52artinya mesin Safari, jadi tidak ada yang perlu diinstal, tetapi jika Anda ingin instance Chrome,
00:00:56Anda dapat mengatur opsi backend ke Chrome, dan ini akan menggunakan instance Chrome atau Chromium yang terinstal,
00:01:01yang merupakan hal yang Anda lakukan jika menggunakan Windows atau Linux. Ini sebenarnya dapat menjalankan subproses
00:01:04Chrome headless, atau dapat terhubung ke instance Chrome yang sudah berjalan, jadi dengan menggunakan kode ini,
00:01:09saya dapat mengendalikan versi Chrome yang terbuka di Mac saya, semuanya dari BUN. Selain itu,
00:01:13Anda juga dapat menggunakan Evaluate untuk menjalankan JavaScript di halaman, dan mendapatkan kembali hasilnya dalam bentuk
00:01:17nilai JavaScript asli, dan jika belum ada API untuk fitur yang Anda inginkan, Anda dapat beralih ke
00:01:21perintah CDP mentah. Saya rasa ini cukup bagus untuk beberapa otomatisasi browser ringan,
00:01:25meskipun belum sepenuhnya menggantikan Playwright karena belum memiliki penjalan uji atau penampil jejak,
00:01:29tetapi untuk hal seperti scraping atau skrip computer use, ini bukan pilihan yang buruk.
00:01:32Berikutnya, mari kita hapus Sharp dan gunakan BUN.image sebagai gantinya. Ini adalah pustaka gambar lengkap,
00:01:37yang memungkinkan kita mengambil file, memanggil .image pada file tersebut, lalu merangkai operasi seperti mengubah ukuran, memutar,
00:01:42membalik secara horizontal, membalik secara vertikal, mengubah kecerahan, ketajaman, dan mengonversinya ke berbagai
00:01:46format gambar yang berbeda. Ini juga memungkinkan Anda membaca metadata, seperti lebar, tinggi, dan format,
00:01:50tanpa mendekode data piksel. Opsi keren lainnya yang sangat saya sukai adalah kemampuan untuk membuat
00:01:54gambar placeholder. Ini adalah versi berkualitas rendah yang dapat Anda sisipkan secara inline di HTML sebelum gambar asli
00:01:59dimuat. BUN.image adalah salah satu fitur yang paling tidak sabar ingin saya gunakan karena saya pernah
00:02:04mengalami masalah dengan penerapan dan pembangunan (build) sebelumnya yang berkaitan dengan Sharp. Sekarang jika saya menggunakan BUN,
00:02:08saya tidak perlu memikirkannya lagi. Saya juga tidak perlu memikirkan Marked lagi karena kita sekarang
00:02:12bisa langsung menggunakan BUN.markdown untuk mengurai Markdown. Ini mencakup tiga API.
00:02:16BUN.markdown.html merender Markdown menjadi string HTML. BUN.markdown.render merender Markdown dengan
00:02:22callback kustom untuk setiap elemen. Ini memberi Anda fleksibilitas untuk merender HTML dengan kelas kustom,
00:02:27keluaran terminal ANSI, atau format string lainnya. BUN.markdown.react merender Markdown ke React.jsx,
00:02:33dan ini juga memungkinkan Anda memasukkan komponen apa pun yang Anda inginkan untuk setiap elemen, sehingga Anda bisa mendapatkan
00:02:37Markdown dengan gaya yang sangat bagus. Ada juga sejumlah opsi yang dapat Anda aktifkan/nonaktifkan untuk mengontrol fitur Markdown
00:02:41yang Anda inginkan. Anda dapat memiliki hal-hal seperti tabel berformat GitHub, tautan otomatis,
00:02:45ID judul, dan tautan wiki, meskipun satu peringatan yang mereka tunjukkan adalah keluaran HTML tidak disanitasi,
00:02:50jadi HTML mentah, atribut event header, JavaScript, semuanya lolos begitu saja, jadi jika Anda
00:02:54merender Markdown yang ditulis pengguna, itu tetap menjadi masalah Anda untuk diselesaikan. Bagaimanapun, ada begitu banyak
00:02:59Markdown yang dihasilkan saat ini sehingga ini tampaknya menjadi tambahan yang cukup bagus bagi saya. Melanjutkan, Anda
00:03:03sekarang dapat menghapus Node.pty. BUN.terminal memberi Anda pseudo terminal bawaan, memungkinkan Anda menjalankan
00:03:08Bash, Vim, atau HTOP dari JavaScript. Jika Anda pernah mencoba menyertakan terminal di dalam aplikasi Electron,
00:03:12Anda tahu betapa menyulitkannya. Ini sebenarnya merupakan tambahan untuk BUN.spawn. Anda meneruskan opsi terminal dan itu
00:03:17meluncurkan subproses dengan pseudo terminal yang terlampir. Subproses melihat terminal nyata, yang mengaktifkan
00:03:22keluaran berwarna, pergerakan kursor, dan prompt interaktif, dan begitu Anda memiliki terminal, Anda dapat
00:03:26menulis data ke terminal tersebut, mengubah ukuran terminal, menutup terminal, dan banyak lagi. Anda juga dapat
00:03:31membuat terminal Anda sendiri, yang memungkinkan Anda menggunakannya kembali di berbagai subproses. Saya mulai melihat pola
00:03:35dalam semua fitur ini. Ini tampaknya menjadi sesuatu yang akan digunakan oleh Claude Code, jadi saya berharap mereka
00:03:39membuka sumber (open-source) kodenya agar kita bisa melihat fitur-fitur ini digunakan dalam skala besar. Dependensi berikutnya yang
00:03:43kita hapus adalah Node.cron, karena kita sekarang dapat menggunakan BUN.cron. Jika Anda meneruskan fungsi ke sini,
00:03:47itu akan berjalan pada event loop tanpa cron sistem yang terlibat, tetapi jika Anda meneruskan skrip,
00:03:51itu akan mendaftarkan cron job tingkat OS yang benar-benar menggunakan crontab di Linux, launchd di macOS,
00:03:56dan penenun tugas (task scheduler) di Windows. Anda dapat menggunakan sintaks cron standar, termasuk hari dalam seminggu dan pembantu seperti
00:04:01daily, dan ini juga mendukung penguraian sintaks cron tersebut, yang akan mengembalikan tanggal yang cocok berikutnya
00:04:05di zona waktu lokal sistem. Dan berbicara tentang zona waktu, semua tugas berjalan di waktu lokal secara default,
00:04:11tetapi ia memiliki opsi eksplisit untuk mengubahnya, sehingga Anda dapat memastikan kapan ini akan berjalan.
00:04:15Berikutnya dalam jadwal saya adalah menyuruh Anda menghapus concurrently atau npm run all, karena BUN sekarang memiliki
00:04:20opsi paralelnya sendiri. Menggunakan flag ini memungkinkan Anda menjalankan beberapa skrip package.json secara bersamaan,
00:04:24dan hasilnya diberi awalan nama skrip asal dengan rapi. Ini juga memungkinkan Anda menggunakan pencocokan glob
00:04:28untuk nama skrip, memiliki filter untuk paket mana yang akan menjalankan perintah di dalam
00:04:32workspace Anda, dan juga memiliki opsi untuk membiarkan skrip lain terus berjalan jika salah satunya mengalami error. Selain itu,
00:04:37tidak harus selalu bersamaan, Anda juga dapat menggunakan sequential untuk menjalankan skrip satu per satu
00:04:41dengan keluaran berawalan dan pemfilteran yang sama. Ini mungkin fitur yang paling sering saya gunakan.
00:04:45Penghapusan berikutnya adalah pustaka arsip tar apa pun. BUN.archive adalah implementasi asli yang cepat
00:04:50dari tar dan gzip. Membuatnya cukup dengan objek di mana kunci adalah jalur (path) dan nilainya adalah
00:04:55isinya, dan isinya dapat berupa apa saja mulai dari string, blob, Uint8Array, atau array buffer. Untuk kompresi,
00:05:00Anda juga dapat menggunakan opsi compress, diatur ke gzip, dan level dari 1 hingga 12. Tentu saja Anda kemudian dapat
00:05:05mengekstraknya dengan opsi seperti pola glob untuk hanya mengekstrak file tertentu, dan fitur yang sangat
00:05:10saya sukai adalah Anda dapat membaca arsip tanpa mengekstraknya. Kode di sini dapat menarik lodash dari registri npm
00:05:14dan membaca package.json miliknya tanpa mengekstrak satu file pun. Sejauh ini kita telah menghilangkan kebutuhan
00:05:19akan sekitar 7 paket npm, dan masih ada lagi, meskipun ini adalah fitur yang lebih kecil sehingga kita
00:05:24dapat membahasnya lebih cepat. Pertama, BUN.serve sekarang dapat melayani file statis, menggantikan kebutuhan akan
00:05:28serve-static, dan ini bagus untuk folder publik situs web Anda. Kedua, BUN menambahkan dukungan
00:05:33untuk JSON5 dan XML, jadi Anda tidak memerlukan paket mereka lagi. Anda dapat mengimpor, mengurai, dan mengubah menjadi string kedua
00:05:38format tersebut di BUN. Tiga yang terakhir adalah pembantu untuk terminal. Kita memiliki BUN.sliceAnsi, BUN.wrapAnsi,
00:05:43dan BUN.stringWidth, yang memberi Anda pemotongan, pembungkusan, dan pengukuran yang sadar kolom terminal,
00:05:47menggantikan kebutuhan akan paket seperti slice-ansi, cli-truncate, wrap-ansi, dan string-width.
00:05:52Secara keseluruhan, sekitar 15 paket telah hilang, dan saya baru membahas sekitar separuh dari rilis ini.
00:05:56Inti dari sebagian besar postingan blog ini adalah banyak hal menjadi lebih cepat, penggunaan CPU meningkat, waktu mulai menjadi
00:06:01lebih cepat, dan terlepas dari semua fitur ini, ukuran binari menjadi 17% lebih kecil. Oh, dan ini ditulis dalam Rust.
00:06:06Satu fitur bonus yang layak disebutkan adalah BUN.install kini memiliki virtual store global.
00:06:10Jika Anda mengaktifkan isolated linker, paket akan diekstrak sekali di komputer Anda dan ditautkan secara simbolis (symlink)
00:06:14ke node_modules Anda, alih-alih disalin ke setiap proyek secara terpisah. Ini seharusnya
00:06:19membuatnya lebih cepat dan juga menghemat ruang jika Anda memiliki banyak proyek. Jadi, apa pendapat Anda tentang BUN sekarang?
00:06:23Apakah Anda menggunakannya? Apakah Anda akan menggunakan fitur-fitur ini? Beri tahu saya di kolom komentar di bawah,
00:06:27tunggu sebentar, subscribe, dan seperti biasa, sampai jumpa di video berikutnya.
00:06:36Sampai jumpa di lain waktu.

Key Takeaway

Pembaruan Bun 1.4 menghapus 15 dependensi eksternal melalui pustaka standar berbasis Rust seperti browser headless, pemrosesan gambar, terminal semu, dan manajemen arsip.

Highlights

  • Pembaruan Bun 1.4 memperkenalkan pustaka standar bawaan yang menghapus kebutuhan akan 15 dependensi eksternal yang berbeda.

  • Bun.image menyediakan fitur pemrosesan gambar lengkap dan pembuatan gambar placeholder tanpa menggunakan pustaka Sharp.

  • Bun.cron menjalankan tugas berbasis waktu pada event loop lokal atau mendaftarkan task scheduler tingkat OS secara langsung.

  • Virtual store global pada Bun.install mengekstrak paket sekali di komputer dan menautkannya secara simbolis ke node_modules untuk menghemat ruang.

  • Ukuran binari Bun 1.4 menjadi 17 persen lebih kecil meskipun mencakup seluruh penambahan fitur baru dan ditulis dalam bahasa Rust.

Timeline

Pustaka Standar dan Browser Headless

  • Bun 1.4 hadir sebagai versi tulis ulang dalam bahasa Rust dengan penambahan pustaka standar baru.
  • Bun WebView menggantikan Playwright dan Puppeteer untuk mengontrol browser headless secara langsung.
  • Fitur ini menggunakan webkit sistem di Mac dan mendungkung instance Chrome atau Chromium pada Windows dan Linux.

Pembaruan ini mengatasi masalah kurangnya pustaka standar dalam ekosistem JavaScript dengan menyertakan alat bawaan. Bun WebView memungkinkan pengiriman event browser asli seperti klik, pengetikan, dan pengguliran. Pengguna juga dapat menjalankan JavaScript di halaman menggunakan metode Evaluate atau beralih ke perintah CDP mentah.

Pemrosesan Gambar dan Penguraian Markdown

  • Bun.image menggantikan pustaka Sharp untuk manipulasi gambar dan pembacaan metadata piksel.
  • Bun.markdown menguraikan format Markdown ke dalam HTML, string kustom, atau React.jsx.
  • Keluaran HTML dari pengurai Markdown tidak disanitasi secara otomatis oleh sistem.

Bun.image mendukung operasi perangkaian seperti pengubahan ukuran, pemutaran, pembalikan, dan penyesuaian kecerahan serta ketajaman. Fitur ini juga menghasilkan gambar placeholder berkualitas rendah untuk disematkan secara inline. Sementara itu, Bun.markdown menawarkan tiga API berbeda untuk merender teks Markdown dengan fleksibilitas tinggi terhadap elemen kustom.

Terminal Semu dan Penjadwalan Tugas

  • Bun.terminal menyediakan pseudo terminal bawaan yang menggantikan Node.pty untuk menjalankan Bash atau Vim.
  • Bun.cron menjalankan fungsi pada event loop atau mendaftarkan cron job tingkat OS menggunakan crontab, launchd, atau task scheduler.
  • Semua tugas cron berjalan di zona waktu lokal secara default dengan opsi konfigurasi eksplisit.

Bun.terminal meluncurkan subproses dengan pseudo terminal terlampir yang memunculkan keluaran berwarna dan prompt interaktif di dalam JavaScript. Bun.cron mendukung sintaks cron standar termasuk hari dalam seminggu dan penguraian tanggal yang cocok berikutnya.

Eksekusi Skrip Paralel dan Arsip Asli

  • Skrip package.json dapat dijalankan secara bersamaan atau berurutan tanpa menggunakan concurrently atau npm run all.
  • Bun.archive menyediakan implementasi asli yang cepat untuk kompresi dan ekstraksi tar serta gzip.
  • Arsip dapat dibaca secara langsung untuk mengambil berkas seperti package.json tanpa mengekstrak seluruh isinya.

Opsi paralel mendukung pencocokan glob untuk nama skrip dan pemfilteran workspace. Bun.archive menerima berbagai jenis konten mulai dari string hingga Uint8Array, serta memungkinkan pembacaan berkas individual dari dalam arsip terkompresi secara efisien.

Fitur Tambahan dan Manajemen Paket

  • Bun.serve melayani file statis secara langsung untuk menggantikan serve-static.
  • Dukungan impor bawaan ditambahkan untuk format JSON5 dan XML.
  • Bun.install menggunakan virtual store global dengan penautan simbolis untuk menghemat ruang penyimpanan.

Pembaruan ini menghilangkan total sekitar 15 paket npm termasuk pembantu terminal untuk pemotongan dan pengukuran lebar string. Ukuran binari keseluruhan menjadi 17 persen lebih kecil dengan peningkatan kecepatan CPU dan waktu mulai yang lebih cepat.

Community Posts

No posts yet. Be the first to write about this video!

Write about this video