Skip to content

15.6 Dependency hygiene

บทนี้รวบรวม debt ที่เกี่ยวข้องกับ dependency ที่ไม่ใช่ runtime หลัก แต่มีผลต่อ supply chain, ขนาดแพ็กเกจ, และความสามารถในการดูแล

รายการทั้งหมด

LEG-5 · AntD กระจาย major version สองตัว

ข้อมูลรายละเอียด
Evidencevtrc-web/package.json:21"antd": "^3.26.20" (v3, EOL 2020); vtrc-rc-backoffice/package.json:21"antd": "4.15.4" (v4, maintenance)
ปัญหาproduct family เดียวกันใช้ design system กระจายสอง major version — component ที่ทำงานใน web อาจไม่ทำงานใน backoffice และกลับกัน
Impactการ maintain component library ทำสองที่ ความไม่ consistent ของ UX ความยากในการ share component
Mitigation ระยะสั้นยกระดับ web ไป AntD v4 ก่อน (งานน้อยกว่า v5)
แนวทางระยะยาวรวม design system เป็นตัวเดียว (Nuxt UI หรือ PrimeVue ถ้าย้าย Nuxt 3)

LEG-6 · react-scripts 3.4.3 (CRA deprecated)

ข้อมูลรายละเอียด
Evidencevtrc-rc-backoffice/package.json:61"react-scripts": "3.4.3"
ปัญหาCreate React App (CRA) ถูก deprecated อย่างเป็นทางการในปี 2023 — react-scripts 3.4.3 มาพร้อม Webpack 4 (EOL), ESLint 6 (EOL), Workbox 4 (EOL), Babel 7.9
Impactเวลา build ช้า ไม่รองรับ feature ใหม่ ไม่ได้รับ security patch
Mitigation ระยะสั้นย้ายไป Vite ที่ใช้ Webpack 5 / esbuild
แนวทางระยะยาวย้ายไป Nuxt 3

LEG-7 · Webpack 4 EOL + html-webpack-plugin beta

ข้อมูลรายละเอียด
Evidencevtrc-web/package.json:106"webpack": "4.42.0"; ใช้ html-webpack-plugin 4.0.0-beta.11 (beta ใน production)
ปัญหาWebpack 4 EOL ตั้งแต่ปี 2022 การใช้ beta version ของ plugin ใน production มีความเสี่ยง
Impactbuild ช้า, ไม่รองรับ tree shaking แบบใหม่, ความเสี่ยงจาก beta
Mitigation ระยะสั้นยกระดับ Webpack เป็น v5 + html-webpack-plugin stable
แนวทางระยะยาวย้ายไป Vite หรือ Nuxt 3

LEG-8 · ldapjs ไม่ได้รับการพัฒนา

ข้อมูลรายละเอียด
Evidencecu-central-api/main-api/package.json:30"ldapjs": "^2.2.0"
ปัญหาldapjs ไม่ได้รับการพัฒนา มีประวัติ CVE สาขา fork ที่ยังพัฒนาคือ ldapts
ImpactCVE ใหม่ ๆ ของ LDAP client ไม่ถูกแก้
Mitigation ระยะสั้นเปลี่ยนไป ldapts
แนวทางระยะยาวใช้ go-ldap/ldap ใน Go target

LEG-9 · jsonwebtoken v8

ข้อมูลรายละเอียด
Evidencevtrc-api/api/package.json:41 + cu-central-api/.../package.json:42"jsonwebtoken": "^8.5.1"
ปัญหาjsonwebtoken v8 มี CVE-2022-23529 family — เวอร์ชัน v9 แก้แล้ว
Impactความเสี่ยงด้าน authentication ถ้า CVE ถูก exploit
Mitigation ระยะสั้นยกระดับเป็น jsonwebtoken v9 (ตรวจ breaking changes)
แนวทางระยะยาวใช้ golang-jwt/jwt/v5

LEG-10 · html-pdf + node-qpdf ไม่ได้รับการพัฒนา

ข้อมูลรายละเอียด
Evidencevtrc-api/api/package.json:37,46html-pdf (PhantomJS, abandoned 2018) + node-qpdf (unmaintained 2017). ไม่มี ใน cu-central-api/main-api/package.json
ปัญหาPDF stack ฝั่ง vtrc-api ทั้งก้อน EOL — PhantomJS ถูกแทนด้วย headless Chrome ตั้งแต่ปี 2018
Impactการแก้ bug ของ PDF generation ทำได้ยาก ความเสี่ยงด้าน security
Mitigation ระยะสั้นเปลี่ยน html-pdf ไป Playwright/Puppeteer + headless Chrome
แนวทางระยะยาวchromedp (Go) + pdfcpu สำหรับ encryption

LEG-11 · mariaDB v2 + mysql2 v2 ทั้งคู่

ข้อมูลรายละเอียด
Evidencevtrc-api/api/package.json:40,45"mariadb": "^2.4.2" + "mysql2": "^2.1.0"
ปัญหาประกาศทั้งสอง driver โดยไม่ชัดเจนว่าใช้อันไหน — กลยุทธ์ driver กำกวม
Impactความสับสนในการ maintain ความเสี่ยงจากการใช้ driver ผิด
Mitigation ระยะสั้นเลือก driver เดียวและลดอีกอัน — ยกระดับเป็น v3
แนวทางระยะยาวgo-sql-driver/mysql ใน Go target

LEG-12 · redis v3 (callback API)

ข้อมูลรายละเอียด
Evidencevtrc-api/api/package.json:50"redis": "^3.1.2"; cu-central-api/main-api/package.json:37"redis": "^3.0.2" (คนละ patch range แต่ยังเป็น major v3)
ปัญหาredis v3 ใช้ callback API ที่เขียนยาก มีประวัติ CVE เวอร์ชัน v4 ใช้ Promise
Impactcode Redis อ่านยาก, ความเสี่ยง CVE
Mitigation ระยะสั้นยกระดับเป็น v4 (เปลี่ยน API เป็น await)
แนวทางระยะยาวredis/go-redis/v9

LEG-13 · s, stream, findit — package ไม่ได้ใช้

ข้อมูลรายละเอียด
Evidencevtrc-api/api/package.json:34,51,52,53"s", "stream", "findit" — grep ยืนยัน 0 imports
ปัญหาpackage ที่ไม่ได้ใช้ — เพิ่ม noise ใน supply chain, เพิ่มความเสี่ยง บางตัว (เช่น stream) มีชื่อเดียวกับ Node core module ทำให้ resolution กำกวม
Impactความเสี่ยง supply chain โดยไม่จำเป็น
Mitigation ระยะสั้นลบออกจาก package.json — ทำได้ภายใน 30 นาที
แนวทางระยะยาวlint rule ที่ตรวจ dependency ที่ไม่ได้ใช้

LEG-27 · xlsx (SheetJS community) มี prototype-pollution CVE

ข้อมูลรายละเอียด
Evidencecu-central-api/main-api/package.json:45"xlsx": "^0.16.9"
ปัญหาSheetJS community edition มีประวัติ prototype-pollution CVE — เวอร์ชันใหม่อยู่บน CDN เท่านั้น (ไม่ใช่ npm)
Impactความเสี่ยงถ้า import Excel file ที่ผู้ใช้ประดิษฐ์
Mitigation ระยะสั้นใช้ SheetJS จาก CDN build หรือ exceljs
แนวทางระยะยาวxuri/excelize ใน Go target

LEG-28 · sha512crypt-node

ข้อมูลรายละเอียด
Evidencecu-central-api/main-api/package.json:39"sha512crypt-node": "^0.1.0"
ปัญหาniche, unmaintained native-ish crypto
Impactความเสี่ยงถ้ามี CVE ในอนาคต การ maintain ยาก
Mitigation ระยะสั้นเปลี่ยนไป bcrypt หรือ Argon2
แนวทางระยะยาวcrypto/sha512 + golang.org/x/crypto ใน Go

LEG-29 · firebase-admin v9 + googleapis v59

ข้อมูลรายละเอียด
Evidencevtrc-api/api/package.json:29,31firebase-admin ^9.2.0, googleapis ^59.0.0. ไม่มี ใน cu-central-api/main-api/package.json
ปัญหาAPI drift มาก (ปัจจุบัน v12 และ v140+) — ความเร็วในการพัฒนาช้าลง ไม่ได้รับ feature ใหม่
Impactการใช้บริการใหม่ ๆ ของ Firebase/Google ทำไม่ได้ (เฉพาะ stack ที่ vtrc-api ใช้)
Mitigation ระยะสั้นยกระดับเป็นเวอร์ชันปัจจุบันใน vtrc-api
แนวทางระยะยาวfirebase.google.com/go/v4, google.golang.org/api ใน Go

สรุป

IDรายการSeverityEffort ระยะสั้น
LEG-5AntD v3 + v4High1 สัปดาห์ (web → v4)
LEG-6react-scripts 3.4.3High1-2 สัปดาห์ (Vite)
LEG-7Webpack 4 EOLHigh1 สัปดาห์
LEG-8ldapjs unmaintainedHigh2-3 วัน
LEG-9jsonwebtoken v8High1 วัน
LEG-10html-pdf + node-qpdfHigh1 สัปดาห์
LEG-11mariadb + mysql2 ซ้อนMed1 วัน
LEG-12redis v3High2-3 วัน
LEG-13s, stream, finditMed30 นาที
LEG-27xlsx CVEHigh1 วัน
LEG-28sha512crypt-nodeMed1 วัน
LEG-29firebase-admin + googleapisHigh2-3 วัน

บทถัดไปจะไปยัง debt ด้านคุณภาพโค้ดและความสามารถในการดูแล