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.json
→ Danh sách mua sắm (Ghi chung chung: "cần mua bàn chải đánh răng") .composer.lock
→ Hó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ùngcomposer.json
và tạo ra file lock mới - Khi thêm package mới vào
composer.json
rồi chạycomposer 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:
- Trên local →
composer update laravel/framework
- Test kỹ → commit cả json và lock
- 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