wp-cli-bundle icon indicating copy to clipboard operation
wp-cli-bundle copied to clipboard

Consider removing package-command from the bundle

Open ju1ius opened this issue 10 months ago β€’ 5 comments

Given a wodpress project using composer to manage dependencies. Running composer require wp-cli/wp-cli-bundle results in the following dependency tree:

composer show --tree wp-cli/wp-cli-bundle
wp-cli/wp-cli-bundle v2.10.0
β”œβ”€β”€wp-cli/cache-command ^2
β”‚  └──wp-cli/wp-cli ^2.5
β”œβ”€β”€wp-cli/checksum-command ^2.1
β”‚  └──wp-cli/wp-cli ^2.5
β”œβ”€β”€wp-cli/config-command ^2.1
β”‚  β”œβ”€β”€wp-cli/wp-cli ^2.5
β”‚  └──wp-cli/wp-config-transformer ^1.2.1
β”œβ”€β”€wp-cli/core-command ^2.1
β”‚  β”œβ”€β”€composer/semver ^1.4 || ^2 || ^3
β”‚  └──wp-cli/wp-cli ^2.5.1
β”œβ”€β”€wp-cli/cron-command ^2
β”‚  └──wp-cli/wp-cli ^2.5
β”œβ”€β”€wp-cli/db-command ^2
β”‚  └──wp-cli/wp-cli ^2.5
β”œβ”€β”€wp-cli/embed-command ^2
β”‚  └──wp-cli/wp-cli ^2.5
β”œβ”€β”€wp-cli/entity-command ^2
β”‚  └──wp-cli/wp-cli ^2.10
β”œβ”€β”€wp-cli/eval-command ^2
β”‚  └──wp-cli/wp-cli ^2.5
β”œβ”€β”€wp-cli/export-command ^2
β”‚  β”œβ”€β”€nb/oxymel ~0.1.0
β”‚  └──wp-cli/wp-cli ^2.5
β”œβ”€β”€wp-cli/extension-command ^2.1
β”‚  β”œβ”€β”€composer/semver ^1.4 || ^2 || ^3
β”‚  └──wp-cli/wp-cli ^2.10
β”œβ”€β”€wp-cli/i18n-command ^2
β”‚  β”œβ”€β”€eftec/bladeone 3.52
β”‚  β”œβ”€β”€gettext/gettext ^4.8
β”‚  β”‚  β”œβ”€β”€gettext/languages ^2.3
β”‚  β”œβ”€β”€mck89/peast ^1.13.11
β”‚  └──wp-cli/wp-cli ^2.5
β”œβ”€β”€wp-cli/import-command ^2
β”‚  └──wp-cli/wp-cli ^2.5
β”œβ”€β”€wp-cli/language-command ^2
β”‚  └──wp-cli/wp-cli ^2.5
β”œβ”€β”€wp-cli/maintenance-mode-command ^2
β”‚  └──wp-cli/wp-cli ^2.5
β”œβ”€β”€wp-cli/media-command ^2
β”‚  └──wp-cli/wp-cli ^2.5
β”œβ”€β”€wp-cli/package-command ^2.1
β”‚  β”œβ”€β”€composer/composer ^1.10.23 || ^2.2.17
β”‚  β”‚  β”œβ”€β”€composer/ca-bundle ^1.0
β”‚  β”‚  β”œβ”€β”€composer/class-map-generator ^1.0
β”‚  β”‚  β”‚  β”œβ”€β”€composer/pcre ^2.1 || ^3.1
β”‚  β”‚  β”‚  └──symfony/finder ^4.4 || ^5.3 || ^6 || ^7
β”‚  β”‚  β”œβ”€β”€composer/metadata-minifier ^1.0
β”‚  β”‚  β”œβ”€β”€composer/pcre ^2.1 || ^3.1
β”‚  β”‚  β”œβ”€β”€composer/semver ^3.2.5
β”‚  β”‚  β”œβ”€β”€composer/spdx-licenses ^1.5.7
β”‚  β”‚  β”œβ”€β”€composer/xdebug-handler ^2.0.2 || ^3.0.3
β”‚  β”‚  β”‚  β”œβ”€β”€composer/pcre ^1 || ^2 || ^3
β”‚  β”‚  β”‚  └──psr/log ^1 || ^2 || ^3
β”‚  β”‚  β”œβ”€β”€justinrainbow/json-schema ^5.2.11
β”‚  β”‚  β”œβ”€β”€psr/log ^1.0 || ^2.0 || ^3.0
β”‚  β”‚  β”œβ”€β”€react/promise ^2.8 || ^3
β”‚  β”‚  β”œβ”€β”€seld/jsonlint ^1.4
β”‚  β”‚  β”œβ”€β”€seld/phar-utils ^1.2
β”‚  β”‚  β”œβ”€β”€seld/signal-handler ^2.0
β”‚  β”‚  β”œβ”€β”€symfony/console ^5.4.11 || ^6.0.11 || ^7
β”‚  β”‚  β”‚  β”œβ”€β”€symfony/polyfill-mbstring ~1.0
β”‚  β”‚  β”‚  β”œβ”€β”€symfony/service-contracts ^2.5|^3
β”‚  β”‚  β”‚  β”‚  └──psr/container ^1.1|^2.0
β”‚  β”‚  β”‚  └──symfony/string ^6.4|^7.0
β”‚  β”‚  β”‚     β”œβ”€β”€symfony/polyfill-ctype ~1.8
β”‚  β”‚  β”‚     β”œβ”€β”€symfony/polyfill-intl-grapheme ~1.0
β”‚  β”‚  β”‚     β”œβ”€β”€symfony/polyfill-intl-normalizer ~1.0
β”‚  β”‚  β”‚     └──symfony/polyfill-mbstring ~1.0
β”‚  β”‚  β”œβ”€β”€symfony/filesystem ^5.4 || ^6.0 || ^7
β”‚  β”‚  β”‚  β”œβ”€β”€symfony/polyfill-ctype ~1.8
β”‚  β”‚  β”‚  └──symfony/polyfill-mbstring ~1.8
β”‚  β”‚  β”œβ”€β”€symfony/finder ^5.4 || ^6.0 || ^7
β”‚  β”‚  β”œβ”€β”€symfony/polyfill-php73 ^1.24
β”‚  β”‚  β”œβ”€β”€symfony/polyfill-php80 ^1.24
β”‚  β”‚  β”œβ”€β”€symfony/polyfill-php81 ^1.24
β”‚  β”‚  └──symfony/process ^5.4 || ^6.0 || ^7
β”‚  └──wp-cli/wp-cli ^2.8
β”œβ”€β”€wp-cli/rewrite-command ^2
β”‚  └──wp-cli/wp-cli ^2.5
β”œβ”€β”€wp-cli/role-command ^2
β”‚  └──wp-cli/wp-cli ^2.5
β”œβ”€β”€wp-cli/scaffold-command ^2
β”‚  └──wp-cli/wp-cli ^2.5
β”œβ”€β”€wp-cli/search-replace-command ^2
β”‚  └──wp-cli/wp-cli ^2.5
β”œβ”€β”€wp-cli/server-command ^2
β”‚  └──wp-cli/wp-cli ^2.5
β”œβ”€β”€wp-cli/shell-command ^2
β”‚  └──wp-cli/wp-cli ^2.5
β”œβ”€β”€wp-cli/super-admin-command ^2
β”‚  └──wp-cli/wp-cli ^2.5
β”œβ”€β”€wp-cli/widget-command ^2
β”‚  └──wp-cli/wp-cli ^2.5
└──wp-cli/wp-cli ^2.10.0
   β”œβ”€β”€mustache/mustache ^2.14.1
   β”œβ”€β”€symfony/finder >2.7
   β”œβ”€β”€wp-cli/mustangostang-spyc ^0.6.3
   └──wp-cli/php-cli-tools ~0.11.2

That's 64 packages, 30 of which are wp-cli/* packages. Of the remaining 34, 20 are only required by the wp-cli/package-command whose sole dependency outside of wp-cli/wp-cli is... composer/composer :raised_eyebrow:

From its documentation, the purpose of wp-cli/package-command is to manage globally installed wp-cli commands.

Why would someone installing wp-cli-bundle inside a project need/want a command to manage global wp-cli packages? Moreover, since said packages are just composer packages, why can't they just be installed with composer?

IMO, running composer require some/package should not end up installing composer inside the project's vendor directory.

It seems to me that the package command should be moved in the suggests section of the bundle's composer.json, and only included by default in the phar release.

And even then I highly doubt the usefulness of this command, so maybe it should just be deprecated then removed like the package index.

As a side note, removing this command would remove the largest source of dependency conflicts (see wp-cli/wp-cli#5920, wp-cli/wp-cli#5916, #606, #558, #348, etc).

ju1ius avatar Mar 26 '24 07:03 ju1ius