Composer Là Gì và Nó Giúp Ích Như Thế Nào?

Composer Là Gì và Nó Giúp Ích Như Thế Nào?
Composer là cách để đẩy tất cả phần mềm của bên thứ 3 như Laravel, CSS, plugin jQuery,…vào dự án. Composer phổ biến khi thực hiện được nhiệm vụ quản lý dependency.

Trước khi có sự xuất hiện của Composer, có phải các bạn thường gặp khó khăn khi phải giải quyết hàng tá các thư mục của bên thứ 3 mà các bạn phải quản lý? Chuyện cập nhật càng khó và các bạn còn phải nhớ từng bước phải cài đặt như thế nào. Thời khổ sở đó đã qua vì Composer là vị cứu tinh cho chúng ta khi phải xử lý những vấn đề đó. Composer được hiểu đơn giản là công cụ quản lý các thư mục trong thư viện của các project.

 

Composer là gì?

 

Composer lần đầu tiên được phát hành vào 1/03/2012. Nó là 1 dependency management trong hệ PHP và là công cụ quản lý các danh mục trong thư viện mà project PHP hoặc Laravel của các bạn đang sử dụng. Composer có nhiệm vụ quản lý sự phụ thuộc của các tài nguyên trong 1 dự án. Nó cho phép ta khai báo các thư viện mà dự án của bạn đang sử dụng. 

 

Composer khi đó sẽ tự tải các mã của các thư viện. Đồng thời, nó cũng có tính năng tạo ra các file cần thiết và nằm trong project của bạn. Khi có phiên bản mới xuất hiện, composer sẽ tự động cập nhật các thư viện. 

 

Để Laravel vận hành trơn tru, các bạn nên cài đặt Composer trước khi sử dụng. Vì nó là công cụ quản lý các thư viện của PHP.

 

Composer mang đến những lợi ích nào?

 

Trước khi có composer, các nhà lập trình khác cũng đã có ý định tạo ra công cụ nào đó để hỗ trợ một phần công việc cho họ thuận tiện hơn. Composer được bắt nguồn cảm hứng từ các công cụ có trước đó như npm của Node. Phần hoạt động của composer cũng khá giống APT (thường có trên Ubuntu) hay Yum (thường xuất hiện ở CentOS). Tuy nhiên, composer chỉ giới hạn hoạt động ở PHP và không thể mở rộng ra toàn OS như APT và Yum.

 

Khi chưa có composer, các bạn muốn triển khai dự án thì các bạn phải đối mặt với các vấn đề này:

 

  • Dự án có sử dụng một số thư viện ở bên ngoài. Các bạn phải tắt hết chúng đi và cho vào folder của project. Sau đó, các bạn sử dụng. Nếu không thực hiện tuần tự như vậy, thì các bạn sẽ không chạy dự án của mình suôn sẻ
  • Một số các thư viện lại phải phụ thuộc vào các thư viện khác. Chúng không hoạt động độc lập
  • Chuyện cập nhật các phiên bản của các thư viện là khổ sở. Ví dụ thư viện A có sử dụng thư viện B, thư viện B lại sử dụng thư viện C. Điều gì sẽ xảy ra? Nếu một trong các thư viện đó có cập nhật, thì bạn buộc phải tìm mò về phần gốc của thư viện để cập nhật và đảm bảo tính chính xác

 

Các bạn có thấy hình ảnh quen thuộc của chính mình khi chưa có composer không? Khi có composer, các bạn sẽ cảm thấy nhẹ nhàng hơn. Các bạn sẽ làm được một số việc như sau: 

 

  • Khai báo các thư viện mà dự án bạn đang sử dụng
  • Quản lý tập trung toàn bộ thư viện đang sử dụng cho dự án và các phiên bản cập nhật mới nhất thông qua file composer.json
  • Tìm đầy đủ các phiên bản của package. Sau đó, các bạn có thể cài đặt và chọn thư mục nào cần thiết cho dự án. Khi cài đặt chúng vào dự án là bạn đang tải chúng về dự án đang thực hiện 
  • Dung lượng dự trữ của dự án sẽ lớn hơn vì bạn có thể cộng thêm code của các thư viện. Composer sẽ tự động thực hiện điều đó cho bạn

 

Cách cài đặt composer 

 

Trên Unix (Mac OSX và Linux), các bạn chuyển đến thư mục project và nhập dòng lệnh này vào:

 

$ cd /path/to/my/project
$ curl -s http://getcomposer.org/installer | php

 

Bạn thực hiện từng câu lệnh trên trong dự án. Nó sẽ hỗ trợ bạn tạo file composer.phar và bạn có thể sử dụng trong thư mục đó. Để viết câu lệnh có khả năng cài đặt và mang tính toàn cầu (ngụ ý là sử dụng bất cứ folder nào mà bạn muốn), bạn nhập dòng lệnh này: 

 

sudo mv composer.phar /usr/local/bin/composer

 

Để sử dụng composer ở bất cứ thư mục nào, bạn chỉ cần nhập composer (thay vì phải php composer.phar). Lưu ý rằng composer được tạo từ PHP, nên bạn đừng quên cài PHP trước khi cài composer vào.

 

Bạn đã biết đến composer.json chưa?

 

Trong quá trình sử dụng composer, điểm mấu chốt của dependency management là 1 file JSON sẽ có tên là composer.json. File này cũng có cấu trúc tương tự như file package.json của npm hoặc Gemfile của Ruby. 

 

{
    "name": "laravel/laravel",
    "description": "The Laravel Framework.",
    "keywords": ["framework", "laravel"],
    "license": "MIT",
    "require": {
        "laravel/framework": "4.2.*",
    },
    ....
}

 

Các yêu cầu autoload của bạn sẽ được project liệt kê trong key là require. Lấy ví dụ là file composer.json mặc định của Laravel framework (version 4.2). Điều đó có nghĩa là bạn chấp nhận bản vá lỗi nhỏ của 4.2 như 4.2.17, 4.2.25,… và không nâng cấp lên bản 5.0

 

Khi sử dụng terminal trong project folder, bạn nên thực hiện lệnh composer install. Nó sẽ chuyển tất cả dependencies của bạn vào project và thực hiện một số công việc có liên quan và cần thiết khác.

 

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. 

 

Cập nhật package

 

Cập nhật package cũng đơn giản. Các bạn chỉ cần gõ lệnh composer update, composer sẽ tự cập nhật đầy đủ package. Nếu muốn cập nhật các phiên bản mới hoặc các bản release, thì bạn cần sửa file composer.json. Lưu ý rằng không nên chạy lệnh composer update trong môi trường thực tế (production). Thay vào đó, hãy kiểm tra trên máy của bạn để tránh tình trạng không tương thích có thể xảy ra.

 

Cách quản lý dependency với Composer

 

Bạn có 2 cách để thực hiện điều này. Đầu tiên, bạn dùng chính composer để quản lý. Composer là 1 công cụ command line để thu thập và quản lý các dependency. Còn một cách nữa, là bạn dùng packagist. Nó là kho lưu trữ tổng hợp chính. Đây là nơi các package mà bạn có thể sử dụng và lưu trữ. Khi sử dụng composer, bạn sẽ thấy file JSOn của composer nhiều lần. 

 

{
    "name": "laravel/laravel",
    "description": "The Laravel Framework",
    "keywords": [
        "framework",
        "laravel"
    ],
    "license": "MIT",
    "require": {
        "monolog/monolog": "1.12.0"
    }
}

 

Các package yêu cầu trong dự án của bạn sẽ được liệt kê đầy đủ trong phần require. Trong trường hợp này, bạn có thể đã require Monolog – 1 framework để ghi log. Khi sử dụng terminal, nó sẽ tải toàn bộ package được định nghĩa trong file composer.json vào thư mục vendor của dự án và thực hiện một số điều khác nữa. Nó thường nằm trong thư mục dự án có chạy lệnh composer install. 

 

Thư mục vendor sẽ được tạo ra và có nhiệm vụ chứa tất cả các dependency (bao gồm chính composer). Monolog và psr (dependency của monolog) cũng được thêm vào 1 file khác và có tên là composer.lock

 

Composer.json và composer.lock 

 

Composer.json chỉ liệt kê dependency, không chỉ định cụ thể version package sẽ được install. Composer.lock là nơi chỉ định version cụ thể sẽ được install khi chạy composer install. 

 

Composer.json thường được dùng để chạy composer install lần đầu tiên. Sau đó, các bạn có thể dùng composer.lock để thực hiện tiếp phần việc lưu trữ phiên bản đã được cài đặt. Khi đã có composer.lock, composer sẽ dùng composer.lock để xác định phiên bản cài đặt mà không cần dùng composer.json nữa. 

 

Để đảm bảo version package của các thành viên trong nhóm là giống nhau, các bạn nên chọn dùng composer.lock

 

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

 

Có tổng cộng 6 cách thực hiện:

 

  • Dùng 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.
  • Dùng 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
  • Dùng 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
  • Dùng ~3.6: nó 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.
  • Dùng toán tử^: theo document của composer thì hơi phức tạp. Tuy nhiên, hiểu đơn giản thì nó cho phép tất cả phiên bản ở giữa hai phiên bản chính liền kề nhau (ví dụ 1. và 2.). Ví dụ ^1.2.3 sẽ cho phép tất cả phiên bản giữa 1.2.3 và 2.0.0, nó tương đương với >=1.2.3 <2.0.0. Toán tử ^ được đề nghị ứng dụng khi viết code file composer.json.
  • Dùng dev-master: khi chỉ định dev-master, bạn sẽ nhận được phiên bản mới nhất đang được phát triển mà chưa được gắn số phiên bản.

 

 

Hồ Hữu Hiền

Mình là developer nên đôi khi viết bài không hay lắm mong các bạn thông cảm. Nếu muốn biết thêm thông tin về mình thì vui lòng vào website này để biết. https://huuhienqt.dev/

Bình luận (0)