chr*_*ian 5 dependencies updates composer-php
如果我使用了静态版本号,是否可以通过一个命令将我的所有 Composer 依赖项更新到最新版本?我想保留静态版本号,但要更新它们。
谢谢,
2nd*_*boy 15
我曾经多次遇到这个问题,一直在寻找答案,但找不到答案。今天我花时间找到了一个处理大composer.json文件的好解决方案。
使用这两个命令更新所有包:
composer require $(composer show -s --format=json | jq '.requires | keys | map(.+" ") | add' -r)
Run Code Online (Sandbox Code Playgroud)
composer require --dev $(composer show -s --format=json | jq '.devRequires | keys | map(.+" ") | add' -r)
Run Code Online (Sandbox Code Playgroud)
首先,我找到了所有 Composer 包的列表选项(此处为示例wp-cli/wp-cli:
$ composer show -s
name : wp-cli/wp-cli
descrip. : WP-CLI framework
keywords : cli, wordpress
versions : * 2.7.x-dev
type : library
license : MIT License (MIT) (OSI approved) https://spdx.org/licenses/MIT.html#licenseText
homepage : https://wp-cli.org
source : [] a5336122dc45533215ece08745aead08af75d781
dist : [] a5336122dc45533215ece08745aead08af75d781
path :
names : wp-cli/wp-cli
support
issues : https://github.com/wp-cli/wp-cli/issues
source : https://github.com/wp-cli/wp-cli
docs : https://make.wordpress.org/cli/handbook/
autoload
psr-0
WP_CLI\ => php/
classmap
php/class-wp-cli.php, php/class-wp-cli-command.php
requires
php ^5.6 || ^7.0 || ^8.0
ext-curl *
mustache/mustache ^2.14.1
rmccue/requests ^1.8
symfony/finder >2.7
wp-cli/mustangostang-spyc ^0.6.3
wp-cli/php-cli-tools ~0.11.2
requires (dev)
roave/security-advisories dev-latest
wp-cli/db-command ^1.3 || ^2
wp-cli/entity-command ^1.2 || ^2
wp-cli/extension-command ^1.1 || ^2
wp-cli/package-command ^1 || ^2
wp-cli/wp-cli-tests ^3.1.6
suggests
ext-readline Include for a better --prompt implementation
ext-zip Needed to support extraction of ZIP archives when doing downloads or updates
Run Code Online (Sandbox Code Playgroud)
解析这个并不容易。但幸运的是,我们可以使用--format参数将其获取为 JSON:
$ composer show -s --format=json
{
"name": "wp-cli/wp-cli",
"description": "WP-CLI framework",
"keywords": [
"cli",
"wordpress"
],
"type": "library",
"homepage": "https://wp-cli.org",
"names": [
"wp-cli/wp-cli"
],
"versions": [
"2.7.x-dev"
],
"licenses": [
{
"name": "MIT License",
"osi": "MIT",
"url": "https://spdx.org/licenses/MIT.html#licenseText"
}
],
"source": {
"type": "",
"url": "",
"reference": "a5336122dc45533215ece08745aead08af75d781"
},
"dist": {
"type": "",
"url": "",
"reference": "a5336122dc45533215ece08745aead08af75d781"
},
"suggests": {
"ext-readline": "Include for a better --prompt implementation",
"ext-zip": "Needed to support extraction of ZIP archives when doing downloads or updates"
},
"support": {
"issues": "https://github.com/wp-cli/wp-cli/issues",
"source": "https://github.com/wp-cli/wp-cli",
"docs": "https://make.wordpress.org/cli/handbook/"
},
"autoload": {
"psr-0": {
"WP_CLI\\": "php/"
},
"classmap": [
"php/class-wp-cli.php",
"php/class-wp-cli-command.php"
]
},
"requires": {
"php": "^5.6 || ^7.0 || ^8.0",
"ext-curl": "*",
"mustache/mustache": "^2.14.1",
"rmccue/requests": "^1.8",
"symfony/finder": ">2.7",
"wp-cli/mustangostang-spyc": "^0.6.3",
"wp-cli/php-cli-tools": "~0.11.2"
},
"devRequires": {
"roave/security-advisories": "dev-latest",
"wp-cli/db-command": "^1.3 || ^2",
"wp-cli/entity-command": "^1.2 || ^2",
"wp-cli/extension-command": "^1.1 || ^2",
"wp-cli/package-command": "^1 || ^2",
"wp-cli/wp-cli-tests": "^3.1.6"
}
}
Run Code Online (Sandbox Code Playgroud)
现在我们需要解析 JSON,在我的系统上我有jq可用的命令,它允许您解析 JSON。我找到了一个很好的备忘单,其中包含一些有用的论点,并且能够找到关键requires:
$ composer show -s --format=json | jq '.requires'
{
"php": "^5.6 || ^7.0 || ^8.0",
"ext-curl": "*",
"mustache/mustache": "^2.14.1",
"rmccue/requests": "^1.8",
"symfony/finder": ">2.7",
"wp-cli/mustangostang-spyc": "^0.6.3",
"wp-cli/php-cli-tools": "~0.11.2"
}
Run Code Online (Sandbox Code Playgroud)
现在我们只需要获取对象的键:
$ composer show -s --format=json | jq '.requires | keys'
[
"ext-curl",
"mustache/mustache",
"php",
"rmccue/requests",
"symfony/finder",
"wp-cli/mustangostang-spyc",
"wp-cli/php-cli-tools"
]
Run Code Online (Sandbox Code Playgroud)
然后我们想要将所有值连接到一个大字符串中,我们可以这样做add:
$ composer show -s --format=json | jq '.requires | keys | add'
"ext-curlmustache/mustachephprmccue/requestssymfony/finderwp-cli/mustangostang-spycwp-cli/php-cli-tools"
Run Code Online (Sandbox Code Playgroud)
哎呀!我们需要一些空白。让我们map在使用之前添加它们add:
$ composer show -s --format=json | jq '.requires | keys | map(.+" ") | add'
"ext-curl mustache/mustache php rmccue/requests symfony/finder wp-cli/mustangostang-spyc wp-cli/php-cli-tools "
Run Code Online (Sandbox Code Playgroud)
太好了!但是我们怎样才能摆脱双引号呢?我们使用这个-r论点:
$ composer show -s --format=json | jq '.requires | keys | map(.+" ") | add' -r
ext-curl mustache/mustache php rmccue/requests symfony/finder wp-cli/mustangostang-spyc wp-cli/php-cli-tools
Run Code Online (Sandbox Code Playgroud)
是的!现在我们有了我们需要的东西。让我们将其放入子命令中并更新所有包:
$ composer require $(composer show -s --format=json | jq '.requires | keys | map(.+" ") | add' -r)
Using version * for ext-curl
Info from https://repo.packagist.org: #StandWithUkraine
Using version ^2.14 for mustache/mustache
Using version ^7.4 for php
Using version ^2.0 for rmccue/requests
Using version ^5.4 for symfony/finder
Using version ^0.6.3 for wp-cli/mustangostang-spyc
Using version ^0.11.15 for wp-cli/php-cli-tools
./composer.json has been updated
...
Run Code Online (Sandbox Code Playgroud)
那个!如果您的项目也有开发要求,则需要运行第二个命令来更新它们,方法是添加--dev到第一个命令并在过滤器中使用devRequires而不是:requires
$ composer require --dev $(composer show -s --format=json | jq '.devRequires | keys | map(.+" ") | add' -r)
Using version dev-latest for roave/security-advisories
Using version ^2.0 for wp-cli/db-command
Using version ^2.2 for wp-cli/entity-command
Using version ^2.1 for wp-cli/extension-command
Using version ^2.2 for wp-cli/package-command
Using version ^3.1 for wp-cli/wp-cli-tests
./composer.json has been updated
...
Run Code Online (Sandbox Code Playgroud)
我希望这可以帮助每个经常想要更新所有软件包的人
如果我使用了静态版本号,是否可以通过一个命令将我的所有 Composer 依赖项更新到最新版本?
简而言之:不,没有命令可以自动提升到 中给定静态版本的最新版本composer.json。
你得到的最接近的是composer outdated -D(root package),它显示了根包上过时的包列表,包括package、current version和latest version。下一步是手动将最新版本号传输到 composer.json 文件中。
如果您想使用 PHP 脚本自动执行此操作,那么以下几行应该可以帮助您入门。该脚本将所有版本号提升到最新,而不仅仅是静态版本号。这意味着,如果您只想提高静态数字,您可能需要为静态数字添加额外的检查。
该脚本需要composer outdated --direct > outdated.txt在 CLI上运行以生成输入文件(或调整脚本以使用 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));
Run Code Online (Sandbox Code Playgroud)
现在有人使用 grep/awk/sed 发布了一个漂亮的单行...对吗?:)
composer.jsoncomposer require [package name]您之前的列表中的内容例子
假设您的作曲家拥有phpunit/phpunit所有其他包。你的命令之一将是
composer require phpunit/phpunit
Run Code Online (Sandbox Code Playgroud)
这将自动更新您的composer.json. 在极少数情况下,如果您有软件包的开发版本,它可能会将版本降级到最新的稳定版本。
| 归档时间: |
|
| 查看次数: |
6771 次 |
| 最近记录: |