Mục lục

Không có mục lục

Cách cài đặt và sử dụng Composer trên Ubuntu 20.04

Ngày đăng: 9 tháng 11 năm 2022

Ubuntu

Giới thiệu

Composer là một công cụ dependency management (quản lý sự phụ thuộc) phổ biến cho PHP, được tạo ra chủ yếu để hỗ trợ cài đặt và cập nhật cho các tài nguyên phụ thuộc của dự án. Nó sẽ kiểm tra các gói mà một dự án cụ thể phụ thuộc vào và cài đặt chúng cho bạn, sử dụng các phiên bản phù hợp theo yêu cầu của dự án. Composer cũng thường được sử dụng để khởi động các dự án mới dựa trên các khung PHP phổ biến, chẳng hạn như Symfony và Laravel.

Trong hướng dẫn này, bạn sẽ cài đặt và bắt đầu với Composer trên hệ thống Ubuntu 20.04.

Điều kiện

Để làm theo hướng dẫn này, bạn sẽ cần quyền truy cập vào máy chủ Ubuntu 20.04 với tư cách là non-root sudo user và tường lửa được bật trên máy chủ của bạn. Để thiết lập điều này, bạn có thể làm theo Hướng dẫn cài đặt máy chủ ban đầu cho Ubuntu 20.04 của chúng tôi .

Bước 1: Cài đặt PHP và các phụ thuộc bổ sung

Ngoài các phần phụ thuộc đã có trong hệ thống Ubuntu 20.04 của bạn, chẳng hạn như gitcurl, Composer yêu cầu php-cli để thực thi các tập lệnh PHP trong dòng lệnh và unzip để giải nén các kho lưu trữ đã nén. Chúng ta sẽ cài đặt các phần phụ thuộc này ngay bây giờ.

Trước tiên, hãy cập nhật bộ nhớ cache của trình quản lý gói bằng cách chạy:

  1. sudo apt update

Tiếp theo, chạy lệnh dưới đây để cài đặt các gói cần thiết:

  1. sudo apt install php-cli unzip

Bạn sẽ được nhắc nhở xác nhận cài đặt bằng cách gõ Y và sau đó ENTER.

Sau khi các điều kiện được cài đặt, bạn có thể tiến hành thiết lập Composer.

Bước 2: Tải xuống và cài đặt Composer

Composer cung cấp một tập lệnh cài đặt được viết bằng PHP. Chúng ta sẽ tải xuống, xác minh rằng nó không bị hỏng và sau đó sử dụng nó để cài đặt Composer.

Đảm bảo rằng bạn đang ở trong thư mục chính của mình, sau đó truy xuất cài đặt bằng curl:

  1. cd ~
  2. curl -sS https://getcomposer.org/installer -o /tmp/composer-setup.php

Tiếp theo, chúng ta sẽ xác minh rằng trình cài đặt đã tải xuống khớp với hàm băm (hash) SHA-384 cho trình cài đặt mới nhất được tìm thấy trên trang Composer Public Keys / Signatures. Để tạo thuận lợi cho bước xác minh, bạn có thể sử dụng lệnh dưới đây để lấy mã băm mới nhất theo chương trình từ trang Composer và lưu trữ nó trong một biến shell:

  1. HASH=`curl -sS https://composer.github.io/installer.sig`

Nếu bạn muốn xác minh giá trị thu được, bạn có thể chạy:

  1. echo $HASH
Output
e0012edf3e80b6978849f5eff0d4b4e4c79ff1609dd1e613307e16318854d24ae64f26d17af3ef0bf7cfb710ca74755a

Bây giờ, hãy thực thi mã PHP dưới đây, như được cung cấp trong trang tải xuống Composer, để xác minh rằng tập lệnh cài đặt sẽ an toàn để chạy:

  1. php -r "if (hash_file('SHA384', '/tmp/composer-setup.php') === '$HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"

Bạn sẽ thấy kết quả sau:

Output
Installer verified

Nếu đầu ra cho thấy Installer corrupt, bạn sẽ cần tải xuống lại tập lệnh cài đặt và kiểm tra kỹ xem có đang sử dụng mã băm (hash) chính xác hay không. Sau đó, lặp lại quá trình xác minh. Khi bạn có một trình cài đặt đã được xác minh, bạn có thể tiếp tục.

Để cài đặt composer trên toàn cầu, hãy sử dụng lệnh dưới đây, nó sẽ tải xuống và cài đặt Composer dưới dạng lệnh system-wide (toàn hệ thống) có tên là composer, trong /usr/local/bin:

  1. sudo php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer

Bạn sẽ thấy đầu ra tương tự như sau:

Output
All settings correct for using Composer Downloading... Composer (version 2.2.9) successfully installed to: /usr/local/bin/composer Use it: php /usr/local/bin/composer

Để kiểm tra cài đặt của bạn, hãy chạy:

  1. composer
Output
______ / ____/___ ____ ___ ____ ____ ________ _____ / / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/ / /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ / \____/\____/_/ /_/ /_/ .___/\____/____/\___/_/ /_/ Composer version Composer version 2.2.9 2022-03-15 22:13:37 Usage: command [options] [arguments] Options: -h, --help Display this help message -q, --quiet Do not output any message -V, --version Display this application version --ansi Force ANSI output --no-ansi Disable ANSI output -n, --no-interaction Do not ask any interactive question --profile Display timing and memory usage information --no-plugins Whether to disable plugins. -d, --working-dir=WORKING-DIR If specified, use the given directory as working directory. --no-cache Prevent use of the cache -v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug ...

Điều này xác minh rằng Composer đã được cài đặt thành công trên hệ thống của bạn và khả dụng trên toàn hệ thống.

Lưu ý: Nếu bạn muốn có các tệp thực thi Composer riêng biệt cho từng dự án bạn lưu trữ trên máy chủ này, bạn có thể cài đặt nó cục bộ, trên cơ sở từng dự án. Phương pháp này cũng hữu ích khi người dùng hệ thống của bạn không có quyền cài đặt phần mềm trên toàn hệ thống (system-wide).

Để thực hiện việc này, hãy sử dụng lệnh php /tmp/composer-setup.php. Thao tác này sẽ tạo tệp composer.phar trong thư mục hiện tại của bạn, tệp này có thể được thực thi bằng php composer.phar.

Bây giờ, hãy xem cách sử dụng Composer để quản lý các phần phụ thuộc.

Bước 3: Sử dụng Composer trong một dự án PHP

Các dự án PHP thường phụ thuộc vào các thư viện bên ngoài, việc quản lý các phụ thuộc và các phiên bản của chúng có thể khó khăn. Composer giải quyết vấn đề đó bằng cách theo dõi các phiên bản và phụ thuộc của dự án, đồng thời tạo điều kiện thuận lợi cho quá trình tìm kiếm, cài đặt và cập nhật các gói được yêu cầu bởi một dự án.

Để sử dụng Composer trong dự án của mình, bạn cần có tệp composer.json. Tệp composer.json cho Composer biết phụ thuộc nào mà nó cần tải xuống cho dự án của bạn, và phiên bản nào của mỗi gói được phép cài đặt. Điều này cực kỳ quan trọng để giữ cho dự án của bạn nhất quán và tránh cài đặt các phiên bản không ổn định có thể gây ra sự cố tương thích ngược.

Bạn không cần tạo tệp này theo cách thủ công - nó sẽ thường gặp lỗi cú pháp khi bạn làm như vậy. Composer cung cấp cách tương tác để tạo tệp composer.json mới dựa trên thông tin đầu vào của người dùng, đây là một lựa chọn tốt nếu bạn định chia sẻ dự án sau này của mình dưới dạng gói công khai trên Packagist. Composer cũng tự động tạo tệp barebones composer.json khi bạn chạy lệnh composer require bao gồm phần phụ thuộc vào một dự án mới được tạo.

Quá trình sử dụng Composer để cài đặt một gói phụ thuộc trong một dự án bao gồm các bước sau:

  • Xác định loại thư viện mà ứng dụng cần.
  • Nghiên cứu một thư viện mã nguồn mở phù hợp trên Packagist.org, kho lưu trữ gói chính thức cho Composer.
  • Chọn gói bạn muốn phụ thuộc vào.
  • Chạy composer require bao gồm phần phụ thuộc trong tệp composer.json và cài đặt gói.

Hãy thử điều này với một ứng dụng demo.

Mục tiêu của ứng dụng này là chuyển đổi một câu đã cho thành một chuỗi thân thiện với URL - một slug. Điều này thường được sử dụng để chuyển đổi tiêu đề trang thành đường dẫn URL (như phần cuối cùng của URL cho hướng dẫn này).

Hãy bắt đầu bằng cách tạo một thư mục cho dự án của chúng ta. Chúng ta sẽ gọi nó là slugify:

  1. cd ~
  2. mkdir slugify
  3. cd slugify

Mặc dù không bắt buộc, nhưng bây giờ bạn có thể chạy lệnh composer init để tạo tệp composer.json chi tiết cho dự án của mình. Vì mục tiêu duy nhất của dự án là chứng minh cách cài đặt các phần phụ thuộc với Composer, chúng ta sẽ sử dụng tệp composer.json đơn giản hơn được tạo tự động khi yêu cầu gói đầu tiên của mình.

Bây giờ đã đến lúc tìm kiếm Packagist.org cho một gói có thể giúp chúng tôi tạo slugs. Nếu bạn tìm kiếm cụm từ “slug” trên Packagist, bạn sẽ nhận được một kết quả tương tự như sau: description image

Bạn sẽ thấy hai số ở bên phải của mỗi gói trong danh sách. Số ở trên cùng thể hiện số lần gói được cài đặt qua Composer và số ở dưới cùng cho biết số lần một gói được gắn dấu sao trên GitHub. Nói chung, các gói có nhiều bản cài đặt hơn và nhiều dấu sao hơn có xu hướng ổn định hơn, vì có rất nhiều người đang sử dụng chúng. Điều quan trọng là phải kiểm tra mô tả gói về mức độ liên quan để đảm bảo đó là thứ bạn cần.

Chúng ta cần một công cụ chuyển đổi string-to-slug. Từ kết quả tìm kiếm, gói cocur / slugify, xuất hiện dưới dạng kết quả đầu tiên trong trang đó, có vẻ là một lựa chọn tốt, với số lượng cài đặt và số lượng sao hợp lý.

Các gói trên Packagist có tên vendor và tên package. Mỗi gói có một định danh duy nhất (một namespace) ở cùng một định dạng mà GitHub sử dụng cho các kho của nó: vendor/package. Thư viện chúng ta muốn cài đặt sử dụng không gian tên (namespace) cocur / slugify. Bạn cần namespace của gói để yêu cầu nó trong dự án của bạn.

Bây giờ bạn biết chính xác gói nào bạn muốn cài đặt, bạn có thể chạy composer require để bao gồm nó như một phần phụ thuộc và cũng tạo tệp composer.json cho dự án của bạn. Một điều quan trọng cần lưu ý khi yêu cầu gói là Composer theo dõi cả phụ thuộc cấp ứng dụng cũng như phụ thuộc cấp hệ thống. Các phụ thuộc mức hệ thống rất quan trọng để chỉ ra gói dựa vào các mô-đun PHP nào. Trong trường hợp của gói cocur / slugify, nó yêu cầu một mô-đun PHP mà chúng ta chưa cài đặt.

Khi một gói bắt buộc dựa trên thư viện hệ thống hiện chưa được cài đặt trên máy chủ của bạn, bạn sẽ gặp lỗi cho biết yêu cầu nào bị thiếu:

  1. composer require cocur/slugify
Output
Using version ^4.0 for cocur/slugify ./composer.json has been updated Loading composer repositories with package information Updating dependencies (including require-dev) Your requirements could not be resolved to an installable set of packages. Problem 1 - Installation request for cocur/slugify ^4.0 -> satisfiable by cocur/slugify[v4.0.0]. - cocur/slugify v4.0.0 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system. ...

Để giải quyết vấn đề phụ thuộc hệ thống, chúng ta có thể tìm kiếm gói bị thiếu bằng cách sử dụng apt search:

  1. apt search mbstring
Output
Sorting... Done Full Text Search... Done php-mbstring/focal 2:7.4+75 all MBSTRING module for PHP [default] php-patchwork-utf8/focal 1.3.1-1 all UTF-8 strings handling for PHP php7.4-mbstring/focal 7.4.3-4ubuntu1 amd64 MBSTRING module for PHP

Sau khi định vị đúng tên gói, bạn có thể sử dụng apt một lần nữa để cài đặt phần phụ thuộc hệ thống:

  1. sudo apt install php-mbstring

Sau khi quá trình cài đặt hoàn tất, bạn có thể chạy lại lệnh composer require:

  1. composer require cocur/slugify
Output
Using version ^4.0 for cocur/slugify ./composer.json has been created Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 1 install, 0 updates, 0 removals - Installing cocur/slugify (v4.0.0): Downloading (100%) Writing lock file Generating autoload files

Như bạn có thể thấy từ đầu ra, Composer tự động quyết định phiên bản của gói để sử dụng. Nếu bạn kiểm tra thư mục dự án của mình ngay bây giờ, nó sẽ chứa hai tệp mới: composer.jsoncomposer.lock và một thư mục vendor:

  1. ls -l
Output
total 12 -rw-rw-r-- 1 sammy sammy 59 May 4 13:56 composer.json -rw-rw-r-- 1 sammy sammy 3229 May 4 13:56 composer.lock drwxrwxr-x 4 sammy sammy 4096 May 4 13:56 vendor

Tệp composer.lock được sử dụng để lưu trữ thông tin về phiên bản của mỗi gói được cài đặt và đảm bảo các phiên bản giống nhau được sử dụng nếu ai đó sao chép dự án của bạn và cài đặt các phần phụ thuộc của nó. Thư mục vendor là nơi chứa các phụ thuộc của dự án. Thư mục vendor không nên được cam kết vào kiểm soát phiên bản - bạn chỉ cần bao gồm các tệp composer.jsoncomposer.lock.

Khi cài đặt một dự án đã chứa tệp composer.json, hãy chạy composer install để tải xuống các phần phụ thuộc của dự án.

Hãy xem nhanh các hạn chế của phiên bản. Nếu bạn kiểm tra nội dung tệp composer.json của mình, bạn sẽ thấy một cái gì đó như sau:

  1. cat composer.json
Output
{ "require": { "cocur/slugify": "^4.0" } }

Bạn có thể nhận thấy ký tự đặc biệt ^ trước số phiên bản trong composer.json. Composer hỗ trợ một số ràng buộc và định dạng khác nhau để xác định phiên bản gói yêu cầu, nhằm cung cấp tính linh hoạt trong khi vẫn giữ cho dự án của bạn ổn định. Toán tử (operator) dấu mũ (^) được sử dụng bởi tệp composer.json được tạo tự động là toán tử được khuyến nghị để có khả năng tương tác tối đa, sau semantic versioning (phiên bản ngữ nghĩa). Trong trường hợp này, nó xác định 4.0 là phiên bản tương thích tối thiểu và cho phép cập nhật lên bất kỳ phiên bản nào trong tương lai dưới 5.0.

Nói chung, bạn sẽ không cần phải can thiệp vào các ràng buộc phiên bản trong tệp composer.json của mình. Tuy nhiên, một số trường hợp có thể yêu cầu bạn chỉnh sửa các ràng buộc theo cách thủ công – ví dụ: khi một phiên bản mới chính của thư viện yêu cầu của bạn được phát hành và bạn muốn nâng cấp hoặc khi thư viện bạn muốn sử dụng không tuân theo cách lập phiên bản ngữ nghĩa.

Dưới đây là một số ví dụ để bạn hiểu rõ hơn về cách hoạt động của các ràng buộc phiên bản Composer:

Hạn chế Nghĩa Các phiên bản mẫu được phép
^1.0 >= 1.0 < 2.0 1.0, 1.2.3, 1.9.9
^1.1.0 >= 1.1.0 < 2.0 1.1.0, 1.5.6, 1.9.9
~1.0 >= 1.0 < 2.0.0 1.0, 1.4.1, 1.9.9
~1.0.0 >= 1.0.0 < 1.1 1.0.0, 1.0.4, 1.0.9
1.2.1 1.2.1 1.2.1
1.* >= 1.0 < 2.0 1.0.0, 1.4.5, 1.9.9
1.2.* >= 1.2 < 1.3 1.2.0, 1.2.3, 1.2.9

Để có cái nhìn sâu hơn về các ràng buộc của phiên bản Composer, hãy xem tài liệu chính thức.

Tiếp theo, hãy xem cách tải các phần phụ thuộc tự động bằng Composer.

Bước 4: Bao gồm Tập lệnh Tự động tải

Vì bản thân PHP không tự động tải các lớp, nên Composer cung cấp một autoload script (tập lệnh tự động tải) mà bạn có thể đưa vào dự án của mình để tự động tải hoạt động cho dự án của bạn. Tệp này được tạo tự động bởi Composer khi bạn thêm phần phụ thuộc đầu tiên của mình.

Điều duy nhất bạn cần làm là bao gồm tệp vendor/autoload.php trong các tập lệnh PHP của bạn trước khi khởi tạo bất kỳ lớp nào.

Hãy dùng thử trong ứng dụng demo của chúng tôi. Mở một tệp mới có tên test.php trong trình soạn thảo văn bản của bạn:

  1. nano test.php

Thêm mã sau vào tệp vendor/autoload.php, tải phần phụ thuộc cocur/slugify và sử dụng nó để tạo một slug:

test.php
<?php
require __DIR__ . '/vendor/autoload.php';

use Cocur\Slugify\Slugify;

$slugify = new Slugify();

echo $slugify->slugify('Hello World, this is a long sentence and I need to make a slug from it!');

Lưu tệp và thoát khỏi trình chỉnh sửa của bạn.

Bây giờ hãy chạy tập lệnh:

  1. php test.php

Điều này tạo đầu ra hello-world-this-is-a-long-question-and-i-need-to-make-a-slug-from-it.

Sự phụ thuộc cần cập nhật khi có phiên bản mới, vì vậy hãy xem cách xử lý điều đó.

Bước 5: Cập nhật sự phụ thuộc của dự án

Bất cứ khi nào bạn muốn cập nhật các phụ thuộc dự án của mình lên các phiên bản mới hơn, hãy chạy lệnh update:

  1. composer update

Thao tác này sẽ kiểm tra các phiên bản mới hơn của các thư viện mà bạn yêu cầu trong dự án của mình. Nếu tìm thấy phiên bản mới hơn và nó tương thích với giới hạn phiên bản được xác định trong tệp composer.json, Composer sẽ thay thế phiên bản đã cài đặt trước đó. Tệp composer.lock sẽ được cập nhật để phản ánh những thay đổi này.

Bạn cũng có thể cập nhật một hoặc nhiều thư viện cụ thể bằng cách chỉ định chúng như sau:

  1. composer update vendor/package vendor2/package2

Đảm bảo kiểm tra các tệp composer.jsoncomposer.lock trong hệ thống kiểm soát phiên bản của bạn sau khi bạn cập nhật các phần phụ thuộc của mình để những người khác cũng có thể cài đặt các phiên bản mới hơn này.

Kết luận

Composer là một công cụ mạnh mẽ có thể tạo điều kiện thuận lợi cho công việc quản lý các phần phụ thuộc trong các dự án PHP. Nó cung cấp một cách đáng tin cậy để khám phá, cài đặt và cập nhật các gói PHP mà một dự án phụ thuộc vào. Trong hướng dẫn này, chúng ta đã xem cách cài đặt Composer, cách đưa các phần phụ thuộc mới vào một dự án và cách cập nhật các phần phụ thuộc này khi có phiên bản mới.

0 câu trả lời