2014-02-28 31 views
4

我是Composer(getcomposer.org)的新手,不確定它是如何工作的,如果我使用Composer在本地安裝包,然後使用Git將我的代碼庫推送到我的生產服務器。我必須在生產服務器上再次運行Composer嗎?您是否必須在本地主機和生產環境中運行Composer?

歡呼聲, Ĵ

+2

Composer只是下載文件並將其放入供應商文件夾。只要這些文件在那裏,就沒有必要運行作曲家了。 – deceze

+0

即使在閱讀這裏的評論後,我不確定。我在這裏發現的這篇文章清除了我對一個偉大事件的懷疑。但還沒有自己測試。 http://forumsarchive.laravel.io/viewtopic.php?id=9164 – Ananda

回答

7

當你設置你的項目,你加您的依賴項放入您本地項目目錄中的composer.json文件中。

完成此操作後,您需要運行作曲家更新。您也可以運行作曲家安裝,但是,如果沒有composer.lock文件,作曲家安裝實際上會運行作曲家更新。

Composer更新結束並解析所有正在使用的庫的所有依賴項,將它們下載到/ vendor目錄,創建自動加載器腳本並生成composer.lock文件。

對於你的項目你想要做的是版本你的composer.json和你的composer.lock文件。

在您的生產服務器上,您將始終運行作曲家安裝,這將確保生產服務器上的庫與您在開發過程中使用的庫完全相同。

作曲家安裝也快很多,因爲它不需要做所有的依賴管理工作,並且幾乎總是可以拉取特定的提交#。它不必看版本字符串。因此,一旦服務器已經經歷過一次,通常是非常快的。

在開發中,唯一一次應該運行作曲家更新,是當你引入一個新庫時,或者你有一個問題,其中一個底層庫已經改變,你知道你需要讓作曲家出去並重新計算依賴。即使版本級別沒有變化,作曲家更新也會重新計算並下載任何可用庫的最新版本。這意味着可能會有某些東西被破壞,因此需要儘可能進行完整的迴歸測試。簡而言之,與你實際改變的東西無關的事情可能已經破裂,所以你只想在被迫時引入改變的可能性。

當然,如果你確實引入了一個新庫,你別無選擇,只能運行作曲家更新。

運行composer update後,composer.lock文件將會更新(如預期的那樣),並且生產服務器會在您運行composer install時將其選中。

正如其他人所說,把供應商在你的gitignore。關鍵是這些是您依賴的外部庫,但不屬於您的項目,不應該進行版本控制。在過去,有些人使用git子模塊,這是一個你真正想避免的大型PITA,更不用說子模塊不能解決你所包含的庫的依賴關係。

0

這取決於你是如何工作的。如果你像getcomposer.org所說的那樣忽略了「vendor」文件夾,那麼你需要再次運行它。如果您正在版本化「供應商」文件夾,那麼您不需要再次運行它。

請記住,作曲家將負責管理您的依賴項版本,因此不需要將您的依賴項文件置於版本控制之下。如果你把這些文件放在git下,你只會讓你的存儲庫變大。

閱讀https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies

爲了澄清,當你忽略了「供應商」文件夾中的Git沒有跟蹤該文件夾下的文件,所以如果你克隆回購它會像作曲家從未被執行

相關問題