Php ziparchive gặp lỗi

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

Các khái niệm

Trướ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ện

Nhà 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

Kho

Mộ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

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
8

Cá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ại

nhà soạn nhạc

Loại kho lưu trữ chính là kho lưu trữ

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
9. Nó sử dụng một tệp
{
    "notify-batch": "/downloads/"
}
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ữ

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
9, hãy cung cấp đường dẫn trước tệp
{
    "notify-batch": "/downloads/"
}
0. Trong trường hợp của packagist, tệp đó nằm ở
{
    "notify-batch": "/downloads/"
}
3, vì vậy URL của kho lưu trữ sẽ là
{
    "notify-batch": "/downloads/"
}
4. Đối với
{
    "notify-batch": "/downloads/"
}
5, URL kho lưu trữ sẽ là
{
    "notify-batch": "/downloads/"
}
6

{
    "repositories": [
        {
            "type": "composer",
            "url": "https://example.org"
        }
    ]
}

gói

Trường bắt buộc duy nhất là

{
    "notify-batch": "/downloads/"
}
7. Cấu trúc JSON như sau

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
1

Điểm đánh dấu

{
    "notify-batch": "/downloads/"
}
8 sẽ là nội dung của
{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
8 từ phiên bản gói đó bao gồm tối thiểu

  • Tên
  • phiên bản
  • dist hoặc nguồn

Đây là một định nghĩa gói tối thiểu

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}

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ạt

Trường

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
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ện

Một giá trị ví dụ

{
    "notify-batch": "/downloads/"
}

Đối với

{
    "notify-batch": "/downloads/"
}
5 chứa gói
{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
52, điều này sẽ gửi yêu cầu
{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
53 đến
{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
54 với phần thân yêu cầu JSON sau đây

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
5

Trườ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ẵn

Trường

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
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ỗ
{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
56

Trường này là trường mới trong Composer v2 và được ưu tiên hơn trường

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
57 và
{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
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ợ v2

Một ví dụ

{
    "notify-batch": "/downloads/"
}
6

Bất cứ khi nào Trình soạn thảo tìm kiếm một gói, nó sẽ thay thế

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
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
{
    "notify-batch": "/downloads/"
}
60 (e. g.
{
    "notify-batch": "/downloads/"
}
61 để tìm phiên bản dành cho nhà phát triển của
{
    "notify-batch": "/downloads/"
}
62)

Các tệp

{
    "notify-batch": "/downloads/"
}
63 và
{
    "notify-batch": "/downloads/"
}
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ư
{
    "notify-batch": "/downloads/"
}
65

Bộ 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

{
    "notify-batch": "/downloads/"
}
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
{
    "notify-batch": "/downloads/"
}
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

{
    "notify-batch": "/downloads/"
}
68 trong
{
    "notify-batch": "/downloads/"
}
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
{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
80 là một mảng các mẫu tên gói (với
{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
81 khớp với bất kỳ chuỗi nào, e. g.
{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
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-api

Trường

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
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ỗ
{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
56

Ví 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

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
8

Mục này không bắt buộc

danh sách

Trường

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
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
{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
86 tùy chọn, có thể chứa
{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
81 dưới dạng ký tự đại diện khớp với bất kỳ chuỗi con nào

Thay 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

{
    "notify-batch": "/downloads/"
}
7

Xem 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-url

Trường

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
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

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
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ỗ
{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
56 và
{
    "notify-batch": "/downloads/"
}
71

Cá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

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
55 được đặt

Một ví dụ

{
    "notify-batch": "/downloads/"
}
3

Ví 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

{
    "notify-batch": "/downloads/"
}
4

Tệ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

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
58, thay thế
{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
56 bằng tên gói được đặt tên của nhà cung cấp và
{
    "notify-batch": "/downloads/"
}
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ồng

Kho 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ố

{
    "notify-batch": "/downloads/"
}
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
{
    "notify-batch": "/downloads/"
}
77 và
{
    "notify-batch": "/downloads/"
}
78

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
10

VCS

VCS 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ữ VCS

Có 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

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
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
{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
8, bạn nên đặt trước tên chi nhánh tùy chỉnh của mình bằng
{
    "notify-batch": "/downloads/"
}
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 tin

Ví dụ giả sử bạn đã vá monolog để sửa lỗi trong nhánh

{
    "notify-batch": "/downloads/"
}
32

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
11

Khi bạn chạy

{
    "notify-batch": "/downloads/"
}
33, bạn sẽ nhận được phiên bản sửa đổi của
{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
52 thay vì phiên bản từ packagist

Lư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

{
    "notify-batch": "/downloads/"
}
35 trong tệp
{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
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 động

Nế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êng

Chí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

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
12

Yê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ế Git

Git 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

{
    "notify-batch": "/downloads/"
}
37 để chúng tìm nạp các gói dưới dạng zip

Trì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

{
    "notify-batch": "/downloads/"
}
38,
{
    "notify-batch": "/downloads/"
}
39,
{
    "notify-batch": "/downloads/"
}
40,
{
    "notify-batch": "/downloads/"
}
41,
{
    "notify-batch": "/downloads/"
}
42,
{
    "notify-batch": "/downloads/"
}
43,
{
    "notify-batch": "/downloads/"
}
44 hoặc
{
    "notify-batch": "/downloads/"
}
45 làm loại kho lưu trữ thay vì
{
    "notify-batch": "/downloads/"
}
46

Nếu bạn đặt khóa

{
    "notify-batch": "/downloads/"
}
47 thành
{
    "notify-batch": "/downloads/"
}
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
{
    "notify-batch": "/downloads/"
}
43, Trình soạn thảo vẫn sẽ cố gắng sử dụng các tệp zip của github

Xin lưu ý

  • Để Composer chọn trình điều khiển nào sẽ sử dụng, loại kho lưu trữ cần được xác định là "vcs"
  • Nếu bạn đã sử dụng một kho lưu trữ riêng, điều này có nghĩa là Trình soạn thảo đã sao chép nó vào bộ đệm. Nếu bạn muốn cài đặt cùng một gói với trình điều khiển, hãy nhớ khởi chạy lệnh
    {
        "name": "smarty/smarty",
        "version": "3.1.7",
        "dist": {
            "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
            "type": "zip"
        }
    }
    100, sau đó là lệnh
    {
        "name": "smarty/smarty",
        "version": "3.1.7",
        "dist": {
            "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
            "type": "zip"
        }
    }
    101 để cập nhật bộ đệm Trình soạn thảo và cài đặt gói từ dist
  • Trình điều khiển VCS
    {
        "name": "smarty/smarty",
        "version": "3.1.7",
        "dist": {
            "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
            "type": "zip"
        }
    }
    102 không được dùng để ủng hộ
    {
        "notify-batch": "/downloads/"
    }
    38

Cấu hình trình điều khiển Bitbucket

Lưu ý rằng điểm cuối kho lưu trữ cho Bitbucket cần phải là https thay vì git

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

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
104,
{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
105 và
{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
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

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
13

Nế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

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
107 hoặc
{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
108 thành
{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
109

Nếu gói nằm trong thư mục con, e. g.

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
110 và
{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
111, sau đó bạn có thể khiến Composer truy cập nó bằng cách đặt tùy chọn
{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
112 cho thư mục con, trong ví dụ này sẽ là
{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
113

Nế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 đồ)

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
14

Nế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

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
114 trong cấu hình kho lưu trữ của bạn

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
15

Bưu kiện

Nế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ữ

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
115

Về 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à

{
    "notify-batch": "/downloads/"
}
35,
{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
119 và một trong hai số
{
    "notify-batch": "/downloads/"
}
37 hoặc
{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
121

Đây là một ví dụ cho công cụ mẫu thông minh

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
16

Thông thường, bạn sẽ bỏ qua phần nguồn vì bạn không thực sự cần nó.

Ghi chú. Loại kho lưu trữ này có một vài hạn chế và nên tránh bất cứ khi nào có thể

  • Composer sẽ không cập nhật gói trừ khi bạn thay đổi trường
    {
        "name": "smarty/smarty",
        "version": "3.1.7",
        "dist": {
            "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
            "type": "zip"
        }
    }
    119
  • Trình soạn thảo sẽ không cập nhật các tham chiếu cam kết, vì vậy nếu bạn sử dụng
    {
        "name": "smarty/smarty",
        "version": "3.1.7",
        "dist": {
            "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
            "type": "zip"
        }
    }
    123 làm tham chiếu, bạn sẽ phải xóa gói để buộc cập nhật và sẽ phải xử lý tệp khóa không ổn định

Khóa

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
124 trong kho lưu trữ
{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
115 có thể được đặt thành một mảng để xác định nhiều phiên bản của gói

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
17

Lưu trữ của riêng bạn

Mặ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

  • Gói công ty tư nhân. Nếu bạn là thành viên của một công ty sử dụng Trình soạn thảo cho các gói của họ trong nội bộ, bạn có thể muốn giữ các gói đó ở chế độ riêng tư

  • Hệ sinh thái riêng biệt. Nếu bạn có một dự án có hệ sinh thái riêng và các gói không thực sự được sử dụng lại bởi cộng đồng PHP lớn hơn, bạn có thể muốn tách chúng ra khỏi packagist. Một ví dụ về điều này sẽ là các plugin WordPress

Để 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

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
9, cung cấp hiệu suất tốt nhất

Có một số công cụ có thể giúp bạn tạo kho lưu trữ

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
9

Nhà đóng gói tư nhân

Packagist 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òng

Satis là trình tạo kho lưu trữ

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
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

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
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à
{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
130d và kết xuất một
{
    "notify-batch": "/downloads/"
}
0 là kho lưu trữ
{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
9 của bạn

Kiể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ật

Có 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

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
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ư đó

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
18

Mỗi tạo phẩm zip là một kho lưu trữ ZIP có

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
8 trong thư mục gốc

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
19
{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
0

Nế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

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
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ất

Con đường

Ngoà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

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
1

Sau đó, để thêm gói

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
136 làm phụ thuộc, trong tệp
{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
137 của bạn, bạn có thể sử dụng cấu hình sau

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
2

Nế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

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
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à
{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
139

Khi 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

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
140 khi khai báo kho lưu trữ

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
3

Gó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à

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
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
{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
142

Thay 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

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
143 hoặc phản chiếu với tùy chọn
{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
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

Ghi chú. Trên Windows, các liên kết tượng trưng thư mục được triển khai bằng các liên kết NTFS vì chúng có thể được tạo bởi người dùng không phải quản trị viên. Phản chiếu sẽ luôn được sử dụng trên các phiên bản bên dưới Windows 7 hoặc nếu

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
145 đã bị tắt

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
4

Dấ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ụ

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
146 sẽ tự động tải bản sao mypackage từ
{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
147, tương đương với
{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
148 hoặc
{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
149

Ghi chú. Đường dẫn kho lưu trữ cũng có thể chứa các ký tự đại diện như

{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
81 và
{
    "name": "smarty/smarty",
    "version": "3.1.7",
    "dist": {
        "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
        "type": "zip"
    }
}
151. Để biết chi tiết, hãy xem chức năng toàn cầu PHP

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