尽管有静态版本号,但将 Composer 依赖项更新到最新版本?
Update Composer dependencies to latest despite static version numbers?
如果我使用的是静态版本号,是否可以通过一个命令将我所有的 Composer 依赖项更新到最新版本?我想保留静态版本号,但要更新它们。
谢谢,
你不应该完全想要这个(在大多数情况下)。
一般来说,要更新所有包,您需要更多信息:所有包的版本限制(如果我们仍在使用 3.x,我们应该使用版本 5,它会阻止 BC 吗?),某些软件包可能有特殊的稳定性要求(@beta
,等等)。
所以,composer.lock
和 composer update
就是为了这个目的。使用 composer.json
定义约束(版本范围、稳定性级别)和 composer.lock
到 "freeze" 您的部门。
如果你使用上面的方案,你可以简单地用 composer install
安装 "frozen" deps(它总是使用 composer.lock
的版本)或者用 composer update
更新到最新版本(将更新 composer.lock
)。
Is it possible to update all my Composer dependencies to the latest versions via one command, if I have used static version numbers?
简而言之:不,在 composer.json
中还没有自动升级到给定静态版本的最新版本的命令。
最接近的是composer outdated -D
(根包),它显示了根包上的过时包列表,包括package
、current version
和latest version
.下一步是将最新版本号手动传输到 composer.json 文件中。
如果您想使用 PHP 脚本自动执行此操作,那么以下几行应该可以帮助您入门。该脚本将所有版本号提升到最新版本,而不仅仅是静态版本。这意味着,如果您只想提高静态数字,您可能需要添加额外的检查。
脚本需要在 CLI 上 运行 composer outdated --direct > outdated.txt
来生成输入文件(或调整脚本以使用 exec/system/passthru/whatever 并直接处理返回的输出)。
!!请小心并在独立 composer.json
或受版本控制的文件上进行测试,您可以在其中轻松恢复任何不需要的修改。
update-composer-json-version-numbers-to-latest-version.php
或 uv.php
:
<?php
/**
* Raise/update static version numbers in composer.json.
*
* Run on the CLI: "composer outdated --direct > outdated.txt"
*/
$composerJson = json_decode(file_get_contents('composer.json'), true);
$listOfOutdatedPackages = file('outdated.txt');
foreach($listOfOutdatedPackages as $line) {
$regexp = '/(?P<package>[\w]+\/[\w]+).*(?P<currentVersion>\d.\d.\d).*(?P<latestVersion>\d.\d.\d)/';
preg_match($regexp, $line, $matches);
$matches = array_filter($matches, 'is_string', ARRAY_FILTER_USE_KEY);
if(isset($matches['package']))
{
$package = $matches['package'];
if(isset($composerJson['require'][$package]))
{
$currentVersion = $composerJson['require'][$package];
echo sprintf('Updating %s from %s to %s', $package, $currentVersion, $matches['latestVersion']);
$composerJson['require'][$package] = $matches['latestVersion'];
}
if(isset($composerJson['require-dev'][$package]))
{
$currentVersion = $composerJson['require-dev'][$package];
echo sprintf('Updating %s from %s to %s', $package, $currentVersion, $matches['latestVersion']);
$composerJson['require-dev'][$package] = $matches['latestVersion'];
}
}
}
file_put_contents('composer.json', json_encode($composerJson, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
现在有人使用 grep/awk/sed 发布了一个漂亮的单行...对吗? :)
- 列出您
composer.json
中的所有包
- 使用您之前列表中的
composer require [package name]
- 运行 每个命令,您可以通过自动或手动方式执行
例子
假设您的作曲家有 phpunit/phpunit
软件包等。您的命令之一是
composer require phpunit/phpunit
这将自动更新您 composer.json
中的版本。在极少数情况下,如果您有软件包的开发版本,它可能会将版本降级到最新的稳定版。
如果我使用的是静态版本号,是否可以通过一个命令将我所有的 Composer 依赖项更新到最新版本?我想保留静态版本号,但要更新它们。
谢谢,
你不应该完全想要这个(在大多数情况下)。
一般来说,要更新所有包,您需要更多信息:所有包的版本限制(如果我们仍在使用 3.x,我们应该使用版本 5,它会阻止 BC 吗?),某些软件包可能有特殊的稳定性要求(@beta
,等等)。
所以,composer.lock
和 composer update
就是为了这个目的。使用 composer.json
定义约束(版本范围、稳定性级别)和 composer.lock
到 "freeze" 您的部门。
如果你使用上面的方案,你可以简单地用 composer install
安装 "frozen" deps(它总是使用 composer.lock
的版本)或者用 composer update
更新到最新版本(将更新 composer.lock
)。
Is it possible to update all my Composer dependencies to the latest versions via one command, if I have used static version numbers?
简而言之:不,在 composer.json
中还没有自动升级到给定静态版本的最新版本的命令。
最接近的是composer outdated -D
(根包),它显示了根包上的过时包列表,包括package
、current version
和latest version
.下一步是将最新版本号手动传输到 composer.json 文件中。
如果您想使用 PHP 脚本自动执行此操作,那么以下几行应该可以帮助您入门。该脚本将所有版本号提升到最新版本,而不仅仅是静态版本。这意味着,如果您只想提高静态数字,您可能需要添加额外的检查。
脚本需要在 CLI 上 运行 composer outdated --direct > outdated.txt
来生成输入文件(或调整脚本以使用 exec/system/passthru/whatever 并直接处理返回的输出)。
!!请小心并在独立 composer.json
或受版本控制的文件上进行测试,您可以在其中轻松恢复任何不需要的修改。
update-composer-json-version-numbers-to-latest-version.php
或 uv.php
:
<?php
/**
* Raise/update static version numbers in composer.json.
*
* Run on the CLI: "composer outdated --direct > outdated.txt"
*/
$composerJson = json_decode(file_get_contents('composer.json'), true);
$listOfOutdatedPackages = file('outdated.txt');
foreach($listOfOutdatedPackages as $line) {
$regexp = '/(?P<package>[\w]+\/[\w]+).*(?P<currentVersion>\d.\d.\d).*(?P<latestVersion>\d.\d.\d)/';
preg_match($regexp, $line, $matches);
$matches = array_filter($matches, 'is_string', ARRAY_FILTER_USE_KEY);
if(isset($matches['package']))
{
$package = $matches['package'];
if(isset($composerJson['require'][$package]))
{
$currentVersion = $composerJson['require'][$package];
echo sprintf('Updating %s from %s to %s', $package, $currentVersion, $matches['latestVersion']);
$composerJson['require'][$package] = $matches['latestVersion'];
}
if(isset($composerJson['require-dev'][$package]))
{
$currentVersion = $composerJson['require-dev'][$package];
echo sprintf('Updating %s from %s to %s', $package, $currentVersion, $matches['latestVersion']);
$composerJson['require-dev'][$package] = $matches['latestVersion'];
}
}
}
file_put_contents('composer.json', json_encode($composerJson, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
现在有人使用 grep/awk/sed 发布了一个漂亮的单行...对吗? :)
- 列出您
composer.json
中的所有包
- 使用您之前列表中的
composer require [package name]
- 运行 每个命令,您可以通过自动或手动方式执行
例子
假设您的作曲家有 phpunit/phpunit
软件包等。您的命令之一是
composer require phpunit/phpunit
这将自动更新您 composer.json
中的版本。在极少数情况下,如果您有软件包的开发版本,它可能会将版本降级到最新的稳定版。