2017-09-04 40 views
2

我正在閱讀/學習有關PHP的應用級包管理器Composer。由Composer安裝的PHP軟件包 - 它們是否應該在源代碼管理中?

在這種blog post鉛開發霍爾迪博賈諾寫的,他寫道:在另一方面迫使你

作曲家申報項目 依賴於一個一站式的位置(composer.json在根) 。你 只是結帳的代碼,安裝依賴項,他們將坐在 項目目錄,不會干擾機器上的其他任何東西。 另一個相關功能是安裝或更新依賴項時生成的 的composer.lock文件。它存儲所使用的每個依賴項的確切版本 。如果你犯了,任何檢查 出該項目將能夠安裝有完全相同版本的 你做您上次更新的文件,避免在不同版本的 依賴的問題,因爲 輕微的不兼容或迴歸。

如果我理解正確的作曲家,當我們談論的下載/包作曲家安裝,我們所談論的PHP代碼包,即用PHP編寫的,而不是系統級封裝編程代碼,例如,安裝在服務器上的PHP運行時的擴展。因此,一旦這些PHP代碼包已經下載並添加到PHP項目中,我就會認爲這些包成爲PHP應用程序源代碼的一部分,例如要檢入哪個版本控制系統用於該項目。如果另一位開發人員出現並檢查了代碼,爲什麼他們需要「安裝軟件包」,如博客文章中所述?當他們簽出源代碼管理代碼時,他們不會得到所有代碼包的副本嗎?博客文章中的這條線讓我感到困惑,讓我覺得我不懂Composer。

任何清晰的這將不勝感激。謝謝。

+0

請參閱https://getcomposer.org/doc/faqs/should-i-commit-the-dependencies-in-my-vendor-directory.md。 – localheinz

回答

3

依賴項本身應該而不是被委託給源代碼管理。另一方面,文件composer.jsoncomposer.lock應該。其中有各種原因,其中包括:

  • 每次更新依賴項時,您都必須提交更改。這種方式將你的代碼緊密地依賴於依賴關係,當它恰好相反時。
  • 這些軟件包本身已經存在於自己的倉庫中,並有自己的歷史記錄。爲什麼在你的項目歷史中重複這一點?
  • 這些存儲庫可能是巨大的,只是混淆了項目周圍的水域。爲什麼要攜帶所有的重量?

取而代之的是,讓每個開發者只需運行composer install(很重要:不composer update)時,他們檢查了項目效率要高得多。 Composer將安裝來自composer.lock的依賴項,確保運行相同提交的每個人都在完全相同的頁面上。部署也是如此。

您可以閱讀更多關於此here

在另一方面,可能有情況下,您提交你的包來解決問題,例如像當你知道你將無法到生產服務器上運行composer install(託管共享)

+0

樂意幫忙!現在有點清楚了嗎? – ishegg

+0

是的,謝謝。 – Callum

4

正常情況下,通過作曲家安裝的軟件包不會檢入源代碼管理,只有您編寫的代碼以及composer.json和composer.lock文件。

通過這種方式,您的項目的存儲庫不會因您沒有寫入的代碼而變得臃腫,並且可能並不真正關心那麼多。

是在克隆了您的存儲庫後,它的正常情況是開發人員需要運行「作曲家安裝」命令。 composer.lock文件將確保它們獲得您在創建項目時使用的相同模塊和版本。

在您的源代碼管理中不包括composer模塊,您還可以輕鬆更新模塊以獲取錯誤修復和新版本中的新功能。

相關問題