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

Ben*_*Ben 8 php git deployment composer-php

我和作曲家有问题.我在当地环境中使用git.我是唯一一个开发人员.

当我需要更多依赖项(或需要更改某些版本)时,我编辑composer.json并在composer install本地运行.

一切安好.

然后,当一切都在本地工作时,我提交我的更改(包括composer.jsoncomposer.lock)并推送到我的生产服务器.

一个后收到-脚本更新的来源和运行composer install在远程服务器上.

预期结果:

  • Composer应根据composer.lock文件安装新的依赖项.
  • 我应该感到高兴.

怎么了 :

  • 作曲家很生气:

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

  • Composer 删除所有依赖项.
  • 我的作品被打破了.
  • 我心脏病发作
  • 我必须通过ssh登录我的服务器并运行一个composer update以使工作正常,但我知道composer update在生产服务器上不建议使用a.

这是收发后作曲家部分的输出:

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
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么 ?

谢谢,本

Pᴇʜ*_*Pᴇʜ 5

这个警告

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

当你的md5sumcomposer.json与存储在的md5sum不同时发生composer.lock:

{
    "hash": "b15ed9405e8547867f74973ce8add172",
    "packages": [ ... ]
}
Run Code Online (Sandbox Code Playgroud)

确保你composer.jsoncomposer.lock你的当地人完全相同(比较他们的md5sums).我怀疑部署链中的某些内容未正确更新它们.

确保使用以下require命令在本地添加了依赖项:

composer require new/package ~2.5
Run Code Online (Sandbox Code Playgroud)

或者如果composer.json是手动编辑至少运行

composer update new/package
Run Code Online (Sandbox Code Playgroud)

之后,为每个额外添加的包,以确保它被composer.lock正确添加.

另一种方法:在生产中
运行composer update --lock.这将更新锁文件中的哈希值,但不会升级您的供应商.

然后运行composer install以安装您的供应商comoser.lock.