2013-06-11 58 views
20

我想發佈一個PHP庫,並通過Packagist提交它,讓它可以通過Composer進行安裝。如何忽略Composer的目錄?

我的圖書館具有以下結構:

lib/ 
tests/ 
composer.json 
README.md 

基本上,只要我包括在項目的composer.json這個圖書館,我想一切都與tests目錄例外,這是麻煩和被複制僅在開發庫本身時才需要。這不過是浪費空間(特別是在包裝項目進行生產時)。

是否可以從圖書館的composer.json中排除此目錄?

回答

22

這在Composer中是不可能的。不過,也有一些方法來做到這一點:

  • 當您運行更新或安裝與--prefer-dist指揮,作曲家試圖下載在GitHub上存檔。你可以把這個在.gitattributes文件在你的項目的根目錄中刪除從檔案測試目錄:

    Tests/ export-ignore 
    
  • 作曲只會用在GitHub上的標籤。創建標籤時只需臨時移除tests目錄也可以做到這一點。

+0

非常好,謝謝。 '.gitattributes'解決方案看起來很有前景。雖然不從GitHub下載ZIP的默認行爲? – Benjamin

+0

@Benjamin不,它從標籤下載代碼,而不是zip。你必須使用'--prefer-dist'來獲得zip(在anser中使用錯誤的開關,固定知道) –

+9

實際上[這個頁面](http://getcomposer.org/doc/03-cli.md)說:*對於穩定版本,作曲者默認使用'dist'。 – Benjamin

1

自2015年11月11日這已經可以與https://getcomposer.org/doc/04-schema.md#exclude-files-from-classmaps

來源:https://github.com/composer/composer/issues/4456#issuecomment-155825777

編輯:誤讀。上面只允許自動加載器忽略指定的路徑,它實際上並不妨礙它們在安裝時被複制到文件系統。

+1

感謝您的指點!我打算將您的答案標記爲已接受,但在閱讀完文檔後,看起來這只是將這些文件從自動加載器中排除出去:它們仍然存在於存檔中。這顯然是第一步,但是我的最終目標是通過從Composer安裝時完全刪除測試文件來減小存檔大小。 – Benjamin

+1

對不起,我錯誤地解釋了這種情況下的問題:)所以你需要類似Bower中的「忽略」選項(忽略[數組]):生產中不需要的路徑數組,您需要在安裝包時忽略Bower。 - 我不知道作曲家的這個功能 - 您是否在https://github.com/composer/composer/issues上創建了功能請求? – Motin

1

可以通過在archive密鑰中的composer.json文件中添加排除模式來控制存檔創建。詳情請參閱https://getcomposer.org/doc/04-schema.md#archive

給出的例子(從上面URL引用的):

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

的例子將包括/dir/foo/bar/file/foo/bar/baz/file.php/foo/my.test但它將排除/foo/bar/any/foo/baz,和/my.test

這樣你就可以得到與.gitattributes相同的控制權,而不必使用Git或影響所需文件中不同設置的任何進程。

+0

謝謝,我讀了你鏈接到的段落,但我不明白*哪個*存檔此目標:據我瞭解,Packagist不託管包檔案;相反,Composer通過克隆git repo或ZIP壓縮包(通常來自GitHub,我猜測只跟隨'.gitattributes'而不是'composer.json')來下載軟件包。 Composer是否仍然這樣做,但因此會在本地刪除排除的文件? – Benjamin

+0

一個很好的問題,我會去調查。當然,這個設置會影響Satis運行期間包的創建。我不確定要從Github下載軟件包。 – Sven