【问题标题】:composer outdated without install作曲家过时而没有安装
【发布时间】:2019-02-28 07:20:03
【问题描述】:

我想从一个项目中获取 composer.lock (&​​ .json),并运行一些测试以查看其中是否有过时的包。

composer outdated 似乎要求我先安装所有软件包, 但这有点矫枉过正,因为所有需要的信息都应该在 composer.lock 文件中。

  1. 安装后是否有可用的信息,但不能从锁定文件中获得?
  2. 是否可以在不运行composer install 的情况下找到过时的包?

更新 1

我以“foolz/sphinxql-query-builder”作为一个项目的例子。

  • composer.json 中有一个
    require['foolz/sphinxql-query-builder'] = '^1.0'
  • composer.lock 中有一个
    packages[] = {name: foolz/sphinxql-query-builder, version: '1.0.2', ...}
  • ~/.cache/composer/repo/https---packagist.org/p-provider-2018-04.json 中有一个providers['foolz/sphinxql-query-builder']->sha256
  • ~/.cache/composer/repo/https---packagist.org/provider-foolz\$sphinxql-query-builder.json 中有一个
    packages['foolz/sphinxql-query-builder']->$version
  • 我可以从那个文件运行
    array_keys((array) $json->packages->{'foolz/sphinxql-query-builder'})
    获取可用版本的列表。

    1. 那么如何获取最新的 'provider-foolz\$sphinxql-query-builder.json' 文件?

【问题讨论】:

    标签: composer-php


    【解决方案1】:
    1. Composer.lock 定义了你的包的确切版本,所以只有这个文件你不能定义是否可以将包升级到一个新的标签版本 例如, 在 composer.json 你有这个版本的包 "laravelium/sitemap": "^3.0",

    在作曲家锁中存在此信息

    { “名称”:“laravelium/站点地图”, “版本”:“v3.0.1”, “资源”: { “类型”:“git”, "url": "https://gitlab.com/Laravelium/Sitemap.git", “参考”:“b287ec4a6b47dcd63fd121199c05e059c479bc6f” }, “距离”:{ “类型”:“拉链”, "url": "https://gitlab.com/api/v4/projects/Laravelium%2FSitemap/repository/archive.zip?sha=b287ec4a6b47dcd63fd121199c05e059c479bc6f", “参考”:“b287ec4a6b47dcd63fd121199c05e059c479bc6f”, “沙萨姆”:“” }, “要求”: { “照亮/支持”:“5.7.*”, "php": ">=7.1.3" }, “需要开发”:{ “管弦乐队/测试台”:“3.7.*”, “phpunit/phpunit”:“~7.0” }, “类型”:“库”, “额外的”: { “拉拉维尔”:{ “提供者”:[ "Laravelium\\Sitemap\\SitemapServiceProvider" ] } }, “自动加载”:{ “psr-0”:{ “Laravelium\\Sitemap”:“src/” } }, "notification-url": "https://packagist.org/downloads/", “执照”: [ “麻省理工学院” ], “作者”:[ { "name": "柔门达米安诺夫", “电子邮件”:“roumen@damianoff.com”, "主页": "https://damianoff.com", “角色”:“开发者” } ], "description": "Laravel 的 Laravelium 站点地图包。", "主页": "https://laravelium.com", “关键词”:[ "网站地图", “发电机”, “谷歌新闻”, "html", “拉拉维尔”, “laravelium”, "php", “xml” ], “时间”:“2018-09-04T19:08:44+00:00” },

    注意,如果存在,您将安装版本 v3.{\d+} (>=3 &&

    1. composer show -l 返回包列表。红色包可以更新,绿色是最新版本。

    尽管如此,你还是需要继续composer install,因为只有这样你才能了解安装包的确切版本

    【讨论】:

    • 您粘贴的文件不是composer.json-文件。这是一个composer.lock 文件。 composer.lock 包含已安装的确切版本,否则 composer install 将无法在整个系统中始终如一地工作。来自存储库和锁定文件的信息应该足够了。
    • @Nasso 是的,谢谢,这是一个拼写错误,我的意思是,composer.lock 有这些信息
    • 您的评论指出“但在 composer json 中存在此信息”,以下文本是 composer.lock-file。 composer.lock-文件包含应安装的软件包的确切版本。这使您的最后一句话“尽管如此,您还是需要继续进行 composer install,因为只有这样您才能理解已安装软件包的确切版本”是错误的。你不需要composer install 知道确切的版本。 composer.lock-文件中安装的所有内容的确切版本。
    • Composer.json 包含符合 semver 规范的包信息。例如,您可以在 composer.json 中写入“laravelium/sitemap”:“^3.0”,这意味着您可以同时安装该库的 3.0 和 3.1 (getcomposer.org/doc/articles/versions.md#caret-version-range-) 之间的任何版本 composer.lock将包含您第一次执行 composer install/update 命令时的实际版本。在这种情况下,您可以拥有此范围之间的任何版本(根据 semver 的最新错误修复版本)
    猜你喜欢
    • 2020-06-13
    • 2018-10-03
    • 1970-01-01
    • 2014-10-28
    • 1970-01-01
    • 2015-08-05
    • 2018-10-21
    • 2021-08-07
    • 2013-12-25
    相关资源
    最近更新 更多