提问者:小点点

为什么composer会删除我对部署的依赖关系?


我对作曲家有意见。我在本地环境中使用git。我是唯一一个开发者。

当我需要更多的依赖项(或者需要更改某些版本)时,我编辑composer.json并在本地运行作曲家安装

一切都很好。

然后,当一切在本地工作时,我提交我的更改(包括composer.json和composer.lock),并推动我的正式服。

接收后脚本更新源,并在远程服务器上运行编写器安装

预期:

  • Composer应根据Composer安装新的依赖项。锁定文件
  • 我应该很高兴

发生了什么:

  • 作曲家很生气:

警告:锁文件不是最新的composer.json.您可能会得到过时的依赖项。运行更新以更新它们。

  • Composer删除所有依赖项

以下是post receive composer部分的输出:

composer install
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Warning: The lock file is not up to date with the latest changes in composer.json. You may be getting outdated dependencies. Run update to update them.
  - Removing guzzle/guzzle (v3.9.3)
  - Removing symfony/event-dispatcher (v2.7.1)
  - Removing geoip/geoip (v1.15)
  - Removing pimple/pimple (v3.0.0)
  - Removing cocur/slugify (1.1.x-dev)
  - Removing bentools/url (0.2)
  - Removing bentools/simplexmlextended (1.2.0)
Generating autoload files

我做错了什么?

谢谢,本


共2个答案

匿名用户

这一警告

警告:锁文件不是最新的composer.json中的最新更改,您可能会得到过时的依赖项,运行更新来更新它们。

编写器的md5sum。json与存储在编写器中的json不同。锁

{
    "hash": "b15ed9405e8547867f74973ce8add172",
    "packages": [ ... ]
}

确保您的composer.jsoncomposer.lock与本地的相同(比较它们的md5和)。我怀疑您的部署链中的某些东西没有正确更新它们。

请确保您在本地添加了依赖关系,使用要求命令:

composer require new/package ~2.5

或者如果编写器。已手动编辑json,至少运行一次

composer update new/package

之后,对于每个额外添加的包,确保它正确地添加到您的composer.lock

另一种方法:
在生产中运行编写器更新--lock。这将更新锁定文件中的哈希,但不会升级供应商。

然后运行composer install从您的comoser安装供应商。锁定

匿名用户

当我需要更多的依赖项(或者需要更改某些版本)时,我会编辑composer.json并在本地运行作曲家安装。

那是错误的。您可以编辑composer。json,然后必须运行composer update,或者让composer对json文件进行内部编辑,然后只运行composer require new/package(可选版本)。

无论哪种方式,您都应该使用一个更改的编写器。json编写器。锁定文件,将这两个文件都提交到存储库中,预期结果是锁定文件将包含正确版本的所有软件包,这些软件包应通过定期的composer安装运行安装到生产环境中。

请注意,您的工作流仍然非常危险。如果你推,Github就坏了,你怎么才能安装ZIP呢?