![](/img/trans.png)
[英]How do I move some dependecies from require to require-dev with composer?
[英]How to move composer dependency from require-dev to require?
我的git repo服務器上有兩個項目。 第一個是我編寫的庫,我們稱它為foo/lib-bar
。 第二個是使用該庫foo/app-bar
。 當前該庫處於開發版本,因此該庫的composer.json
文件如下所示:
{
"name": "foo/lib-bar",
"description": "Bar library",
"version": "1.0.0-dev",
"type": "library",
"require": {
"php": ">=5.4",
"ext-posix": "*"
}
}
該應用程序使用此庫,因此它包含必要的要求:
{
"name": "foo/app-bar",
"description": "Bar application",
"version": "0.5.0-dev",
"type": "application",
"repositories": [
{
"type": "vcs",
"url": "ssh://user@git.example.com/lib-foo"
}
],
"require-dev": {
"foo/lib-bar": ">=1.0.0-dev",
},
"require": {
"php": ">=5.5.3"
}
}
至此一切順利: composer install
和composer update
均按預期運行,安裝依賴項,我可以在vendor/
現在, 文檔說
require#
Lists packages required by this package. The package will not be installed unless those requirements can be met.
對於導致問題的步驟 :
好的,我的庫已准備就緒,可以部署並退出開發階段。 我的應用程序的生產版本中也恰巧需要它。 我從庫的composer.json
文件中刪除了dev
后綴,提交並推送了該文件,並准備更新該應用程序。
使用應用程序的composer.json
我將庫依賴關系從require-dev
部分移至require
並刪除了dev
后綴(所有內容均已復制粘貼,因此沒有錯字-我已經檢查並再次檢查):
"require-dev": {},
"require": {
"php": ">=5.5.3",
"foo/lib-bar": ">=1.0.0"
}
現在,我運行composer update
並且得到:
$ composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.
Problem 1
- Installation request for foo/lib-bar >=1.0.0 -> satisfiable by foo/lib-bar[dev-master].
- Removal request for foo/lib-bar == 9999999-dev
我以為找不到新版本,所以我手動刪除了舊庫:
$ rm composer.lock
$ rm -rf vendor/foo/
並嘗試從頭開始安裝
$ composer install
但這一次它給了我:
Your requirements could not be resolved to an installable set of packages.
Problem 1
- The requested package foo/lib-bar could not be found in any version, there may be a typo in the package name.
因此,似乎require-dev
可以工作,但require
不能 。 關於這里可能出了什么問題的任何建議?
require-dev
不是開發依賴項的地方。 它用於僅在開發中使用的軟件(例如PHPUnit,Mockery等),或用於自身有用的依賴項,但是在這種情況下,僅用於開發(例如軟件包所涉及的服務的客戶端庫)(在測試場景中提出一些實際要求)。
因此,您的庫從一開始就不應該是“ require-dev”。
另一件事是:如果使用適當的分支和標記 ,則Composer將扣除版本,即,將檢測到您存儲庫中名為“ 1.0.x”的分支是所有1.0版本的開發分支,並且可能對這些版本有任何要求。如果您通過設置"minimum-stability": "dev"
(這將允許所有軟件的開發版本,而不是意想不到的)來設置開發版本,或者當您需要版本"1.0.0@dev"
時您的軟件。
當前可能會破壞您的作曲者設置的一件事是,您在庫composer.json中明確提到了一個版本,這是一個開發版本。 您是否已刪除該版本指示器? 您應該刪除它,因為如果Composer可以從存儲庫中的標記中檢測版本,則生活會更輕松,而不是通過在composer.json中明確提及這些標記來實現。
最后,請確保使用Git時使用適當的版本標記提交 。 require
d版本應與git標簽版本相對應。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.