2013-06-11 15 views
20

Tôi muốn phát hành một thư viện PHP và gửi nó trên Packagist để có thể cài đặt qua Composer.Làm thế nào để bỏ qua các thư mục với Composer?

Thư viện của tôi có cấu trúc sau:

lib/ 
tests/ 
composer.json 
README.md 

Về cơ bản, bất cứ khi nào tôi bao gồm thư viện này trong một dự án của composer.json, tôi muốn tất cả mọi thứ được sao chép với ngoại lệ của thư mục tests, đó là cồng kềnh và chỉ cần thiết khi phát triển thư viện. Nó chỉ là một sự lãng phí không gian khác (đặc biệt là khi đóng gói dự án cho sản xuất).

Có thể loại trừ thư mục này khỏi thư viện composer.json của thư viện không?

Trả lời

22

Điều này là không thể trong Composer. Tuy nhiên, có một số cách để làm điều đó:

  • Khi bạn chạy các bản cập nhật hoặc cài đặt lệnh với --prefer-dist, Composer cố gắng để tải về lưu trữ trên github. Bạn có thể loại bỏ các thư mục kiểm tra từ các tài liệu lưu trữ bằng cách đặt này trong một file .gitattributes trong thư mục gốc của dự án của bạn:

    Tests/ export-ignore 
    
  • Composer sẽ chỉ sử dụng các thẻ trên github. Chỉ cần tạm thời xóa thư mục kiểm tra khi tạo thẻ cũng sẽ thực hiện thủ thuật.

+0

Tuyệt vời, cảm ơn. Giải pháp '.gitattributes' trông đầy hứa hẹn. Tuy nhiên, không tải xuống ZIP từ GitHub hành vi mặc định? – Benjamin

+0

@Benjamin no, nó tải xuống mã từ thẻ chứ không phải mã zip. Bạn phải sử dụng '--prefer-dist' để lấy mã zip (sử dụng công tắc sai trong anser, cố định biết) –

+9

Trên thực tế [trang này] (http://getcomposer.org/doc/03-cli.md) nói : * Đối với nhà soạn nhạc phiên bản ổn định sẽ sử dụng 'dist' theo mặc định. * – Benjamin

1

này đã có thể kể từ 11 Tháng Mười Một 2015 với https://getcomposer.org/doc/04-schema.md#exclude-files-from-classmaps

Nguồn: https://github.com/composer/composer/issues/4456#issuecomment-155825777

EDIT: hiểu sai. Ở trên chỉ cho phép trình nạp tự động bỏ qua các đường dẫn được chỉ định, nó không thực sự ngăn cản chúng được sao chép vào hệ thống tập tin khi cài đặt.

+1

Cảm ơn con trỏ!Tôi đã định đánh dấu câu trả lời của bạn như được chấp nhận, nhưng sau khi đọc tài liệu, có vẻ như đây chỉ là loại trừ các tệp đó khỏi trình tải tự động: chúng vẫn sẽ có mặt trong kho lưu trữ. Đây rõ ràng là bước đầu tiên, tuy nhiên mục tiêu cuối cùng của tôi là giảm dung lượng lưu trữ bằng cách xóa hoàn toàn các tệp thử nghiệm khi cài đặt từ Composer. – Benjamin

+1

Xin lỗi tôi đã hiểu sai câu hỏi trong trường hợp đó :) Vì vậy, bạn muốn một cái gì đó giống như tùy chọn "bỏ qua" trong Bower (bỏ qua [mảng]: Một mảng đường dẫn không cần thiết trong sản xuất mà bạn muốn Bower bỏ qua khi cài đặt gói của bạn.) - Tôi không biết tính năng đó trong nhà soạn nhạc - bạn đã tạo yêu cầu tính năng trên https://github.com/composer/composer/issues chưa? – Motin

1

Có thể kiểm soát việc tạo lưu trữ bằng cách thêm mẫu loại trừ trong tệp composer.json trong khóa archive. Xem https://getcomposer.org/doc/04-schema.md#archive để biết chi tiết.

Ví dụ nhất định (trích dẫn từ trên URL):

{ 
    "archive": { 
     "exclude": ["/foo/bar", "baz", "/*.test", "!/foo/bar/baz"] 
    } 
} 

Ví dụ sẽ bao gồm /dir/foo/bar/file, /foo/bar/baz, /file.php, /foo/my.test nhưng nó sẽ loại trừ /foo/bar/any, /foo/baz, và /my.test.

Bằng cách đó bạn có về cùng một điều khiển mà .gitattributes sẽ cung cấp cho bạn, mà không cần phải sử dụng Git hoặc ảnh hưởng đến bất kỳ quy trình đòi hỏi cài đặt khác nhau trong cho biết tập tin.

+0

Cảm ơn, tôi đã đọc đoạn bạn đã liên kết, nhưng tôi không hiểu * mục nào * lưu trữ các mục tiêu này: theo như tôi hiểu, Packagist không lưu trữ các gói lưu trữ; thay vào đó Composer tải xuống các gói bằng cách sao chép git repo hoặc từ một kho lưu trữ ZIP (thường là từ GitHub, mà tôi đoán chỉ theo sau '.gitattributes' chứ không phải' composer.json'). Composer vẫn làm điều đó, nhưng do đó xóa các tập tin bị loại trừ cục bộ? – Benjamin

+0

Một câu hỏi rất hay, tôi sẽ điều tra. Để chắc chắn cài đặt này ảnh hưởng đến việc tạo các gói trong khi chạy Satis. Tôi không chắc chắn về việc tải xuống gói từ Github. – Sven