Các nhà phát triển JavaScript tranh luận về phương pháp không phụ thuộc khi SuperUtilsPlus - thư viện thay thế Lodash mới xuất hiện

BigGo Editorial Team
Các nhà phát triển JavaScript tranh luận về phương pháp không phụ thuộc khi SuperUtilsPlus - thư viện thay thế Lodash mới xuất hiện

Cộng đồng JavaScript đang sôi nổi thảo luận về quản lý phụ thuộc và các thư viện tiện ích sau khi SuperUtilsPlus ra mắt - một thư viện thay thế mới cho thư viện Lodash phổ biến. Mặc dù thư viện này hứa hẹn các tính năng hiện đại như hỗ trợ TypeScript và khả năng tree-shaking, cuộc trò chuyện đã phát triển thành một cuộc tranh luận rộng hơn về cách các nhà phát triển nên xử lý các hàm tiện ích trong dự án của họ.

Các tính năng chính của SuperUtilsPlus:

  • Hỗ trợ đầy đủ TypeScript với định nghĩa kiểu dữ liệu hạng nhất
  • JavaScript hiện đại (ES2020+) với hỗ trợ ESM và CommonJS
  • Import có thể tree-shake để tối ưu kích thước bundle
  • Không phụ thuộc vào thư viện ngoài
  • Chức năng mở rộng vượt trội so với Lodash
  • Tối ưu hóa hiệu suất
  • Tương thích đa nền tảng (Trình duyệt & Node.js)

Phong trào không phụ thuộc đang tăng đà

Ngày càng nhiều nhà phát triển đặt câu hỏi liệu họ có thực sự cần các thư viện tiện ích hay không. Một số thành viên cộng đồng ủng hộ phương pháp cực đoan: tạo ra các file đơn lẻ chỉ chứa những hàm họ cần, thay vì phụ thuộc vào bất kỳ thư viện bên ngoài nào. Triết lý này xuất phát từ mối lo ngại về bảo trì dài hạn và tính chất không thể dự đoán của việc cập nhật phụ thuộc.

Lý do đằng sau phương pháp này tập trung vào tính ổn định và khả năng kiểm soát. Khi Node.js , TypeScript , hoặc các công cụ cốt lõi khác cập nhật, các nhà phát triển thường gặp phải vấn đề tương thích với các phụ thuộc của họ. Ngay cả các phiên bản được cố định cũng có thể trở nên có vấn đề theo thời gian, dẫn đến những khó khăn trong việc di chuyển có thể tốn hàng ngày thời gian phát triển.

Mối lo ngại bảo mật trong các hàm đơn giản

Cuộc thảo luận có một bước ngoặt thú vị khi các nhà phát triển đặt câu hỏi liệu các hàm tiện ích đơn giản có thể có lỗ hổng bảo mật hay không. Tuy nhiên, cộng đồng nhanh chóng chỉ ra các ví dụ thực tế, bao gồm các lỗ hổng được ghi nhận trong các thư viện đã được thiết lập như Lodash , Ramda , và Underscore . Những vấn đề này thường xuất phát từ các thuộc tính dành riêng và các cuộc tấn công prototype pollution.

Các giải pháp hiện đại sử dụng kiểu Symbol của JavaScript có thể tránh được những vấn đề như vậy, nhưng sự tồn tại của những lỗ hổng này trong các hàm tưởng chừng đơn giản đã củng cố tư duy không phụ thuộc cho một số nhà phát triển.

Ngữ nghĩa ngôn ngữ gây ra tranh luận kỹ thuật

Một cuộc thảo luận sôi nổi nổ ra xung quanh cách các thư viện tiện ích nên xử lý hành vi kỳ quặc của JavaScript . Cuộc tranh luận tập trung vào việc liệu mảng có nên được coi là đối tượng hay không, vì về mặt kỹ thuật trong JavaScript , mảng là đối tượng và [] instanceof Object trả về true. Tuy nhiên, nhiều nhà phát triển cho rằng điều này hiếm khi phù hợp với logic dự định của họ.

Công bằng mà nói, nếu điều đó không phù hợp với mô hình tư duy của bạn, nhưng tôi sẽ không sử dụng bất kỳ thư viện nào coi sự thật như ý kiến.

Điều này làm nổi bật một căng thẳng cơ bản trong thiết kế thư viện tiện ích: các thư viện nên phản ánh thực tế kỹ thuật của ngôn ngữ hay cung cấp trải nghiệm nhà phát triển trực quan hơn? Một số người cho rằng việc thay đổi ngữ nghĩa ngôn ngữ tạo ra thói quen xấu, trong khi những người khác tin rằng các thư viện nên thực thi các mô hình tư duy hợp lý hơn.

Các lựa chọn thay thế hiện có làm phức tạp bối cảnh

Cuộc trò chuyện tiết lộ rằng SuperUtilsPlus gia nhập một lĩnh vực đông đúc. Các nhà phát triển đã đề cập đến một số lựa chọn thay thế hiện có cho Lodash , bao gồm es-toolkit , Remeda , và những thư viện khác. Mỗi thư viện đều cung cấp những đánh đổi khác nhau về kích thước bundle, hỗ trợ TypeScript , và thiết kế API.

Remeda , ví dụ, tập trung vào việc gõ chính xác với các tính năng như đảm bảo groupBy trả về danh sách không rỗng. Es-toolkit đã chứng minh thành công trong các cuộc di chuyển quy mô lớn, với một nhà phát triển báo cáo về quá trình chuyển đổi suôn sẻ trong một ứng dụng React với khoảng 500.000 dòng code.

Các thư viện tiện ích JavaScript thay thế:

  • es-toolkit: Đã được sử dụng thành công trong các ứng dụng React lớn (di chuyển 500k+ dòng code)
  • Remeda: Tập trung vào các kiểu TypeScript chính xác, đảm bảo danh sách không rỗng
  • Just: Các hàm tiện ích theo module (github.com/angus-c/just)
  • Lodash: Thư viện tiện ích gốc, vẫn được sử dụng rộng rãi nhưng thiếu tính năng tree-shaking

Kết luận

Sự xuất hiện của SuperUtilsPlus đã thúc đẩy một cuộc trò chuyện rộng hơn về triết lý quản lý phụ thuộc trong phát triển JavaScript . Mặc dù thư viện này cung cấp các tính năng hiện đại và cải thiện hiệu suất, cộng đồng vẫn chia rẽ giữa việc chấp nhận các công cụ mới và theo đuổi sự độc lập hoàn toàn khỏi các phụ thuộc bên ngoài. Cuộc tranh luận này phản ánh sự phát triển liên tục của hệ sinh thái JavaScript và sự tập trung ngày càng tăng của các nhà phát triển vào khả năng bảo trì dài hạn và bảo mật.

Tham khảo: SuperUtilsPlus