Điều thú vị

Composer và vài điều cần biết cho người mới

Hôm trước 1 em đồng nghiệp mới join project vừa làm failed cái build trên Gitlab. Mình review lại code để xem vấn đề xuất phát từ đâu.

Project mình đang phát triển có 2 repository chính đang active. Hiện đang clone ra để bạn mới thực tập. Cấu trúc như vầy:

  • launchcms: là project web để implement các tính năng của CMS admin
  • launchcms-core: là project core để phát triển chi tiết về model và các nghiệp vụ.

launchcms sẽ include launchcms-core trong composer.json.

Khi lỗi phát sinh, launchcms chứa sự thay đổi cần đi kèm với 1 version mới của launchcms-core. Tuy nhiên, nếu chạy composer update thì lại thấy source code của project launchcms-core vẫn còn đang cũ (không phải là version mới nhất).

Mình xem một lúc thì hiểu nguyên nhân và mình nghĩ đây cũng là sai lầm thường gặp của các bạn mới làm việc với composer.

Đầu tiên, cần phải hiểu workflow của composer khi nó chạy install hoặc update cho các dependency. Tham khảo hình dưới đây:

composer-install-flow

Về mặt bản chất, mỗi lần composer chạy nó sẽ sinh file composer.lock. File này lưu một snapshot dependency về mặt version của các package cần thiết ở thời điểm nó chạy. Mỗi khi bạn chạy lại lệnh composer update, nó sẽ kiểm tra sự tồn tại của file composer.lock. Nếu package nào đã tồn tại trong folder vendor và đã có trong composer.lock, nó sẽ ko update. Do đó cho dù package phụ thuộc là launchcms-core có update thì mình có chạy composer update cũng không bao giờ get được version mới.

Cách làm đúng nhất trong trường hợp này là: mình remove file composer.lock đi – rồi run lại lệnh composer update, thì tự động composer sẽ lấy version latest của package phụ thuộc về.

Tóm tắt lại nè:

Nhìn chung, thông thường bạn sẽ có nhu cầu chạy composer install khi clone project về.  Composer install giúp bạn download tất cả những package cần thiết của project vào thư mục vendor.

Nếu project của bạn có một package phụ thuộc và bạn biết rằng package đó có version mới update, thì hãy xoá file composer.lock. Sau đó run lệnh composer update để get package latest.

Khi commit code lên source version control, bạn cần phải commit cả file composer.lock để đảm bảo người khác download lượt thay đổi có liên quan đến version của package cần update được cập nhật.

 

Nếu các bạn cũng gặp trường hợp như vầy, thì hy vọng là bài này giúp các bạn hiểu rõ hơn về cơ chế hoạt động của composer để xử lý phù hợp.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: