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.
Community Posts
No posts yet. Be the first to write about this video!
Write about this video