wiki

View on GitHub

Composer

Trước khi Composer ra đời, chúng ta thường gặp khó với hàng chục các thư viện của bên thứ ba cần phải quản lý. Việc update rất khó khăn

1. Composer là gì?

2. Lợi ích của composer

Ý tưởng của composer không phải là mới, nó được lấy cảm hứng từ các công cụ như npm của Node, tuy nhiên composer chỉ ở phạm vi dự án PHP

Trước đây khi bạn triển khai các dự án dựa trên các, bạn sẽ phải đối mặt một số việc sau:

Tuy nhiên, công việc sẽ thật dễ dàng với Composer, bạn sẽ làm được:

3. composer.jsoncomposer.lock

Đây là 2 file rất quan trọng trong một package composer.

{
    "name": "laravel/laravel",
    "type": "project",
    "description": "The Laravel Framework.",
    "keywords": ["framework", "laravel"],
    "license": "MIT",
    "authors": [
    {
        "name": "Dinh Quoc Han",
        "email": "admin@dinhquochan.com"
    }],
    "require": {
        "php": "^7.3|^8.0",
        "ext-gd": "*",
        "laravel/cashier": "^13.13",
        "laravel/framework": "^8.40",
        "laravel/sanctum": "^2.15",
        ...
    },
    "require-dev": {
        "barryvdh/laravel-debugbar": "^3.6",
        "facade/ignition": "^2.5",
        "fakerphp/faker": "^1.9.1",
        ...
    },
    ...
}

Cách hoạt động

4. Autoloading

Sau khi đã cài đặt composer, mọi thứ sẽ trở nên dễ dàng hơn. Trong file chính của project, bạn nên thêm dòng lệnh này vào:

include_once './vendor/autoload.php';

Toàn bộ package bạn cần đã được thêm vào project và chúng sẵn sàng cho bạn sử dụng. Trong Laravel framework, bạn chỉ cần gõ như sau:

composer dump-autoload

Tất cả thư viện trong composer đã sẵn sàng để sử dụng trong toàn bộ project.

5. Có nên đẩy file composer.lock lên GIT

Đẩy composer.lock lên GIT khi:

Không đẩy composer.lock lên GIT khi:

Lưu ý, nếu bạn không đẩy composer.lock lên Git, hãy đảm bảo các thành viên khác trong nhóm có quyền truy cập và biết cách cài đặt các phiên bản phụ thuộc cần thiết.

6. Cách chỉ định phiên bản trong composer.json

Có 6 cách để chỉ định phiên bản trong file composer.json:

  1. Các toán tử >, <, >=, <= và !=. Ví dụ >2.7 có nghĩa là bất kì phiên bản vào trên 2.7, >2.7 <=3.5 nghĩa là bất kì phiên bản nào trên 2.7 và dưới 3.5, bao gồm cả 3.5.
  2. 2.3.* sẽ bao gồm tất cả phiên bản nào lớn hơn bằng 2.3.0 và nhỏ hơn bằng 2.4.0. Nó tương đương với >=2.3.0 <2.4
  3. 2.0.0 - 3.0.0 có nghĩa là bất kì phiên bản vào lớn hơn bằng 2.0.0 và nhỏ hơn bằng 3.0.0. Nó tương đương với >=2.0.0 <=3.0.0
  4. ~3.6 cho phép tất cả phiên bản lớn hơn bằng 3.6, nhưng không bao gồm từ 4.0 trở lên. Nó tương đương với >=3.6 <4.0
  5. dev-master là một định danh cho phiên bản phát triển chính của một gói phụ thuộc. Nó đại diện cho phiên bản mới nhất từ nhánh master trong kho lưu trữ của gói. Tuy nhiên, dev-master có thể không ổn định và không nên được sử dụng.
  6. Toán tử ^ cho phép tất cả phiên bản ở giữa hai phiên bản chính liền kề nhau. Toán tử ^ được recommend khi dùng để viết code file composer.json:

Cụ thể, toán tử ^ trong composer.json tuân theo quy tắc sau:

7. Packagist

Packagist là repository chính để lưu những thông tin về composer package. Bạn có thể vào trang web của packagist để tìm kiếm những library cần thiết và cài đặt chúng một cách nhanh chóng và dễ dàng thông qua composer, hoặc bạn cũng có thể tự tạo một package và chia sẻ với cộng đồng thông qua trang https://packagist.org.

8. Các câu lệnh của Composer

Các Global Option

Các câu lệnh