TeknoCerdas.com – Terjadi lagi, sebuah package kecil is-promise yang hanya terdiri dari “1 baris” kode merusak banyak ekosistem package NPM. Jumlah package yang tergantung dengan is-promise berdasarkan data dari NPM adalah 554. Salah satu yang terkena dampaknya adalah npm package dari Facebook yaitu create-react-app
.
Update terbaru yang dilakukan oleh developer is-promise
pada versi 2.2.0 membuat banyak package yang tergantung padanya menjadi rusak tidak bisa dijalankan. Dikutip dari laman release is-promise di GitHub versi 2.2.0 menyertakan dua perubahan utama yaitu menambahkan definisi untuk TypeScript dan menambahkan dukungan untuk model import ES Module.
Untungnya pengembang is-promise dalam waktu kurang dari 10 jam melakukan dua update untuk perbaikan masalah ini sehingga versi terbaru 2.2.2 diharapkan sudah tidak menimbulkan masalah.
Kejadian ini menjadi perbincangan hangat di forum diskusi Hacker News. Hingga berita ini diturunkan sudah ada 350 komentar lebih di Hacker News. Hal ini mengingatkan kita pada kejadian pada tahun 2016 yaitu rusaknya NPM package left-pad yang menyebabkan chaos pada ekosistem NPM.
Penulis perhatikan reaksi pengguna di Hacker News tentang kejadian ini beragam. Sudah pasti ada yang menyalahkan Javascript karena minimnya pustaka bawaan. Lebih ekstrim beberapa mengatakan Javascript itu bahasa yang cacat jadi sebaiknya dihindari.
Suara lain pada diskusi tersebut juga menyalahkan pengembang yang menggunakan package is-promise karena pada dasarnya package tersebut sangatlah sederhana. Ya, Anda tidak salah baca pada awal artikel ini bahwa is-promise hanya terdiri dari satu baris return statement. Sehingga tidak perlu ada ketergantungan pada package untuk fungsionalitas tersebut cukup buatkan file pada direktori utilitas yang berisi kode tersebut.
Dapat penulis simpulkan mengenai masalah ini Anda sebagai pengembang sebaiknya mengikuti pedoman berikut.
- Jika dependency itu sangat sederhana dan kecil sebaiknya tulis sendiri (atau copy-paste) dan letakkan pada utilitas project dan bukan digantungkan pada package.json.
- Jika memang harus digantungkan pastikan untuk melakukan pin versi yang statis pada package.json untuk menghindari update dari upstream yang kemungkinan merusak kompatibilitas.
- Gunakan CI/CD pipeline untuk meminimalkan masalah sebelum kode masuk ke production.