PHP

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 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ó.

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 stagingproduction.
requiredev sẽ ứng với developmenttesting.

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 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 requirerequire-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.

4. Tham khảo

https://stackoverflow.com/questions/19117871/what-is-the-difference-between-require-and-require-dev-sections-in-composer-json

Leave a Reply

Your email address will not be published. Required fields are marked *