簡體   English   中英

如何將Composer依賴關系從require-dev移到require?

[英]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 installcomposer 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM