Có hai trường phái tư tưởng và cả hai đều có giá trị.
1) Không bao giờ kiểm tra trong node_modules
và xây dựng lại trên triển khai/cài đặt
Cách tiếp cận dựa chủ yếu vào NPM và khả năng kết nối của môi trường triển khai của bạn. node_modules
được tải xuống và cài đặt (và/hoặc được biên dịch) mỗi khi triển khai được chạy.
Vị trí: Kho lưu trữ của bạn nhỏ hơn nhiều.
Mô-đun NPM được cài đặt trong môi trường chúng sẽ chạy.
Mối quan tâm: Gắn với bên thứ ba để tìm nguồn - Đọc về toàn bộ điều đó left-pad
. Nếu không thể tải xuống một phụ thuộc, toàn bộ hệ thống xây dựng của bạn sẽ bị treo khô. "Bộ đếm thời gian cũ và cáu kỉnh" sẽ trích dẫn điều này là lý do để kiểm tra mọi thứ trong (hoặc chạy NPM riêng của bạn ở đâu đó).
Quản lý chi nhánh - Giống như bạn đã đề cập trong câu hỏi, một số chi nhánh có thể không có cùng phụ thuộc. Dev1 thêm một tính năng mới và sử dụng một gói mới. Bây giờ Dev2 chạy chi nhánh dev
hoặc bất kỳ thứ gì, và mọi thứ đều bị hỏng và họ cần phải biết đến gói npm install
mới. Tinh tế hơn là trường hợp gói npm được thay đổi (bây giờ bạn cần npm update
là npm install
sẽ không có gì thay đổi), hoặc ở đâu node_modules
được nâng cấp để hoạt động trên "tính năng mới 10" nhưng chúng cần xóa mọi thứ ra để "hạ cấp "để đi sửa chữa" lỗi trước 43 ". Nếu bạn đang trong quá trình phát triển tích cực với một nhóm hơn 2-3 người, hãy chú ý đến điều này.
Thời gian xây dựng - Nếu đó là mối quan tâm, phải mất một chút thời gian để tải xuống và cài đặt mọi thứ. Hoặc dài hơn lô.
2) Luôn kiểm tra ở tất cả mọi thứ bạn có thể
Cách tiếp cận này bao gồm node_modules
như một phần của repo.
Vị trí: Không phụ thuộc vào nguồn của bên thứ 3. Bạn có những gì bạn cần để chạy. Mã của bạn có thể tồn tại mãi mãi, và nó không quan trọng nếu npm là xuống hoặc một repo bị xóa.
Chi nhánh độc lập, tính năng rất mới từ Dev1 được tự động đưa vào khi Dev2 chuyển sang mà chi nhánh
Triển khai thời gian ngắn vì không có nhiều nhu cầu phải được cài đặt.
Mối quan tâm: Kho lưu trữ lớn hơn nhiều. Bản sao của mã mất nhiều thời gian hơn vì có nhiều tệp hơn.
Yêu cầu kéo cần được chăm sóc thêm. Nếu một gói được cập nhật (hoặc cài đặt) cùng với mã lõi, PR là một mớ hỗn độn và đôi khi không thể hiểu được. "500 tệp đã thay đổi", nhưng thực sự bạn đã cập nhật một gói và thay đổi hai dòng mã lõi. Nó có thể giúp chia nhỏ thành hai PR - một trong đó là một mớ hỗn độn (bản cập nhật gói) và một trong đó thực sự có thể xem xét lại (thay đổi mã lõi). Một lần nữa, hãy chuẩn bị cho cái này.Các gói sẽ không thay đổi quá thường xuyên, nhưng việc xem xét mã của bạn mất nhiều thời gian hơn (hoặc chăm sóc nhiều hơn một chút) khi chúng thực hiện.
Hệ điều hành Các gói phụ thuộc có thể bị hỏng. Về cơ bản, mọi thứ được cài đặt/biên dịch với gyp
có thể phụ thuộc vào hệ điều hành (trong số những người khác). Hầu hết các gói là "JS thuần túy" và, chỉ là các tập lệnh, chạy ở mọi nơi. Hãy tưởng tượng tất cả các dev của bạn chạy và thử nghiệm trên OSX khi bạn triển khai lên Linux, bạn không thể kiểm tra các gói đã được biên dịch trên MAC vì chúng sẽ không chạy trên Linux. Một cách giải quyết khác cho việc này là xác định hầu hết các gói là "phụ thuộc dev" (--save-dev
) và các gói cần biên dịch như bình thường ("sản xuất", --save
), sau đó bạn chạy npm install --production
để phụ thuộc dev không được cài đặt (và đã có sẵn), nhưng những người khác là.
Kết luận
Nó phụ thuộc. (Bạn có ghét nghe mọi lúc không?)
Tùy thuộc vào nhóm của bạn và mối quan tâm của bạn, bạn có thể tiếp cận. Cả hai đều có giá trị của họ, và bạn sẽ quyết định cái nào có lợi hơn cho bạn. Cả hai đều có nhược điểm là tốt, vì vậy hãy chú ý đến những số trước khi bạn nhận được một chút!
Không. Có thể có một cách để làm điều đó, nhưng tôi thêm 'node_modules' vào' .gitignore' và vì chỉ có một nhánh được kiểm tra tại một thời điểm trong cùng một thư mục, tất cả chúng đều sử dụng cùng một mô-đun. –
không có ý nghĩa - nếu một nhánh có các phụ thuộc hoặc phiên bản hoàn toàn khác với nhánh khác. Tôi không nghĩ rằng gitignore giải quyết được điều đó ... –
Nếu một chi nhánh có sự phụ thuộc hoàn toàn khác với một nhánh khác, thì nó có thể là một dự án khác, và có lẽ thuộc về repo riêng của nó. Bạn có bao giờ định hợp nhất các nhánh này lại với nhau không? Điều đó đang được nói, bạn hoàn toàn có thể cam kết các nút 'node_modules' khác nhau để phân nhánh, nhưng đĩa sẽ bị ăn nhanh một cách nhanh chóng, đặc biệt là vì git không lưu trữ vùng lưu trữ, nhưng ảnh chụp nhanh của toàn bộ kho lưu trữ. Có lẽ bạn nên thực hiện tốt hơn các tệp 'package.json' khác nhau và chạy một git hook có thể cài đặt lại các phụ thuộc vào thanh toán chi nhánh. –