Chương này sẽ giải thích khái niệm về các gói và kho lưu trữ, những loại kho lưu trữ nào có sẵn và cách chúng hoạt động Show Các khái niệmTrước khi xem xét các loại kho lưu trữ khác nhau đang tồn tại, chúng ta cần hiểu một số khái niệm cơ bản mà Composer được xây dựng trên đó Bưu kiệnNhà soạn nhạc là người quản lý phụ thuộc. Nó cài đặt các gói cục bộ. Một gói thực chất là một thư mục chứa một cái gì đó. Trong trường hợp này, đó là mã PHP, nhưng về lý thuyết, nó có thể là bất cứ thứ gì. Và nó chứa một mô tả gói có tên và phiên bản. Tên và phiên bản được sử dụng để xác định gói Trên thực tế, trong nội bộ Composer coi mọi phiên bản là một gói riêng biệt. Mặc dù sự khác biệt này không quan trọng khi bạn đang sử dụng Composer, nhưng nó khá quan trọng khi bạn muốn thay đổi nó. Ngoài tên và phiên bản, còn có siêu dữ liệu hữu ích. Thông tin phù hợp nhất để cài đặt là định nghĩa nguồn, mô tả nơi nhận nội dung gói. Dữ liệu gói trỏ đến nội dung của gói. Và có hai lựa chọn ở đây. dist và nguồn quận. dist là phiên bản đóng gói của dữ liệu gói. Thường là phiên bản đã phát hành, thường là bản phát hành ổn định Nguồn. Nguồn được sử dụng để phát triển. Điều này thường bắt nguồn từ kho lưu trữ mã nguồn, chẳng hạn như git. Bạn có thể tìm nạp cái này khi bạn muốn sửa đổi gói đã tải xuống Các gói có thể cung cấp một trong hai hoặc thậm chí cả hai. Tùy thuộc vào một số yếu tố, chẳng hạn như các tùy chọn do người dùng cung cấp và tính ổn định của gói, một yếu tố sẽ được ưu tiên hơn KhoMột kho lưu trữ là một nguồn gói. Đó là danh sách các gói/phiên bản. Nhà soạn nhạc sẽ xem xét tất cả các kho lưu trữ của bạn để tìm các gói mà dự án của bạn yêu cầu Theo mặc định, chỉ Packagist. kho lưu trữ org được đăng ký trong Composer. Bạn có thể thêm nhiều kho hơn vào dự án của mình bằng cách khai báo chúng trong 8Các kho lưu trữ chỉ khả dụng cho gói gốc và các kho lưu trữ được xác định trong phần phụ thuộc của bạn sẽ không được tải. Đọc mục Câu hỏi thường gặp nếu bạn muốn tìm hiểu tại sao Khi giải quyết các phụ thuộc, các gói được tra cứu từ các kho lưu trữ từ trên xuống dưới và theo mặc định, ngay khi một gói được tìm thấy trong một, Trình soạn thảo sẽ ngừng tìm kiếm trong các kho lưu trữ khác. Đọc bài viết về mức độ ưu tiên của kho lưu trữ để biết thêm chi tiết và để biết cách thay đổi hành vi này các loạinhà soạn nhạcLoại kho lưu trữ chính là kho lưu trữ 9. Nó sử dụng một tệp 0 duy nhất chứa tất cả siêu dữ liệu của góiĐây cũng là loại kho lưu trữ mà packagist sử dụng. Để tham chiếu kho lưu trữ 9, hãy cung cấp đường dẫn trước tệp 0. Trong trường hợp của packagist, tệp đó nằm ở 3, vì vậy URL của kho lưu trữ sẽ là 4. Đối với 5, URL kho lưu trữ sẽ là 6
góiTrường bắt buộc duy nhất là 7. Cấu trúc JSON như sau 1Điểm đánh dấu 8 sẽ là nội dung của 8 từ phiên bản gói đó bao gồm tối thiểu
Đây là một định nghĩa gói tối thiểu
Nó có thể bao gồm bất kỳ trường nào khác được chỉ định trong lược đồ thông báo hàng loạtTrường 50 cho phép bạn chỉ định một URL sẽ được gọi mỗi khi người dùng cài đặt một gói. URL có thể là đường dẫn tuyệt đối (sẽ sử dụng cùng miền với kho lưu trữ) hoặc URL đủ điều kiệnMột giá trị ví dụ
Đối với 5 chứa gói 52, điều này sẽ gửi yêu cầu 53 đến 54 với phần thân yêu cầu JSON sau đây 5Trường phiên bản sẽ chứa biểu diễn chuẩn hóa của số phiên bản Mục này không bắt buộc url siêu dữ liệu, các gói có sẵn và các mẫu gói có sẵnTrường 55 cho phép bạn cung cấp mẫu URL để phục vụ tất cả các gói trong kho lưu trữ. Nó phải chứa phần giữ chỗ 56Trường này là trường mới trong Composer v2 và được ưu tiên hơn trường 57 và 58 nếu cả hai đều có mặt. Để tương thích với cả Composer v1 và v2, lý tưởng nhất là bạn muốn cung cấp cả hai. Tuy nhiên, việc triển khai kho lưu trữ mới có thể chỉ cần hỗ trợ v2Một ví dụ 6Bất cứ khi nào Trình soạn thảo tìm kiếm một gói, nó sẽ thay thế 56 bằng tên gói và tìm nạp URL đó. Nếu tính ổn định của nhà phát triển được cho phép đối với gói, nó cũng sẽ tải lại URL bằng 60 (e. g. 61 để tìm phiên bản dành cho nhà phát triển của 62)Các tệp 63 và 64 chứa các phiên bản gói PHẢI chỉ chứa các phiên bản cho gói foo/bar, như 65Bộ nhớ đệm được thực hiện thông qua việc sử dụng tiêu đề If-Modified-Since, vì vậy hãy đảm bảo bạn trả lại các tiêu đề Lần sửa đổi gần đây nhất và chúng chính xác Mảng các phiên bản cũng có thể được thu nhỏ tùy chọn bằng cách sử dụng 66 từ trình soạn thảo/công cụ khai thác siêu dữ liệu. Nếu bạn làm điều đó, bạn nên thêm khóa 67 ở cấp cao nhất để cho Nhà soạn nhạc biết rằng nó phải mở rộng danh sách phiên bản trở lại dữ liệu gốc. Xem https. //repo. người đóng gói. org/p2/độc thoại/độc thoại. json làm ví dụBất kỳ gói được yêu cầu nào không tồn tại PHẢI trả về mã trạng thái 404, mã này sẽ cho Nhà soạn nhạc biết rằng gói này không tồn tại trong kho lưu trữ của bạn. Đảm bảo phản hồi 404 nhanh để tránh chặn Composer. Tránh chuyển hướng đến các trang 404 thay thế Nếu kho lưu trữ của bạn chỉ có một số lượng nhỏ các gói và bạn muốn tránh các yêu cầu 404, bạn cũng có thể chỉ định khóa 68 trong 0. Khóa này sẽ là một mảng chứa tất cả các tên gói mà kho lưu trữ của bạn chứa. Ngoài ra, bạn có thể chỉ định khóa 80 là một mảng các mẫu tên gói (với 81 khớp với bất kỳ chuỗi nào, e. g. 82 sẽ khiến Composer tra cứu mọi tên gói phù hợp trong kho lưu trữ này)Mục này không bắt buộc nhà cung cấp-apiTrường 83 cho phép bạn cung cấp mẫu URL để phân phối tất cả các gói cung cấp tên gói nhất định, nhưng không cung cấp gói có tên đó. Nó phải chứa phần giữ chỗ 56Ví dụ https. // người đóng gói. org/nhà cung cấp/độc thoại/độc thoại. json liệt kê một số gói có quy tắc "cung cấp" cho độc thoại/độc thoại, nhưng bản thân nó không liệt kê độc thoại/độc thoại 8Mục này không bắt buộc danh sáchTrường 85 cho phép bạn trả lại tên của các gói khớp với một trường nhất định (hoặc tất cả các tên nếu không có bộ lọc). Nó phải chấp nhận tham số truy vấn 86 tùy chọn, có thể chứa 81 dưới dạng ký tự đại diện khớp với bất kỳ chuỗi con nàoThay thế/cung cấp các quy tắc không nên được xem xét ở đây Nó phải trả về một mảng tên gói 7Xem https. // người đóng gói. tổ chức/gói/danh sách. json?filter=composer/* chẳng hạn Mục này không bắt buộc nhà cung cấp bao gồm và nhà cung cấp-urlTrường 57 cho phép bạn liệt kê một tập hợp các tệp liệt kê các tên gói được cung cấp bởi kho lưu trữ này. Hàm băm phải là sha256 của các tệp trong trường hợp này 58 mô tả cách tìm thấy các tệp của nhà cung cấp trên máy chủ. Đó là một đường dẫn tuyệt đối từ thư mục gốc của kho lưu trữ. Nó phải chứa các phần giữ chỗ 56 và 71Các trường này được Composer v1 sử dụng hoặc nếu kho lưu trữ của bạn không có trường 55 được đặtMột ví dụ 3Ví dụ: các tệp đó chứa danh sách tên gói và giá trị băm để xác minh tính toàn vẹn của tệp 4Tệp ở trên tuyên bố rằng có thể tìm thấy acme/foo và acme/bar trong kho lưu trữ này, bằng cách tải tệp được tham chiếu bởi 58, thay thế 56 bằng tên gói được đặt tên của nhà cung cấp và 71 bằng trường sha256. Bản thân các tệp đó chứa các định nghĩa gói như được mô tảCác trường này là tùy chọn. Bạn có thể không cần chúng cho kho lưu trữ tùy chỉnh của riêng mình tùy chọn cURL hoặc luồngKho lưu trữ được truy cập bằng cách sử dụng luồng cURL (Trình soạn thảo 2 có bật ext-curl) hoặc luồng PHP. Bạn có thể đặt các tùy chọn bổ sung bằng tham số 76. Đối với luồng PHP, bạn có thể đặt bất kỳ tùy chọn ngữ cảnh luồng PHP hợp lệ nào. Xem Tùy chọn ngữ cảnh và tham số để biết thêm thông tin. Khi cURL được sử dụng, chỉ có thể định cấu hình một bộ giới hạn các tùy chọn 77 và 78 10VCSVCS là viết tắt của hệ thống kiểm soát phiên bản. Điều này bao gồm các hệ thống phiên bản như git, svn, Fossil hoặc hg. Composer có một loại kho lưu trữ để cài đặt các gói từ các hệ thống này Đang tải gói từ kho lưu trữ VCSCó một vài trường hợp sử dụng cho việc này. Cách phổ biến nhất là duy trì ngã ba thư viện của bên thứ ba của riêng bạn. Nếu bạn đang sử dụng một thư viện nhất định cho dự án của mình và bạn quyết định thay đổi thứ gì đó trong thư viện, bạn sẽ muốn dự án của mình sử dụng phiên bản đã vá lỗi. Nếu thư viện có trên GitHub (trường hợp này thường xuyên xảy ra), bạn có thể rẽ nhánh nó ở đó và đẩy các thay đổi của bạn vào nhánh rẽ của bạn. Sau đó, bạn cập nhật 8 của dự án. Tất cả những gì bạn phải làm là thêm ngã ba của mình làm kho lưu trữ và cập nhật ràng buộc phiên bản để trỏ đến nhánh tùy chỉnh của bạn. Chỉ trong 8, bạn nên đặt trước tên chi nhánh tùy chỉnh của mình bằng 31 (không biến nó thành một phần của tên chi nhánh thực tế). Đối với các quy ước đặt tên ràng buộc phiên bản, hãy xem Thư viện để biết thêm thông tinVí dụ giả sử bạn đã vá monolog để sửa lỗi trong nhánh 32 11Khi bạn chạy 33, bạn sẽ nhận được phiên bản sửa đổi của 52 thay vì phiên bản từ packagistLưu ý rằng bạn không nên đổi tên gói trừ khi bạn thực sự có ý định rẽ nhánh nó trong thời gian dài và hoàn toàn rời khỏi gói ban đầu. Nhà soạn nhạc sẽ chọn chính xác gói của bạn so với gói ban đầu vì kho lưu trữ tùy chỉnh được ưu tiên hơn packagist. Nếu bạn muốn đổi tên gói, bạn nên làm như vậy trong nhánh mặc định (thường là chính) chứ không phải trong nhánh tính năng, vì tên gói được lấy từ nhánh mặc định Cũng lưu ý rằng ghi đè sẽ không hoạt động nếu bạn thay đổi thuộc tính 35 trong tệp 8 của kho lưu trữ rẽ nhánh của bạn vì điều này cần phải khớp với bản gốc để ghi đè hoạt độngNếu các phần phụ thuộc khác dựa vào gói mà bạn đã rẽ nhánh, thì có thể đặt bí danh nội tuyến cho nó để nó khớp với một ràng buộc mà nếu không thì nó sẽ không. Để biết thêm thông tin, hãy xem bài viết bí danh Sử dụng kho lưu trữ riêngChính xác cùng một giải pháp cho phép bạn làm việc với các kho lưu trữ riêng của mình tại GitHub và Bitbucket 12Yêu cầu duy nhất là cài đặt khóa SSH cho ứng dụng khách git Các lựa chọn thay thế GitGit không phải là hệ thống kiểm soát phiên bản duy nhất được kho lưu trữ VCS hỗ trợ. Sau đây được hỗ trợ Để nhận các gói từ các hệ thống này, bạn cần cài đặt ứng dụng khách tương ứng của chúng. Điều đó có thể bất tiện. Và vì lý do này, có hỗ trợ đặc biệt cho GitHub và Bitbucket sử dụng API do các trang web này cung cấp để tìm nạp các gói mà không cần phải cài đặt hệ thống kiểm soát phiên bản. Kho lưu trữ VCS cung cấp các 37 để chúng tìm nạp các gói dưới dạng zipTrình điều khiển VCS được sử dụng được phát hiện tự động dựa trên URL. Tuy nhiên, nếu bạn cần chỉ định một loại vì bất kỳ lý do gì, bạn có thể sử dụng 38, 39, 40, 41, 42, 43, 44 hoặc 45 làm loại kho lưu trữ thay vì 46Nếu bạn đặt khóa 47 thành 48 trên kho lưu trữ github, nó sẽ sao chép kho lưu trữ giống như với bất kỳ kho lưu trữ git nào khác thay vì sử dụng API GitHub. Nhưng không giống như sử dụng trực tiếp trình điều khiển 43, Trình soạn thảo vẫn sẽ cố gắng sử dụng các tệp zip của githubXin lưu ý
Cấu hình trình điều khiển Bitbucket
Sau khi thiết lập kho lưu trữ bitbucket của mình, bạn cũng sẽ cần phải Tùy chọn lật đổVì Subversion không có khái niệm gốc về các nhánh và thẻ, Trình soạn thảo giả định theo mặc định rằng mã nằm trong 104, 105 và 106. Nếu kho lưu trữ của bạn có bố cục khác, bạn có thể thay đổi các giá trị đó. Ví dụ: nếu bạn đã sử dụng tên viết hoa, bạn có thể định cấu hình kho lưu trữ như thế này 13Nếu bạn không có thư mục nhánh hoặc thẻ, bạn có thể vô hiệu hóa chúng hoàn toàn bằng cách đặt 107 hoặc 108 thành 109Nếu gói nằm trong thư mục con, e. g. 110 và 111, sau đó bạn có thể khiến Composer truy cập nó bằng cách đặt tùy chọn 112 cho thư mục con, trong ví dụ này sẽ là 113Nếu bạn có kho lưu trữ Subversion riêng, bạn có thể lưu thông tin xác thực trong phần cơ bản http của cấu hình của mình (Xem Lược đồ) 14Nếu máy khách Subversion của bạn được cấu hình để lưu trữ thông tin đăng nhập theo mặc định, những thông tin đăng nhập này sẽ được lưu cho người dùng hiện tại và thông tin đăng nhập đã lưu hiện tại cho máy chủ này sẽ bị ghi đè. Để thay đổi hành vi này bằng cách đặt tùy chọn 114 trong cấu hình kho lưu trữ của bạn 15Bưu kiệnNếu bạn muốn sử dụng một dự án không hỗ trợ Trình soạn thảo thông qua bất kỳ phương tiện nào ở trên, bạn vẫn có thể tự xác định gói bằng cách sử dụng kho lưu trữ 115Về cơ bản, bạn xác định cùng một thông tin được bao gồm trong kho lưu trữ ________ 09 của ________ 20, nhưng chỉ cho một gói duy nhất. Một lần nữa, các trường bắt buộc tối thiểu là 35, 119 và một trong hai số 37 hoặc 121Đây là một ví dụ cho công cụ mẫu thông minh 16Thông thường, bạn sẽ bỏ qua phần nguồn vì bạn không thực sự cần nó.
Khóa 124 trong kho lưu trữ 115 có thể được đặt thành một mảng để xác định nhiều phiên bản của gói 17Lưu trữ của riêng bạnMặc dù hầu hết thời gian bạn có thể muốn đặt các gói của mình trên packagist, nhưng có một số trường hợp sử dụng để lưu trữ kho lưu trữ của riêng bạn
Để lưu trữ các gói của riêng bạn, nên sử dụng loại kho lưu trữ gốc 9, cung cấp hiệu suất tốt nhấtCó một số công cụ có thể giúp bạn tạo kho lưu trữ 9Nhà đóng gói tư nhânPackagist riêng là một ứng dụng được lưu trữ hoặc tự lưu trữ cung cấp dịch vụ lưu trữ gói riêng cũng như phản chiếu GitHub, Packagist. org và các kho lưu trữ gói khác Kiểm tra Packagist. com để biết thêm thông tin hài lòngSatis là trình tạo kho lưu trữ 9 tĩnh. Nó giống như một phiên bản packagist dựa trên tệp tĩnh, siêu nhẹ.Bạn cung cấp cho nó một kho lưu trữ chứa 8, điển hình là VCS và định nghĩa kho lưu trữ gói. Nó sẽ lấy tất cả các gói là 130d và kết xuất một 0 là kho lưu trữ 9 của bạnKiểm tra kho lưu trữ GitHub satis và bài viết xử lý các gói riêng tư để biết thêm thông tin hiện vậtCó một số trường hợp, khi không có khả năng có một trong các loại kho lưu trữ được đề cập trước đó trực tuyến, ngay cả loại VCS. Một ví dụ điển hình có thể là trao đổi thư viện giữa các tổ chức thông qua các tạo phẩm xây dựng. Tất nhiên, hầu hết thời gian đây là riêng tư. Để sử dụng nguyên trạng các kho lưu trữ này, người ta có thể sử dụng kho lưu trữ loại 133 với một thư mục chứa kho lưu trữ ZIP hoặc TAR của các gói riêng tư đó 18Mỗi tạo phẩm zip là một kho lưu trữ ZIP có 8 trong thư mục gốc 19 0Nếu có hai kho lưu trữ với các phiên bản khác nhau của một gói, thì cả hai đều được nhập. Khi một kho lưu trữ có phiên bản mới hơn được thêm vào thư mục tạo phẩm và bạn chạy 135, phiên bản đó cũng sẽ được nhập và Trình soạn thảo sẽ cập nhật lên phiên bản mới nhấtCon đườngNgoài kho lưu trữ hiện vật, bạn có thể sử dụng đường dẫn một, cho phép bạn phụ thuộc vào thư mục cục bộ, tuyệt đối hoặc tương đối. Điều này có thể đặc biệt hữu ích khi xử lý các kho lưu trữ nguyên khối Chẳng hạn, nếu bạn có cấu trúc thư mục sau trong kho lưu trữ của mình 1Sau đó, để thêm gói 136 làm phụ thuộc, trong tệp 137 của bạn, bạn có thể sử dụng cấu hình sau 2Nếu gói là kho lưu trữ VCS cục bộ, phiên bản có thể được suy ra bởi nhánh hoặc thẻ hiện đang được kiểm xuất. Mặt khác, phiên bản phải được xác định rõ ràng trong tệp 8 của gói. Nếu phiên bản không thể được giải quyết bằng các phương tiện này, thì phiên bản đó được coi là 139Khi không thể suy ra phiên bản từ kho lưu trữ VCS cục bộ hoặc khi bạn muốn ghi đè phiên bản, bạn có thể sử dụng tùy chọn 140 khi khai báo kho lưu trữ 3Gói cục bộ sẽ được liên kết tượng trưng nếu có thể, trong trường hợp đó, đầu ra trong bảng điều khiển sẽ là 141. Nếu không thể liên kết tượng trưng, gói sẽ được sao chép. Trong trường hợp đó, bảng điều khiển sẽ xuất ra 142Thay vì chiến lược dự phòng mặc định, bạn có thể buộc sử dụng liên kết tượng trưng với 143 hoặc phản chiếu với tùy chọn 144. Buộc phản chiếu có thể hữu ích khi triển khai hoặc tạo gói từ kho lưu trữ nguyên khối
4Dấu ngã hàng đầu được mở rộng vào thư mục nhà của người dùng hiện tại và các biến môi trường được phân tích cú pháp theo cả ký hiệu Windows và Linux/Mac. Ví dụ 146 sẽ tự động tải bản sao mypackage từ 147, tương đương với 148 hoặc 149
Bạn có thể định cấu hình cách tham chiếu dist của gói (xuất hiện trong trình soạn thảo. lock) được xây dựng |