นักพัฒนาค้นพบแพ็กเกจ npm ที่มีเลขเวอร์ชัน 19,494 หลังจากวิเคราะห์แพ็กเกจกว่า 2.1 ล้านตัว

ทีมชุมชน BigGo
นักพัฒนาค้นพบแพ็กเกจ npm ที่มีเลขเวอร์ชัน 19,494 หลังจากวิเคราะห์แพ็กเกจกว่า 2.1 ล้านตัว

การแสวงหาของนักพัฒนาผู้อยากรู้อยากเห็นที่ต้องการค้นหาแพ็กเกจ npm ที่มีเลขเวอร์ชันมากที่สุดได้เปิดเผยรูปแบบที่น่าสนใจในการกำหนดเวอร์ชันของแพ็กเกจ JavaScript สิ่งที่เริ่มต้นจากการสังเกตเรื่องง่ายๆ เกี่ยวกับ AWS SDK เวอร์ชัน 3.888.0 กลายเป็นการวิเคราะห์อย่างละเอียดของแพ็กเกจ npm กว่า 2.1 ล้านตัว

ขนาดของการวิเคราะห์:

  • จำนวน npm packages ทั้งหมดที่วิเคราะห์: 2,129,832
  • เวลาในการดึงข้อมูล: ประมาณ 12 ชั่วโมง
  • จำนวน API requests ที่ทำ: หลายล้านครั้ง
  • ขนาด Batch ที่ใช้: 50 concurrent requests
  • การพิจารณา Rate limit: อนุญาตให้ทำ 5 ล้าน requests ต่อเดือน

ผู้ชนะ: เครื่องมือ WhatsApp ที่มีตัวเลขน่าประหลาด

การวิเคราะห์เผยให้เห็นว่าแพ็กเกจที่ชื่อ wa-version จาก wppconnect-team ถือสถิติด้วยเวอร์ชัน 1.0.19494 เครื่องมือนี้เป็นส่วนหนึ่งของชุดเครื่องมือที่ออกแบบมาเพื่อเชื่อมต่อกับ API ของ WhatsApp และเลขเวอร์ชันที่สูงนี้เกิดจากการต่อสู้ทางเทคนิคที่ไม่มีวันจบ แพ็กเกจนี้ได้รับการอัปเดตบ่อยครั้งเนื่องจาก Meta ปรับเปลี่ยน WhatsApp อย่างต่อเนื่องเพื่อป้องกันการเข้าถึง API โดยไม่ได้รับอนุญาต ทำให้เกิดวงจรการแก้ไขและปรับปรุงอย่างต่อเนื่อง

หมายเหตุ: wppconnect-team หมายถึงนักพัฒนาที่สร้างเครื่องมือเพื่อเชื่อมต่อกับ WhatsApp ผ่านโปรแกรม

5 อันดับแรกของหมายเลขเวอร์ชันที่สูงที่สุดที่พบ:

  • wa-version: 1.0.19494
  • all-the-package-names: 2.0.18806
  • carrot-scan: 0.0.27708 (เครื่องมือสแกนช่องโหว่)
  • latentflip-test: 1.0.12345 (แพ็กเกจทดสอบ)
  • aws-sdk: 2.1692.0 (อันดับที่ 46 โดยรวม)

BigQuery เสนอเส้นทางที่ง่ายกว่า

ชุมชนได้ชี้ให้เห็นอย่างรวดเร็วว่ากระบวนการที่ยุ่งยากในการดึงข้อมูลจาก API ของ npm นี้สามารถหลีกเลี่ยงได้โดยสิ้นเชิง บริการ BigQuery ของ Google มีชุดข้อมูลสาธารณะสำหรับทั้ง npm และ PyPI (ที่เก็บแพ็กเกจของ Python) ทำให้การวิเคราะห์เช่นนี้ตรงไปตรงมามากขึ้น การสืบค้นที่คล้ายกันในข้อมูล PyPI เผยให้เห็นว่าแพ็กเกจ Python แสดงการกำหนดเวอร์ชันที่รุนแรงกว่า โดยแพ็กเกจบางตัวมีตัวเลขสูงมหาศาลผ่านกระบวนการปล่อยแพ็กเกจแบบอัตโนมัติ

การเปรียบเทียบกับ Package Manager อื่น ๆ:

  • PyPI (Python): ผู้ชนะคือ "elvisgogo" ที่มีหมายเลขเวอร์ชันสูงมาก
  • Julia General Registry: สูงสุดคือ DiffEqBase ที่ 6.189.1 (การกำหนดเวอร์ชันแบบระมัดระวังมากกว่า)
  • CPAN (Perl): แพ็กเกจ Acme-Boom มีเวอร์ชันถึง 3,735,928,560
  • เกณฑ์การกรอง npm: รวมเฉพาะแพ็กเกจที่ใช้ semantic versioning (รูปแบบ x.y.z) เท่านั้น

วิธีการเบื้องหลังความบ้าคลั่ง

นักวิจัยใช้เวลาประมาณ 12 ชั่วโมงในการดึงข้อมูลจากรีจิสทรีของ npm โดยประมวลผลแพ็กเกจเป็นชุดๆ เพื่อหลีกเลี่ยงการทำให้ API ทำงานหนักเกินไป การวิเคราะห์มุ่งเน้นเฉพาะแพ็กเกจที่ปฏิบัติตาม semantic versioning (รูปแบบมาตรฐาน x.y.z) และไม่รวมแพ็กเกจที่ดูเหมือนจะใช้วันที่หรือรูปแบบการกำหนดเวอร์ชันที่ไม่เป็นมาตรฐานอื่นๆ วิธีการกรองนี้ทำให้มั่นใจว่าผลลัพธ์สะท้อนการพัฒนาเวอร์ชันที่แท้จริงมากกว่าการกำหนดหมายเลขแบบสุ่ม

ระบบอัตโนมัติขับเคลื่อนการพองตัวของเวอร์ชัน

ผลลัพธ์เผยให้เห็นแนวโน้มที่น่าสนใจในการพัฒนาซอฟต์แวร์สมัยใหม่ แพ็กเกจที่มีเวอร์ชันสูงที่สุดหลายตัวไม่จำเป็นต้องเป็นแพ็กเกจที่มีการพัฒนาฟีเจอร์อย่างแข็งขัน แต่กลับมักจะเป็นตัวแทนของระบบอัตโนมัติที่ทำงานไม่หยุด - เครื่องมือสแกนความปลอดภัยที่อัปเดตฐานข้อมูลช่องโหว่ บอทจัดการ dependency ที่สร้างการปล่อยแพ็กเกจอัตโนมัติ หรือเครื่องมือที่ตอบสนองต่อการเปลี่ยนแปลง API ภายนอก แพ็กเกจผันคำกริยาภาษาสเปนที่กล่าวถึงในการสนทนาของชุมชนเป็นตัวอย่างที่ดี โดยมีการปล่อยแพ็กเกจประมาณ 240 ครั้งต่อเดือนเนื่องจากการเพิ่มเวอร์ชันแบบอัตโนมัติ

หมายเหตุ: Semantic versioning ใช้ตัวเลขสามตัว (major.minor.patch) เพื่อระบุประเภทการเปลี่ยนแปลงที่แตกต่างกัน

หน้าต่างสู่ความวุ่นวายของการจัดการแพ็กเกจ

การสืบสวนนี้เน้นย้ำทั้งขนาดและความแปลกประหลาดของระบบนิเวศ npm ด้วยแพ็กเกจกว่า 2.1 ล้านตัวและการดาวน์โหลดหลายพันล้านครั้งต่อเดือน npm กลายเป็นส่วนสำคัญของโครงสร้างพื้นฐานการพัฒนาเว็บ อย่างไรก็ตาม การวิเคราะห์ยังเผยให้เห็นแนวทางปฏิบัติที่น่ากังวล เช่น แพ็กเกจที่มีชื่อเหมือนกันแต่แตกต่างกันเพียงตัวพิมพ์ใหญ่เล็ก และเครื่องมือที่อาจละเมิดเงื่อนไขการให้บริการของแพลตฟอร์มอย่าง WhatsApp

การวิจัยนี้แสดงให้เห็นว่ากระบวนการอัตโนมัติและระบบ continuous integration สามารถนำไปสู่การพองตัวของหมายเลขเวอร์ชันที่ไม่จำเป็นต้องสะท้อนถึงวิวัฒนาการซอฟต์แวร์ที่มีความหมาย แม้ว่าเวอร์ชัน 19,494 อาจฟังดูน่าประทับใจ แต่มักจะเป็นตัวแทนของผลลัพธ์เชิงกลจากสคริปต์มากกว่าการปรับปรุงซอฟต์แวร์ที่แตกต่างกัน 19,494 ครั้ง

อ้างอิง: Which npm package has the largest version number?