Composer 2.0: Phiên bản release mới nhất và cách nâng cấp composer

Nếu bạn là lập trình viên thì đây là tin tốt cho bạn, đặt biệt là bạn đang làm các dự án thiết kế website, vì Composer 2.0 ra đời đã hỗ trợ nhiều thứ hơn trước, và hiệu suất cũng tăng, tốc độ cài và cả sự an toàn khi sử dụng nữa, hay cũng LPTech tìm hiểu thêm nhé.

Composer 2.0 có gì mới?

Đây là một thay đổi lớn và trong khi Composer cố gắng giữ mọi thứ tương thích với hầu hết người dùng, bạn có thể xem hướng dẫn NÂNG CẤP bên dưới. Có rất nhiều sự thay đổi ở phiên bản Composer 2.0 này được LP Tech liệt kê cụ thể bên dưới. 

  1. Nhiều cải tiến hiệu suất CPU và bộ nhớ
  2. Lệnh cập nhật giờ đây xác định hơn nhiều vì nó không tính đến các package đã được cài đặt
  3. Khi tiến hành cài đặt các package, Composer 2.0 sẽ tiến hành thực hiện kiểm tra mạng trước khi thực hiện thay đổi bất kì file nào trong thư mục vendor để hạn chế thấp nhất tình huống đang update giữa chừng mà gặp trục trặc gì thì file vendor đang cài sẽ bị lỗi không sử dụng được, rất khó chịu.
  4. Việc cập nhật , require/remove hiện nhanh hơn nhiều vì chúng chỉ tải siêu dữ liệu cần thiết cho các package đã cập nhật chứ không chạy lại toàn bộ như ở Composer 1.
  5. Đã thêm bước kiểm tra nền tảng khi vendor/autoload.php được khởi tạo, bước này sẽ kiểm tra version/extensions PHP hiện tại có tương thích với những gì mong đợi và không thành công. Có thể bị vô hiệu hóa với tùy chọn cấu hình kiểm tra nền tảng
  6. Đã thêm một lớp Composer\InstalledVersions được tự động tải trong mọi dự án và cho phép bạn kiểm tra packages/versions nào hiện có trong thời gian chạy
  7. Đã thêm package ảo composer-runtime-api mà bạn có thể yêu cầu (ví dụ: ^ 2.0) để đảm bảo những thứ như lớp InstalledVersions ở trên có sẵn. Nó sẽ buộc người sử dụng Composer 2.x để cài đặt dự án của bạn một cách hiệu quả.
  8. Đã thêm hỗ trợ tải xuống song song metadata và tệp zip, điều này yêu cầu phải có phần mở rộng curl và do đó chúng tôi thực sự khuyên bạn nên bật curl
  9. Đã thêm cài đặt song song các package (yêu cầu OSX / Linux / WSL và giải nén đó có trong PATH)
  10. Đã thêm báo cáo lỗi giải quyết phụ thuộc rõ ràng hơn nhiều cho các trường hợp lỗi phổ biến.
  11. Đã thêm hỗ trợ cập nhật lên một phiên bản cụ thể với các bản cập nhật một phần, cũng như một - với cờ để vượt qua trong ghi đè hạn chế tạm thời.
  12. Đã thêm tính năng tự động xóa các package không cần thiết nữa bất cứ khi nào cập nhật được thực hiện, thao tác này sẽ xóa các package trước đó còn sót lại bởi các bản cập nhật một phần và yêu cầu / xóa
  13. Đã thêm hỗ trợ cho chế độ TTY trên Linux/OSX/WSL để các trình xử lý tập lệnh hiện chạy ở chế độ tương tác
  14. Chỉ thêm, các tùy chọn loại trừ và chuẩn cho tất cả các kho lưu trữ, hãy xem mức độ ưu tiên của kho lưu trữ để biết chi tiết
  15. Đã thêm hỗ trợ cho nhiều package lib-* mới trong kho lưu trữ nền tảng và phát hiện phiên bản được cải thiện cho một số package ext- * và lib-*
  16. Đã thêm sự kiện thực thi trước hoạt động sẽ được kích hoạt trước khi các package được update/require/remove
  17. Đã thêm sự kiện tạo trước nhóm sẽ được kích hoạt trước khi nhóm package cho trình giải quyết phụ thuộc được tạo, cho phép bạn sửa đổi danh sách các package đi vào
  18. Đã thêm sự kiện tải xuống sau tệp sẽ được kích hoạt sau khi tải xuống tệp dist package, điều này cho phép bạn kiểm tra thêm các tệp
  19. Đã thêm cờ --locked để hiển thị lệnh xem các package từ tệp composer.lock
  20. Đã thêm cờ --unused để loại bỏ lệnh để đảm bảo rằng bất kỳ package nào không cần thiết nữa sẽ được gỡ bỏ
  21. Đã thêm cờ --dry-run để yêu cầu và xóa lệnh
  22. Đã thêm cờ --no-install để cập nhật, yêu cầu và loại bỏ các lệnh để tắt bước cài đặt và chỉ thực hiện bước cập nhật (cập nhật tệp composer.lock)
  23. Đã thêm cờ --ask vào lệnh create-project để tạo lời nhắc Composer cho tên install dir, hữu ích cho các hướng dẫn cài đặt dự án
  24. Đã thêm hỗ trợ cho nhiều cờ --repository được chuyển vào lệnh create-project, chỉ hữu ích khi kết hợp với --add-repository để duy trì chúng với composer.json
  25. Đã thêm bí danh cờ --with-dependencies--with-all-dependencies để yêu cầu và loại bỏ các lệnh để có tính nhất quán với bản cập nhật
  26. Đã thêm bí danh viết tắt -w cho --with-dependencies-W cho --with-all-dependencies vào các lệnh cập nhật / yêu cầu / loại bỏ
  27. Đã thêm thông tin khác vào nhà cung cấp / nhà Composer / install.json, một khóa nhà phát triển lưu trữ xem các yêu cầu của nhà phát triển đã được cài đặt hay chưa và mọi package hiện đều có khóa đường dẫn cài đặt với vị trí cài đặt của nó
  28. Đã thêm COMPOSER_DISABLE_NETWORK mà nếu được đặt làm cho Composer cố gắng hết sức để chạy ngoại tuyến. Điều này có thể hữu ích khi bạn có kết nối kém hoặc thực hiện đo điểm chuẩn mà không bị chập chờn mạng
  29. Đã thêm COMPOSER_DEBUG_EVENTS = 1 env var hỗ trợ cho các tác giả plugin để tìm ra sự kiện nào được kích hoạt khi
  30. Đã thêm setCustomCacheKey vào PreFileDownloadEvent và sửa lỗi bộ nhớ cache cho các tích hợp thay đổi url đã xử lý của kho lưu trữ package
  31. Đã thêm Trình soạn thảo Composer\Util\SyncHelper cho các tác giả plugin để đối phó với async Promises dễ dàng hơn
  32. Đã thêm sử dụng lệnh $composer->getLoop()->getHttpDownloader() để có quyền truy cập vào phiên bản HttpDownloader chính trong plugin
  33. Đã thêm cờ --json--merge vào lệnh cấu hình để cho phép chỉnh sửa các giá trị extra.*  bằng cách sử dụng json làm đầu vào
  34. Đã thêm lời nhắc xác nhận khi chạy Composer với tư cách superuser ở chế độ tương tác.
  35. Đã thêm --no-check-version để xác thực lệnh xóa cảnh báo trong trường hợp phiên bản được xác định
  36. Đã thêm --ignore-platform-req (không có s) vào tất cả các lệnh hỗ trợ --ignore-platform-reqs, chấp nhận tên package để bạn chỉ có thể bỏ qua các yêu cầu nền tảng cụ thể
  37. Đã thêm hỗ trợ --no-dev để hiển thị và các lệnh lỗi thời để bỏ qua các yêu cầu của dev
  38. Đã thêm -format=summary vào lệnh cấp phép
  39. Đã thêm tùy chọn cấu hình chỉ đọc trong bộ nhớ cache để làm cho bộ nhớ cache có thể sử dụng được ở chế độ chỉ đọc cho các vùng chứa và tương tự
  40. Đã thêm hỗ trợ cho ký tự đại diện (*) trong đường dẫn trình tải tự động bản đồ lớp
  41. Đã thêm hỗ trợ để định cấu hình mã thông báo triển khai GitLab ngoài mã thông báo riêng tư, xem gitlab-token
  42. Đã thêm hỗ trợ đoán phiên bản package cho lệnh requireinit để tính đến tất cả các package nền tảng, không chỉ phiên bản php
  43. Đã thêm hỗ trợ cho tar trong kho tạo tác
  44. Đã thêm non-zero exit code (2)warning xóa lệnh khi không thể gỡ bỏ package cần gỡ
  45. Đã thêm cờ --apcu-autoloader-prefix (hoặc --apcu-prefix cho lệnh dump-autoload) để cho phép mọi người sử dụng tự động tải apcu theo cách đầu ra xác định nếu điều đó là cần thiết
  46. Cố định thứ tự package khi tự động tải và đặc biệt là khi tải plugin, để đảm bảo các phần phụ thuộc được tải trước phần phụ thuộc của chúng
  47. Đã sửa lỗi đầu ra đề suất rất spam, hiện chỉ dài một dòng và hiếm khi hiển thị hơn
  48. Đã sửa các quy tắc xung đột như v.d. >=5 từ phù hợp với dev-master, vì nó không được chuẩn hóa thành 9999999-dev trong nội bộ nữa
  49. Đã sửa lỗi bộ giải dẫn đến vòng lặp vô tận trong một số trường hợp.
  50. Nhiều bản sửa lỗi và cải tiến nhỏ.

Nhiều cập nhật quá, viết hoài không hết, nhưng với các cập nhật trên cơ bản là đã quá có lợi cho người làm lập trình, thiết kế web rồi.

Cải tiến hiệu suất

Composer 2.p đã đại tu khá nhiều thứ từ giao thức được sử dụng giữa Composerpackagist.org, bao gồm cả việc tải xuống tệp song song bằng cách sử dụng tối ưu hóa đánh giá giới hạn và curl. Điều này dẫn đến những cải tiến lớn về cả tốc độ và việc sử dụng bộ nhớ.

Sự khác biệt phụ thuộc vào trường hợp sử dụng của bạn, vì vậy mặc dù tôi đã thấy các báo cáo về sự cải thiện hơn 50% cho cả hai trong một số dự án, nhưng tôi không thể đưa ra con số chính xác về nó. Nhưng tôi chắc chắn rằng bạn sẽ ngạc nhiên tích cực nếu bạn chưa thử Composer 2.0

Thay đổi kiến trúc

Cách thức cập nhật phụ thuộc được thực hiện nội bộ đã được cấu trúc lại, đối với bạn sẽ dẫn đến các cập nhật chính xác hơn. Trạng thái cục bộ hiện tại của thư mục nhà cung cấp sẽ không can thiệp vào các bản cập nhật nữa.

Sau khi cập nhật xong, quá trình cài đặt sẽ tự động chạy và bây giờ nó sẽ thực hiện tất cả các hoạt động liên kết mạng trước tiên - và song song nếu có thể. Điều này sẽ tránh để lại cho bạn một thư mục nhà cung cấp được cập nhật một nửa nếu lỗi mạng xảy ra giữa chừng khi cài đặt. Xem ở mục 3 bên trên có đề cập đến nhé.

Cài Composer mới

Các bạn vẫn có thể sử dụng Composer 2.0 trực tiếp khi cài mới bằng lệnh sau:

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === 'c31c1e292ad7be5f49291169c0ac8f683499edddcfd4e42232982d0fd193004208a58ff6f353fde0012d35fdd72bc394') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

Hướng dẫn nâng cấp từ Composer 1.x lên Composer 2.0

Mục tiêu của Composer là mọi người dùng Composer đều có thể nâng cấp suôn sẻ và nhanh chóng. Lợi nhuận thu được là rất lớn và Composer muốn mọi người đều được hưởng lợi từ chúng. Để đạt được điều đó, Composer đã làm một số điều:

  1. Composer 2.0 vẫn hỗ trợ PHP 5.3 trở lên, giống như Composer 1.x
  2. Các tệp composer.lock có thể tương tác giữa các phiên bản, vì vậy bạn có thể nâng cấp lên 2.0 và quay lại dễ dàng nếu cần.
  3. Hầu hết các lệnh và đối số vẫn giống nhau, và phần lớn những gì bạn biết về Composer vẫn đúng trong 2.0.

Nếu bạn chạy lệnh composer self-update của Composer từ 1.x, nó sẽ cảnh báo bạn rằng đã có phiên bản Composer chính ổn định mới và bạn có thể sử dụng composer self-update --2 là xong.

Để nâng cấp lên bạn chỉ cần chạy lệnh:

composer self-update --preview
composer self-update

Hạ cấp từ Composer 2.0 về lại Composer 1.x

Bạn có thể sử dụng lệnh mà Composer đã cung cấp cho việc Downgrade này như sau:

composer self-update --rollback

Chúc các bạn có thể trải nghiệm nhiều hơn với Composer 2.0 nhé, nếu có gì hay hãy cùng chia sẻ với LPTech bằng cách bình luận bên dưới nhé.

Thông tin liên hệ

Nếu bạn có thắc mắc gì, có thể gửi yêu cầu cho chúng tôi, và chúng tôi sẽ liên lạc lại với bạn sớm nhất có thể .

Công ty TNHH TMĐT Công nghệ LP

Giấy phép kinh doanh số 0315561312/GP bởi Sở Kế Hoạch và Đầu Tư TP. Hồ Chí Minh.

Văn phòng: Lầu 4, Toà nhà Lê Trí, 164 Phan Văn Trị, Phường 12,Quận Bình Thạnh, HCMC

Hotline: 0338 586 864

Mail: sales@lptech.asia

Zalo:LP Tech Zalo Official

Liên hệ qua Zalo: 0338586864 ( hoặc bấm vào link này: http://lptech.asia/zalo-lptech). Hoặc nhập thông tin mà bạn cần hỗ trợ vào ô liên hệ bên dưới để lên lạc với LPTech nhé.

Bài viết cùng chuyên mục

Hibernate ORM là gì? Khi nào nên dùng hibernate...

Hibernate ORM là một khung làm việc mã nguồn mở hoạt động như một tầng trung gian giữa ứng dụng và cơ sở dữ liệutrong Java dùng để ánh...

cURL là gì? Các câu lệnh cơ bản để sử dụng cURL

cURL là công cụ mạnh mẽ giúp bạn gửi và nhận dữ liệu qua nhiều giao thức khác nhau. Tìm hiểu chi tiết về cURL và các tính năng, giao thức...

CQRS Pattern là gì? Design pattern chuyên tách...

Tìm hiểu thông tin chi tiết về CQRS Pattern. CQRS (Command Query Responsibility Segregation) là một pattern giúp tách biệt command và...

Bool là gì? Tìm hiểu về kiểu dữ liệu bool trong...

Boolean là một kiểu dữ liệu cơ bản trong lập trình với C/C++, Jav,... Bool dùng để biểu diễn các giá trị logic đúng (true) hoặc sai...

Unit Test là gì? Tìm hiểu về khái niệm kiểm thử...

Unit Test sẽ giúp người dùng có thể xây dựng dự án một cách hiệu quả, để biết được những thông tin hữu ích về Unit Test. Hãy theo dõi...

Middleware là gì? Tầm quan trọng của middleware...

Middleware là một đoạn mã trung gian nằm trong các ứng dụng web được thiết kế trên mô hình client-server. Tìm hiểu middleware là gì và...

Bài viết mới nhất


Hibernate ORM là gì? Khi nào nên dùng hibernate...

Hibernate ORM là một khung làm việc mã nguồn mở hoạt động như một tầng trung gian giữa ứng dụng và cơ sở dữ liệutrong Java dùng để ánh xạ các đối...

cURL là gì? Các câu lệnh cơ bản để sử dụng cURL

cURL là công cụ mạnh mẽ giúp bạn gửi và nhận dữ liệu qua nhiều giao thức khác nhau. Tìm hiểu chi tiết về cURL và các tính năng, giao thức mà nó hỗ...

CQRS Pattern là gì? Design pattern chuyên tách...

Tìm hiểu thông tin chi tiết về CQRS Pattern. CQRS (Command Query Responsibility Segregation) là một pattern giúp tách biệt command và query cực...

Chúc mừng sinh nhật Sếp Phú

Một hành trình mới bắt đầu cùng nhiều thử thách mới. Với sự tự tin, kiên cường và bản lĩnh, LPTech tin chắc rằng Sếp Phú của LPTech sẽ có nhiều...

Bool là gì? Tìm hiểu về kiểu dữ liệu bool trong...

Boolean là một kiểu dữ liệu cơ bản trong lập trình với C/C++, Jav,... Bool dùng để biểu diễn các giá trị logic đúng (true) hoặc sai (false). Xem...

Unit Test là gì? Tìm hiểu về khái niệm kiểm thử...

Unit Test sẽ giúp người dùng có thể xây dựng dự án một cách hiệu quả, để biết được những thông tin hữu ích về Unit Test. Hãy theo dõi thông tin...

CSRF là gì? Tìm hiểu cách chống tấn công giả...

CSRF (Cross-Site Request Forgery) là một dạng tấn công trong các ứng dụng web. Tìm hiểu chi tiết về CSRF và cách bảo vệ ứng dụng khỏi nguy cơ này.

Middleware là gì? Tầm quan trọng của middleware...

Middleware là một đoạn mã trung gian nằm trong các ứng dụng web được thiết kế trên mô hình client-server. Tìm hiểu middleware là gì và ứng dụng của...

JWT là gì? Tìm hiểu về khái niệm JSON Web Token

JWT (JSON Web Token) là một phương thức xác thực bằng mã hóa phổ biến trong các ứng dụng web, giúp truyền tải thông tin, xác thực và ủy quyền một...

Shell là gì? Các loại môi trường dòng lệnh phổ...

Shell còn được gọi là môi trường dòng lệnh. Đây là nơi cho phép người dùng tương tác với hệ điều hành thông qua các dòng lệnh. Tìm hiểu về shell và...