Giới thiệu
Khi phát triển ứng dụng di động với React Native, một trong những lựa chọn đầu tiên mà các nhà phát triển phải đối mặt là sử dụng Expo CLI hay bare React Native CLI. Trong nhiều năm qua, Expo được coi là công cụ chỉ tốt cho nguyên mẫu, MVP hoặc ứng dụng đơn giản, trong khi React Native CLI được xem là lựa chọn "nghiêm túc" cho sản xuất.
Tuy nhiên, thực tế đã thay đổi. Ngày nay, Expo đã phát triển thành lựa chọn mặc định được khuyến nghị cho các ứng dụng sản xuất, và nhiều hạn chế trước đây không còn tồn tại. Nhưng vẫn có nhiều người viết về các hạn chế này cho đến ngày nay. Ngay cả khi bạn hỏi các mô hình ngôn ngữ như ChatGPT về React Native CLI so với Expo CLI, nó vẫn sẽ đưa ra những hạn chế cũ, lý do mà nhiều người vẫn đưa chúng vào bài viết của họ mà không có kinh nghiệm cá nhân.
Hãy cùng khám phá thực trạng hiện tại của hệ sinh thái này.
1. Expo CLI: Quá khứ và Hiện tại
Nhận thức cũ: Expo bị giới hạn—bạn chỉ có thể sử dụng những gì SDK của Expo cung cấp, và nếu cần mã gốc tùy chỉnh, con đường duy nhất là “eject” vào một quy trình làm việc React Native bare.
Hiện tại: Tùy chọn eject đã bị gỡ bỏ và thay thế bằng expo prebuild, tạo ra các dự án gốc tương tự (Xcode/Android Studio) mà bạn sẽ nhận được với React Native CLI. Từ đó, bạn có thể:
- Thêm các module gốc tùy chỉnh.
- Chỉnh sửa các dự án iOS và Android trực tiếp.
- Vẫn sử dụng các tính năng quản lý của Expo như cập nhật OTA, xây dựng EAS, và SDK của Expo.
Điều này có nghĩa là Expo cung cấp tới 95% độ linh hoạt của React Native bare, với các công cụ bổ sung giúp việc phát triển và bảo trì trở nên dễ dàng hơn.
2. Bare React Native CLI: Vị trí hiện tại
Sử dụng React Native CLI trực tiếp mang đến cho bạn toàn quyền kiểm soát ngay từ ngày đầu:
- Bạn cấu hình Gradle và CocoaPods một cách thủ công.
- Bạn tự cài đặt và liên kết tất cả các thư viện.
- Bạn tự quản lý các bản nâng cấp (điều này có thể gây khó khăn cho các dự án lớn).
Mặc dù điều này mang lại tự do tối đa, nhưng cũng tạo ra gánh nặng. Bạn phải chịu trách nhiệm về các pipeline CI/CD, giải pháp cập nhật OTA và điều hướng các nâng cấp phức tạp. Đối với các ứng dụng có yêu cầu gốc cực kỳ chuyên biệt, quyền kiểm soát này rất quý giá—nhưng đối với hầu hết các đội, sự đánh đổi là quá lớn.
3. Lợi ích của Expo ngoài Tốc độ Phát triển
Expo không chỉ là về việc nguyên mẫu nhanh nữa. Nó cũng mang lại lợi ích sau phát triển khiến nó trở thành lựa chọn mạnh mẽ cho các ứng dụng sản xuất:
-
Nâng cấp dễ dàng hơn: Expo duy trì sự tương thích trên toàn bộ hệ sinh thái, vì vậy việc nâng cấp phiên bản React Native thường dễ dàng hơn nhiều so với các dự án bare.
-
EAS (Dịch vụ Ứng dụng Expo): Cung cấp các pipeline CI/CD được quản lý, xây dựng đám mây và nộp ứng dụng mà không cần cấu hình thủ công.
-
Cập nhật OTA (Over-the-Air): Gửi bản sửa lỗi và cập nhật tính năng ngay lập tức mà không cần trải qua quy trình xem xét ứng dụng. (Khi CodePush đã được gỡ bỏ, cập nhật OTA của Expo trở thành giải pháp hiện đại.)
-
SDK phong phú: Camera, thông báo, cảm biến, sinh trắc học và nhiều hơn nữa — tất cả đều được duy trì và kiểm tra để hoạt động với các phiên bản mới nhất của React Native.
4. Khuyến nghị Chính thức
Tài liệu React Native hiện tại cũng khuyến nghị bắt đầu với Expo cho các dự án mới:
“Có. Bạn có thể sử dụng React Native mà không cần Framework. Tuy nhiên, nếu bạn đang xây dựng một ứng dụng mới với React Native, chúng tôi khuyên bạn nên sử dụng một Framework.
Tóm lại, bạn sẽ có thể dành thời gian viết ứng dụng của mình thay vì viết toàn bộ Framework cho chính ứng dụng của bạn.”
— Tài liệu React Native: Cài đặt Môi trường
Thời điểm duy nhất bạn nên sử dụng bare React Native CLI ngay từ đầu là nếu:
- Bạn đã biết rằng công cụ của Expo sẽ không phù hợp với nhu cầu của dự án.
- Bạn có một đội ngũ mạnh với chuyên môn và nguồn lực để duy trì một cấu hình hoàn toàn tùy chỉnh.
Đối với hầu hết các nhà phát triển và đội ngũ, Expo nên là lựa chọn mặc định.
5. Tóm tắt
- Expo không còn chỉ dành cho nguyên mẫu—nó hoàn toàn sẵn sàng cho sản xuất.
- Eject đã biến mất; được thay thế bằng
expo prebuild, cung cấp gần như cùng một độ linh hoạt như React Native bare. - Expo cung cấp lợi ích dài hạn đáng kể như nâng cấp dễ dàng hơn, EAS và cập nhật OTA.
- Nhóm React Native khuyến nghị Expo như là điểm khởi đầu mặc định cho các ứng dụng sản xuất.
Trừ khi các giải pháp của Expo không đáp ứng nhu cầu của bạn—và bạn sẵn sàng đương đầu với độ phức tạp của việc duy trì mọi thứ một mình—bạn nên bắt đầu với Expo.
Kết luận
Cuộc tranh luận cũ “Expo so với React Native CLI” đã lỗi thời. Ngày nay, Expo là con đường sản xuất được khuyến nghị, và các hạn chế mà trước đây biện minh cho việc tránh nó hầu như đã biến mất. Hãy bắt đầu với Expo cho dự án tiếp theo của bạn và trải nghiệm sự tiện lợi mà nó mang lại.