0

Composer: Khá Nhiều Dev PHP Dùng Install/Update Sai - Bạn Có Nằm Trong Số Đó?

Chào các đồng dev PHP!

Có bao giờ bạn tự hỏi: "Sao cứ phải chạy composer install hoài vậy? Khác gì composer update?". Bài viết này mình sẽ giải thích bằng ví dụ siêu thực tế mà bất kỳ ai code PHP đều gặp phải!

1. Bộ đôi "thần thánh" composer.json vs composer.lock

💡 Tưởng tượng:

  • composer.jsonDanh sách mua sắm (Ghi chung chung: "cần mua bàn chải đánh răng") .
  • composer.lockHóa đơn chi tiết (Ghi rõ: "Bàn chải P/S model X2025, giá 25k tại Coopmart")

2. composer install - "Xây nhà theo bản vẽ"

Khi nào dùng?

  • Khi bạn clone project từ Git về máy
  • Khi deploy lên server production
  • Khi đồng nghiệp nói "Ê, chạy composer đi, tui vừa thêm package"
# Cách chạy "chuẩn chỉnh"  
rm -rf vendor/  
composer install --no-dev --ignore-platform-reqs  

⚠️ Lưu ý vàng:

  • Luôn xóa folder vendor cũ trước khi install
  • Flag --no-dev → Bỏ qua packages dùng cho môi trường dev

💡 Điều ít người biết:

  • Nếu không có file composer.lock, composer sẽ dùng composer.json và tạo ra file lock mới
  • Khi thêm package mới vào composer.json rồi chạy composer install, Composer sẽ:
    • Giữ nguyên các package đã có trong lock file
    • Chỉ thêm và cài đặt package mới
    • Cập nhật file lock để bao gồm package mới

3. composer update - "Đi siêu thị mua đồ mới"

Dùng khi:

  • Bạn muốn nâng cấp version package
  • File lock bị conflict sau khi merge code
  • Cần thêm tính năng mới từ package
# Update 1 package cụ thể (an toàn nhất)  
composer update laravel/framework --with-dependencies  

🧨 Cảnh báo đỏ:

  • Không bao giờ chạy composer update trên production
  • Luôn test kỹ trước khi commit file lock mới

4. Bảng so sánh "nhìn là nhớ"

Hoạt động Install Update
Tốc độ ⚡ Nhanh (vì đã biết version) 🐢 Chậm hơn (phải tính toán)
Mục đích Khôi phục dependencies Thay đổi dependencies
Thay đổi lock Không (nếu đã tồn tại) Luôn thay đổi
Dùng khi 90% thời gian 10% khi cần update package
Đọc từ đâu composer.lock (ưu tiên) composer.json (luôn luôn)
Thêm package mới Chỉ thêm package mới vào lock Cập nhật toàn bộ lock file

5. Case study thực tế

Tình huống:

  • Trên local: Laravel 9.2.0 (lock file)
  • Trên production: Laravel 9.1.0 (lock file cũ)

Cách fix:

  1. Trên local → composer update laravel/framework
  2. Test kỹ → commit cả json và lock
  3. Trên production → composer install

6. Best practices "đỉnh cao"

  • 🚫 Đừng bao giờ sửa tay file lock
  • Luôn commit cả 2 file json và lock
  • 🔄 Dùng composer require thay vì sửa json thủ công
    • Nhanh hơn việc sửa json rồi chạy install
    • Tự động cập nhật cả json và lock file
  • 📅 Mỗi tháng 1 lần: Update minor version package

Kết luận

Hiểu đúng cách Composer hoạt động giúp bạn:

  • 🕒 Tiết kiệm 3 tiếng debug mỗi tuần
  • 💣 Tránh 20+ lỗi dependency phổ biến
  • 👨‍💻 Trở thành "cao thủ" trong mắt đồng nghiệp

Còn bạn? Từ nay mỗi lần chạy composer sẽ là hành động có ý thức chứ không phải "thánh chỉ" mù quáng nữa 😉

👇 Comment ngay câu hỏi nếu bạn gặp tình huống oái oăm với Composer!


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí