Composer là gì? Tại sao phải sử dụng Composer trong Project
Composer là gì?
Composer là một công cụ dùng để quản lý các Package
trong project. Nó cho phép khai báo, install
, update
hay remove
một hoặc nhiều package trong project của bạn.
Cơ chế hoạt động của Composer cũng không phải là mới, chúng ta đã bắt gặp concept
này ở NPM của NodeJs hay Bundle của Ruby language.
Dependency management
Composer không quản lý các Packgage giống như yum
trong Centos hay apt
trong Ubuntu. Nó quản lý các Packages theo từng Project cụ thể và không hỗ trợ phạm vi cài đặt global
. Tất cả các Package đều được cài đặt vào thư mục vendor
của project , chúng ta có thể xóa bất kỳ Package nào của project thông qua Composer
Các lệnh cơ bản trong Composer
Để sử dụng Composer
các bạn phải cài nó trên máy của mình. Có thể cài độc lập bằng cách tải file trên trang chủ của Composer về và cài như thông thường . Bên canh đó cũng có một các khác là bạn có thể sử dụng Laragon
vì trong Laragon đã tích hợp sẵn Composer
rồi
Để kiểm tra composer đã được cài trên máy của bạn hay chưa, các bạn chạy lệnh sau
composer
Sau khi cài đặt thành công các bạn có thể bắt đầu tìm hiểu những câu lệnh cơ bản trong Laragon dưới đây
Composer Init
Đây là lệnh khởi tạo composer cho project của bạn, khi chạy lệnh này nó sẽ hỏi bạn nhập một số options như sau
--name
: Tên của package.
--description
: Mô tả về package.
--author
: Tên tác giả
--type
: Kiểu của Package.
--homepage
: Link home page của Package
--require
: Package và version bắt buộc
--require-dev
: Package dành cho môi trường dev
--repository
: Link package trực tiếp từ Github repository
Composer install
Lệnh này sẽ đọc tất cả các package config trong file composer,json và cài chúng vào thư mục vender
composer install
Chúng ta thường sử dụng lệnh này cho lần đầu init project hoặc khi có package mới được insert vào file composer.json
Composer update
Để update lên version mới nhất của các package đã `install` trong vendor chúng ta sẽ sử dụng lệnh
composer update
Tất cả những package trong project được update lên version mới sẽ được ghi lại vào trong file composer.lock. Sau này cài lại project nó sẽ lấy bản mới nhất này
Trường hợp không muốn update tất cả các package của project chúng ta có thể chỉ định package name cần update
php composer.phar update vendor/package1 vendor/package2
Bạn cũng có thể sử dụng cú pháp dưới đây để update lần lượt từng package trong thư mục vendor
php composer.phar update "vendor/*"
Để rollback lại về version thấp hơn cho một package chúng ta sử dụng command này
php composer.phar update --with vendor/package:2.0.1
The custom constraint has to be a subset of the existing constraint you have, and this feature is only available for your root package dependencies.
If you only want to update the package(s) for which you provide custom constraints using --with, you can skip --with and just use constraints with the partial update syntax:
php composer.phar update vendor/package:2.0.1 vendor/package2:3.0.*
--prefer-source: Install packages from source when available.
--prefer-dist: Install packages from dist when available.
--dry-run: Simulate the command without actually doing anything.
--dev: Install packages listed in require-dev (this is the default behavior).
--no-dev: Skip installing packages listed in require-dev. The autoloader generation skips the autoload-dev rules.
--no-install: Does not run the install step after updating the composer.lock file.
--lock: Only updates the lock file hash to suppress warning about the lock file being out of date.
--with: Temporary version constraint to add, e.g. foo/bar:1.0.0 or foo/bar=1.0.0
--no-autoloader: Skips autoloader generation.
--no-scripts: Skips execution of scripts defined in composer.json.
--no-progress: Removes the progress display that can mess with some terminals or scripts which don't handle backspace characters.
--with-dependencies (-w): Update also dependencies of packages in the argument list, except those which are root requirements.
--with-all-dependencies (-W): Update also dependencies of packages in the argument list, including those which are root requirements.
--optimize-autoloader (-o): Convert PSR-0/4 autoloading to classmap to get a faster autoloader. This is recommended especially for production, but can take a bit of time to run, so it is currently not done by default.
--classmap-authoritative (-a): Autoload classes from the classmap only. Implicitly enables --optimize-autoloader.
--apcu-autoloader: Use APCu to cache found/not-found classes.
--apcu-autoloader-prefix: Use a custom prefix for the APCu autoloader cache. Implicitly enables --apcu-autoloader.
--ignore-platform-reqs: ignore all platform requirements (php, hhvm, lib-* and ext-*) and force the installation even if the local machine does not fulfill these. See also the platform config option.
--ignore-platform-req: ignore a specific platform requirement(php, hhvm, lib-* and ext-*) and force the installation even if the local machine does not fulfill it.
--prefer-stable: Prefer stable versions of dependencies.
--prefer-lowest: Prefer lowest versions of dependencies. Useful for testing minimal versions of requirements, generally used with --prefer-stable.
--interactive: Interactive interface with autocompletion to select the packages to update.
--root-reqs: Restricts the update to your first degree dependencies.
Composer require
Khi bạn muốn install một package mới cho project của mình, bạn sẽ sử dụng command sau
php composer.phar require packageName
Đây là các options khi install package
--dev: Add packages to require-dev.
--dry-run: Simulate the command without actually doing anything.
--prefer-source: Install packages from source when available.
--prefer-dist: Install packages from dist when available.
--no-progress: Removes the progress display that can mess with some terminals or scripts which don't handle backspace characters.
--no-update: Disables the automatic update of the dependencies (implies --no-install).
--no-install: Does not run the install step after updating the composer.lock file.
--no-scripts: Skips execution of scripts defined in composer.json
--update-no-dev: Run the dependency update with the --no-dev option.
--update-with-dependencies (-w): Also update dependencies of the newly required packages, except those that are root requirements.
--update-with-all-dependencies (-W): Also update dependencies of the newly required packages, including those that are root requirements.
--ignore-platform-reqs: ignore all platform requirements (php, hhvm, lib-* and ext-*) and force the installation even if the local machine does not fulfill these. See also the platform config option.
--ignore-platform-req: ignore a specific platform requirement(php, hhvm, lib-* and ext-*) and force the installation even if the local machine does not fulfill it.
--prefer-stable: Prefer stable versions of dependencies.
--prefer-lowest: Prefer lowest versions of dependencies. Useful for testing minimal versions of requirements, generally used with --prefer-stable.
--sort-packages: Keep packages sorted in composer.json.
--optimize-autoloader (-o): Convert PSR-0/4 autoloading to classmap to get a faster autoloader. This is recommended especially for production, but can take a bit of time to run, so it is currently not done by default.
--classmap-authoritative (-a): Autoload classes from the classmap only. Implicitly enables --optimize-autoloader.
--apcu-autoloader: Use APCu to cache found/not-found classes.
--apcu-autoloader-prefix: Use a custom prefix for the APCu autoloader cache. Implicitly enables --apcu-autoloader.
Composer remove
Để xóa package khỏi project ta sử dụng command sau:
php composer.phar remove vendor/package vendor/package2
Sau khi xóa nó cũng xóa package name ở trong composer.lock file
Options:
--dev: Remove packages from require-dev.
--dry-run: Simulate the command without actually doing anything.
--no-progress: Removes the progress display that can mess with some terminals or scripts which don't handle backspace characters.
--no-update: Disables the automatic update of the dependencies (implies --no-install).
--no-install: Does not run the install step after updating the composer.lock file.
--no-scripts: Skips execution of scripts defined in composer.json.
--update-no-dev: Run the dependency update with the --no-dev option.
--update-with-dependencies (-w): Also update dependencies of the removed packages. (Deprecrated, is now default behavior)
--update-with-all-dependencies (-W): Allows all inherited dependencies to be updated, including those that are root requirements.
--ignore-platform-reqs: ignore all platform requirements (php, hhvm, lib-* and ext-*) and force the installation even if the local machine does not fulfill these. See also the platform config option.
--ignore-platform-req: ignore a specific platform requirement(php, hhvm, lib-* and ext-*) and force the installation even if the local machine does not fulfill it.
--optimize-autoloader (-o): Convert PSR-0/4 autoloading to classmap to get a faster autoloader. This is recommended especially for production, but can take a bit of time to run so it is currently not done by default.
--classmap-authoritative (-a): Autoload classes from the classmap only. Implicitly enables --optimize-autoloader.
--apcu-autoloader: Use APCu to cache found/not-found classes.
--apcu-autoloader-prefix: Use a custom prefix for the APCu autoloader cache. Implicitly enables --apcu-autoloader
Composer dump-autoload
Nếu bạn cần update autoloader cho một class mới trong classmap package bạn có thể xử dụng
composer dump-autoload