0

這是情況。使用Composer路徑存儲庫和合並插件進行開發,如何避免更新composer.lock?

我正在開發package-a這取決於package-b。後者託管在到位桶:

projects/ 
├── package-a/ 
├── package-b/ 

我需要更改包-B並查看結果,而無需按下代碼,做一個composer update然後,完成工作後,我將推送一個新標籤並將包-a部署到生產服務器。

所以我結束了使用composer-merge-plugingComposer path repositories,具有以下配置:

這裏是composer.json包一個

{ 
    "name": "my/package-a", 
    "require": { 
     "my/package-b": "^1.0" 
    }, 
    "repositories": [ 
     { 
      "type": "vcs", 
      "url": "[email protected]:my/package-b.git" 
     } 
    ], 
    "extra": { 
     "merge-plugin": { 
      "include": [ 
       "composer.local.json" 
      ] 
     }, 
     "replace": true 
    } 
} 

該文件將包括composer.local.json(只在我的地方機器!這個文件沒有提交也沒有推送到生產服務器),我在這裏說「使用dev-master版本和路徑庫」:

{ 
    "require": { 
     "my/package-b": "dev-master" 
    }, 
    "repositories": [ 
     { 
      "type": "path", 
      "url": "../package-b" 
     } 
    ] 
} 

的設置是在這個意義上罰款,如果我從運行composer install包一個然後包-B被鏈接,我可以直接進行這項工作。

但是當我部署包一個使用Deployer(版本的composer.lock文件太)我的服務器它確實composer install但鎖定文件包含使用路徑存儲庫包-B @ DEV-主參考(這是錯誤的)。

任何想法如何解決這個問題?我確信這是一個常見的問題,但我無法得到它。

回答

0

爲了幫助開發包裝,您可以有composer install the source of package-b instead of the distribution

package-a

rm -rf vendor/package-b 
composer update --prefer-source package-b 

這應該做的package-b克隆到vendor目錄。從那裏,您可以在vendor/package-b中進行更改並查看當前應用程序中反映的更改(package-a)。

如果您對package-b中的更改感到滿意,則可以關閉更改。您將在package-b的工作完成。

在部署package-a之前,您需要確保在composer.lock文件中引用的project-b的提交已被推送到遠程(您說的bitbucket)並且是最新的。

您甚至可能根本不需要單獨結賬project-b。做任何需要的工作裏面的project-a。 (只是一種可能性)


一兩件事,會讓你的生活更容易顯着的將是開始標記您包的版本。

與其追逐單獨的移動目標,開始思考你需要添加到package-b的功能,使package-a的新功能工作......添加該功能並釋放它。然後用package-a你的工作是「更新到package-b新版本,所以我可以使用很酷的新功能x

它會幫助你釋放過程,提高了功能規劃,一般做一個更清潔的經驗。

相關問題