【问题标题】:Why after creating a project with "composer create-project" the dependencies are not the latest available versions?为什么在使用“composer create-project”创建项目后,依赖项不是最新的可用版本?
【发布时间】:2020-01-04 22:00:09
【问题描述】:

由于某种原因,composer create-project 命令似乎提取了陈旧的依赖版本。

运行create-project后,如果我chdir创建文件夹并运行composer update,则下载较新的版本。

aherne@aherne-System-Product-Name:/var/www/html$ cd framework/ aherne@aherne-System-Product-Name:/var/www/html/framework$ 作曲家更新 使用包信息加载作曲家存储库 依赖项(包括 require-dev) 包操作:0 次安装, 12 次更新,0 次删除 - 更新 lucinda/request-validator (v1.0.4 => v1.0.8.1):下载 (100%)
- 更新 lucinda/国际化 (v2.0.2 => v2.0.5):下载 (100%)
- 更新 lucinda/view-language (v2.1.1 => v2.1.7):下载 (100%)
- 更新 lucinda/sql-data-access (v2.0.1 => v2.0.2):下载 (100%)
- 更新 lucinda/errors-mvc (v1.1.4 => v1.2.1.1):下载 (100%)
- 更新 lucinda/mvc (v2.0.8 => v2.1.3):下载 (100%)
- 更新 lucinda/security (v2.0.5 => v2.0.9):下载 (100%)
- 更新 lucinda/oauth2-client (v1.6.2 => v1.6.3):下载 (100%)
- 更新 lucinda/nosql-data-access (v2.0.3 => v2.0.4):下载 (100%)
- 更新 lucinda/logging (v2.0.3 => v2.0.5):下载 (100%)
- 更新 lucinda/http-caching (v2.0.1 => v2.0.3.2):下载 (100%)
- 更新 lucinda/framework-engine (v1.2.5 => v1.3.6): 下载 (100%) 写入锁定文件 生成自动加载文件

为什么composer create-project 不首先下载最新的依赖版本?

【问题讨论】:

    标签: php composer-php dependency-management


    【解决方案1】:

    因为做create-project基本上相当于克隆存储库,然后做composer install

    install 会下载composer.lock 中声明的依赖项,其中包括特定的版本声明。运行install 应该是安全的,并且只安装显式存储在存储库中的声明的依赖版本。

    另一方面,update 读取在composer.json 上声明的版本约束,下载符合这些约束的每个包的最新可用版本,然后然后更新composer.lock

    这种行为对于全新的安装来说是不安全的,因为不仅你的直接依赖会被更新,而且任何可以更新的依赖的依赖都会被更新,并且可能会意外引入兼容性问题。项目中的锁定文件表示已知良好状态,可用于安全地安装项目按预期工作。

    参考资料:

    【讨论】:

    • 对于 OP 来说值得注意的是,composer.lock 确保安装的版本每次都完全相同,并有助于确保一切正常运行。尽管在 composer.json 中定义了依赖关系,并且虽然更新将在定义的范围内满足这些依赖关系,但并非所有开发人员都 100% 可靠地遵循 SemVer 口头禅。长话短说:composer update 可能会潜入一个你不会预料到的重大变化。
    • 确实如此。当我提到install 应该是“安全的”时;这就是它的要点。也许我应该使用您的评论作为模板详细说明答案。谢谢。
    • 确实...我提交了锁定文件:) 我知道它是如何工作的,只是忘记了。无论如何,非常感谢您的回答,伙计们!问题已解决。
    猜你喜欢
    • 2016-07-23
    • 2020-08-14
    • 2019-11-16
    • 1970-01-01
    • 2018-01-21
    • 2015-04-21
    • 1970-01-01
    • 2020-07-17
    • 2018-06-02
    相关资源
    最近更新 更多