hỏi về cách triển khai project vuejs
xin chào mn. Mình đang có 1 vấn đề là mình đang có 1 web đã làm xong các chức năng. Và sau đó khách hàng muốn làm clone web đó ra 1 vài trang nữa với chức năng tương tự (chỉ đổi api khác) và thêm 1 số chức năng. Mình muốn hỏi là ở FE cụ thể là Vuejs thì mình nên dùng gì để tối ưu cho việc đó. vì nhỡ phải update chức năng nào đó thì phải vào từng project để update. tks mn
2 CÂU TRẢ LỜI
làm 1 git chung, 1 nhánh develop để phát triển chức năng, xong break ra các nhánh khác rồi config từng api ở mỗi nhánh đó. phát triển gì thì dev ở nhánh develop rồi merge vào các nhánh kia là oke
@tuanminpay ý bạn là nhánh develop sẽ chứa tất cả các chức năng à b? nhưng cái của mình là 1 số project clone nhưng sẽ có chức năng riêng của nó nữa. thì merge thế sao đc nhỉ? với ví dụ 1 chức năng nào đó merge rồi nhưng cần update thêm gì đó thì phải làm như nào?
@sven_9x đầu tiên b phải build các chức năng chung trước, rồi mới phát triển các chức năng riêng của từng project trên từng nhánh khác nhau, rồi nếu update chức năng chung nào thì chỉ cần update ở develop xong merge qua các nhánh riêng là đc. theo mình hiểu câu hỏi của b thì là vậy
@tuanminpay như thế là vẫn phải merge vào từng nhánh mỗi lần update nhỉ? có cách nào để ko phải làm vậy ko nhỉ b?
@sven_9x theo mình biết thì ko
1. Chức năng custom ít
Nếu trước mắt, "1 số chức năng" mà bạn đề cập là con số ít và nhỏ, chỉ là fontend function thôi, thì bạn cứ code chung luôn 1 source code, sử dụng environment variable khi deploy để bật/tắt các chức năng tương ứng hoặc đại loại là ý tưởng như vậy. Nếu số lượng nhiều thì chuyển qua tham khảo sang kiểu số 2.
2. Chức năng custom nhiều
Nếu "1 số chức năng" là số lượng lớn và thực sự khác biệt so với phần project còn lại thì tốt nhất mình nghĩ bạn nên tách luôn mỗi project ra một repo riêng để tránh BREAKING CHANGE giữa các project.
Để thuận tiện thì bạn nên tổ chức code thành các package riêng rẽ, và dùng NPM để cài đặt vào các project sử dụng. Lúc này ở từng project bạn chỉ cài package qua NPM và thêm một đoạn code nhỏ để install là xong. Như thế thì việc tái sử dụng code sẽ linh hoạt hơn và không bị breaking change.
Bạn có thể dùng git submodule, hoặc dùng kiểu 2 mình trả lời ở trên. Tách ra thành package thì package đó bạn code gì bên trong cũng được 😃 Ví dụ như cả cái màn quản lý user. =))
Chẳng hạn như Viblo, bọn mình có chức năng đăng nhập, phần backend mình cũng tạo một cái package, tất cả các con service vệ tinh chỉ cần cài nó là có phần đăng nhập, ở frontend cũng có package đăng nhập, cài vào có phần tích hợp đăng nhập với backend.
Hay kiểu như mấy component dùng chung giữa các service như phần User Menu trên thanh Navbar của Viblo, Viblo Code, Viblo Accounts. Để ý bạn sẽ thấy nó đều gần giống nhau, chỉ khác phần link dropdown phía dưới. Đó là component đó được tách ra và đặt vào một package npm để dùng chung đó.
Bạn tham khảo cái: https://bit.dev/ giúp tách các component thành các package để tái sử dụng cho từng dự án. Hoặc bạn đóng gói thẳng thành package NPM cũng được mà.