Composer| Require và Require-dev
Khi làm việc với composer bạn sẽ thấy trong file composer.json sẽ có 2 mục là require và require-dev, bạn thắc mặc nó có tác dụng gì ? Bài này ta sẽ cùng tìm hiểu về nó.
Mục lục
1. Giới thiệu
Trong một dự án thường sẽ có 4 loại môi trường chính là:
- development
- testing
- staging (Gần giống với môi trường production)
- production
Về ý nghĩa ứng với những loại trên ta có:
– require sẽ ứng với staging và production.
– require–dev sẽ ứng với development và testing.
Ví dụ: Với môi trường dev đang phát triển thì có thể bạn phải cần đến phpunit dùng để testing hoặc faker để tạo data giả để testing, nhưng với môi trường production khi đã chạy thực tế thì src của bạn không cần đến những dependencies đó nữa.
2. Khác biệt khai báo dependencies ứng với từng môi trường
Cụ thể hơn trong file composer.json :
- Các dependencies nếu khai báo trong require sẽ được sử dụng cho cả môi trường dev và production
- Ngược lại nếu khai báo trong require-dev sẽ sử dụng cho môi trường dev.
3. Cách triển khai
Giả sử file composer.json bạn khai báo như sau:
"require": {
"php": "^7.3",
"doctrine/dbal": "^2.11",
"fideloper/proxy": "^4.2",
"fruitcake/laravel-cors": "^2.0",
"guzzlehttp/guzzle": "^7.0.1",
"laravel/framework": "^8.0",
"laravel/tinker": "^2.0"
},
"require-dev": {
"facade/ignition": "^2.3.6",
"fzaninotto/faker": "^1.9.1",
"mockery/mockery": "^1.3.1",
"nunomaduro/collision": "^5.0",
"phpunit/phpunit": "^9.3"
},
1. Trường hợp cài đặt dự án cho môi trường development, bạn sẽ sử dụng lệnh sau:
composer install
Lệnh này nó sẽ install tất cả các dependencies được khai báo trong require và require-dev( nếu có khai báo).
Khi lệnh chạy xong bạn mở thư mục vendor sẽ thấy những thư viện đó được cài đặt vào đây.
2. Trường hợp cho môi trường production
composer install --no-dev
Trong đó –no-dev sẽ cho composer biết chỉ install những dependencies được khai báo trong mục require.
Ứng với ví dụ khai báo trên bạn sẽ thấy sau khi install trong thư mục vendor sẽ không có thư viện phpunit nằm trong mục require-dev.