2013-06-18 38 views
6

Tôi vừa mới bắt đầu sử dụng tính năng Composer nơi bạn yêu cầu nó xem các thư mục cục bộ để phụ thuộc, để bạn có thể phát triển một thư viện và một thư viện nào đó sử dụng thư viện đó song song mà không cần phải cập nhật mọi lúc, đó là tuyệt vời. ví dụ.Tùy chọn Composer để sử dụng thay thế cho composer.json?

"repositories": [ 
    { 
     "type": "vcs", 
     "url": "/documents/projects/github/guzzle" 
    } 
], 

"require":{ 
    "guzzle/guzzle": "3.7.*@dev" 
} 

Vì vậy, khi bạn làm một bản cập nhật sáng tác, Composer sẽ kéo trong phiên bản của tật ham ăn từ thư mục địa phương, vì vậy bạn có thể kiểm tra mã cho một thư viện trong ứng dụng khác có sử dụng thư viện đó mà không cần phải đẩy đến một kho lưu trữ giữa mỗi thay đổi mã.

Tuy nhiên tôi gần như đã kiểm tra trong composer.json cho dự án của tôi với tập hợp đó - điều này rõ ràng là sẽ không hoạt động trên bất kỳ máy elses nào.

Có cách nào để yêu cầu nhà soạn nhạc sử dụng tệp khác với composer.json hoặc cách khác để có thể yêu cầu nhà soạn nhạc sử dụng thư mục cục bộ một cách an toàn mà không có khả năng xảy ra tình cờ phá vỡ phiên bản composer.json bị hỏng kho lưu trữ của bạn?

Trả lời

2

Thay vì tìm nạp từ kho lưu trữ cục bộ ở nơi khác, bạn có thể thêm tùy chọn --prefer-source vào lệnh composer install/update và xóa tham chiếu kho lưu trữ cục bộ.

Nhà soạn nhạc theo cách đó sẽ gọi git sao chép phần mềm vào thư mục của nhà cung cấp và bạn có thể phát triển cả phần mềm của mình và cam kết với phần mềm của nhà cung cấp, vì đó cũng là một repo git đầy đủ.

Việc thêm tham chiếu kho lưu trữ cục bộ không thực sự được khuyến nghị. Nó hoạt động khi sử dụng chúng cho phần mềm địa phương thực, nhưng duy trì nó có chi phí cao: Bạn phải đề cập đến kho này trong mọi tệp composer.json sẽ bao giờ tải phần mềm đó, ngay cả khi nó chỉ phụ thuộc gián tiếp (tức là bạn thêm phần mềm cần phần mềm này như là một phụ thuộc trong repo địa phương của bạn).

Mã hóa cứng URL của kho lưu trữ cũng sẽ ngăn bạn thay đổi tùy ý. Mặc dù bạn có thể di chuyển repo và thay đổi URL tương ứng, tất cả các phiên bản cũ hơn của phần mềm của bạn vẫn có URL cũ trong cả hai tệp composer.json và composer.lock và sẽ cố gắng tải từ đó.

0

Dường như không có cách nào để làm điều này một cách độc đáo trong Composer, tuy nhiên có thể hack xung quanh nó.

Trong tệp composer.json của bạn, hãy đặt nhận xét bạn muốn hack vào một số dữ liệu.

{ 
"name": "base-reality/intahwebz", 

"//": "LOCALHACK", 

"require":{ 
    "base-reality/php-to-javascript": ">=0.1.17", 
    "guzzle/danackguzzle": "3.3.*@dev", 
    ... 
    ... 
    } 
    ... 
} 

Sau đó, có một composer.local file riêng biệt (không cam kết Git) có chứa các tham chiếu đến thư mục địa phương:

"LOCALHACK", 

"repositories": [ 
    { 
     "type": "vcs", 
     "url": "/documents/projects/github/intahwebz-core" 
    } 
], 

Thêm một kịch bản PHP nhỏ xíu gọi là composerLocal.php để tạo ra composer.json mới file

<?php 

$srcFile = file_get_contents("composer.json"); 
$hackFile = file_get_contents("composer.local"); 
$finalString = str_replace('"LOCALHACK",', $hackFile, $srcFile); 
file_put_contents("composer.json", $finalString); 

?> 

Và một tập lệnh bash nhỏ gọi là localupdate.sh để sao lưu tệp composer.json thực, tạo composer.json bị hack, chạy Composer và sau đó khôi phục các composer.json gốc tập tin

cp -f composer.json composer.json.bak 
php composerLocal.php 
composer update 
cp -f composer.json.bak composer.json 

Chạy kịch bản localupdate.sh phép bạn kiểm tra các cam kết tại địa phương mà không cần sự nguy hiểm của thay đổi tập tin composer.json thực tế sử dụng của dự án, do đó ít cơ hội vô tình đẩy composer.json không hợp lệ vào kho lưu trữ.

Chỉ cần lưu ý, Composer không đọc các tệp từ thư mục lưu trữ, nó đọc các tệp đã cam kết trong Git, do đó bạn cần thực hiện các thay đổi được thực hiện cho mã thư viện. Quá trình trên chỉ bỏ qua bước đẩy.

-1

Dễ dàng, chỉ cần sử dụng tạo phẩm.

Trong kho thêm này:

{ 
    "type": "artifact", 
    "url": "path/to/artifact/files/" 
}, 

Bây giờ bạn chỉ cần để tạo ra các thư mục và nén một bản sao của kho lưu trữ của bạn vào thư mục đó.

Tên file nén như vậy:

[vendorname]-[packagename]-[version].zip 

dụ:

querypath-QueryPath-3.0.0.zip 

Bây giờ bạn có thể sửa đổi các gói trong nước và nó sẽ kéo từ tập tin zip thay vì repo trực tuyến.

Trong yêu cầu thêm nó như vậy và chỉ định phiên bản theo quy định tại zip:

"querypath/QueryPath": "3.0.0", 

Với phương pháp này, bạn sẽ có khả năng chỉnh sửa các tập tin nhà cung cấp và nhà soạn nhạc vẫn sẽ cập nhật bất kỳ autoloaders liên quan đến những thay đổi và nó sẽ để lại những thay đổi của bạn một mình.

+0

Tôi biết cách chỉnh sửa tệp composer.json. Câu hỏi là "Có cách nào để nói với nhà soạn nhạc sử dụng một tệp khác với composer.json" để tránh phải chỉnh sửa composer.json. – Danack

+0

Xin lỗi, bạn đã hiểu được điểm của câu hỏi. Nghĩ rằng bạn muốn chỉnh sửa thư viện và có nhà soạn nhạc để lại chúng một mình. –

Các vấn đề liên quan