ergebnis / composer-normalize
Provides a composer plugin for normalizing composer.json.
Installs: 31 837 397
Dependents: 1 970
Suggesters: 6
Security: 0
Stars: 1 094
Watchers: 13
Forks: 36
Open Issues: 8
Type:composer-plugin
pkg:composer/ergebnis/composer-normalize
Requires
- php: ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0
- composer-plugin-api: ^2.0.0
- ext-json: *
- ergebnis/json: ^1.4.0
- ergebnis/json-normalizer: ^4.9.0
- ergebnis/json-printer: ^3.7.0
- justinrainbow/json-schema: ^5.2.12 || ^6.0.0
- localheinz/diff: ^1.3.0
Requires (Dev)
- composer/composer: ^2.8.3
- ergebnis/license: ^2.7.0
- ergebnis/php-cs-fixer-config: ^6.53.0
- ergebnis/phpstan-rules: ^2.11.0
- ergebnis/phpunit-slow-test-detector: ^2.20.0
- fakerphp/faker: ^1.24.1
- infection/infection: ~0.26.6
- phpstan/extension-installer: ^1.4.3
- phpstan/phpstan: ^2.1.17
- phpstan/phpstan-deprecation-rules: ^2.0.3
- phpstan/phpstan-phpunit: ^2.0.7
- phpstan/phpstan-strict-rules: ^2.0.6
- phpunit/phpunit: ^9.6.20
- rector/rector: ^2.1.4
- symfony/filesystem: ^5.4.41
- dev-main / 2.49.x-dev
- 2.48.2
- 2.48.1
- 2.48.0
- 2.47.0
- 2.46.0
- 2.45.0
- 2.44.0
- 2.43.0
- 2.42.0
- 2.41.1
- 2.41.0
- 2.40.0
- 2.39.0
- 2.38.0
- 2.37.0
- 2.36.0
- 2.35.0
- 2.34.0
- 2.33.0
- 2.32.0
- 2.31.0
- 2.30.2
- 2.30.1
- 2.30.0
- 2.29.0
- 2.28.3
- 2.28.2
- 2.28.1
- 2.28.0
- 2.27.0
- 2.26.0
- 2.25.2
- 2.25.1
- 2.25.0
- 2.24.1
- 2.24.0
- 2.23.1
- 2.23.0
- 2.22.0
- 2.21.0
- 2.20.0
- 2.19.0
- 2.18.0
- 2.17.0
- 2.16.0
- 2.15.0
- 2.14.0
- 2.13.4
- 2.13.3
- 2.13.2
- 2.13.1
- 2.13.0
- 2.12.2
- 2.12.1
- 2.12.0
- 2.11.0
- 2.10.0
- 2.9.1
- 2.9.0
- 2.8.2
- 2.8.1
- 2.8.0
- 2.7.1
- 2.7.0
- 2.6.1
- 2.6.0
- 2.5.2
- 2.5.1
- 2.5.0
- 2.4.0
- 2.3.2
- 2.3.1
- 2.3.0
- 2.2.4
- 2.2.3
- 2.2.2
- 2.2.1
- 2.2.0
- 2.1.2
- 2.1.1
- 2.1.0
- 2.0.2
- 2.0.1
- 2.0.0
- 1.3.1
- 1.3.0
- 1.2.0
- 1.1.4
- 1.1.3
- 1.1.2
- 1.1.1
- 1.1.0
- 1.0.0
- 0.9.0
- 0.8.0
- 0.7.0
- 0.6.0
- 0.5.0
- 0.4.1
- 0.4.0
- 0.3.0
- 0.2.0
- 0.1.0
- dev-dependabot/github_actions/stefanzweifel/git-auto-commit-action-7.0.0
- dev-dependabot/composer/phpstan/phpstan-2.1.31
- dev-dependabot/composer/rector/rector-2.2.3
- dev-dependabot/github_actions/shivammathur/setup-php-2.35.5
- dev-feature/schema
This package is auto-updated.
Last update: 2025-10-13 22:04:05 UTC
README
This project provides a composer plugin for normalizing composer.json.
Why
When it comes to formatting composer.json, you have the following options:
- you can format it manually (and request changes when contributors format it differently)
- you can stop caring
- or you can use
ergebnis/composer-normalize
ergebnis/composer-normalize normalizes composer.json, so you don't have to.
💡 If you want to find out more, take a look at the examples and read this blog post.
Installation
Composer
Run
composer require --dev ergebnis/composer-normalize
to install ergebnis/composer-normalize as a composer plugin.
Run
composer config allow-plugins.ergebnis/composer-normalize true
to allow ergebnis/composer-normalize to run as a composer plugin.
💡 The allow-plugins has been added to composer/composer to add an extra layer of security.
For reference, see
Phar
Head over to http://github.com/ergebnis/composer-normalize/releases/latest and download the latest composer-normalize.phar.
Run
chmod +x composer-normalize.phar
to make the downloaded composer-normalize.phar executable.
Phive
Run
phive install ergebnis/composer-normalize
to install ergebnis/composer-normalize with PHIVE.
Usage
Composer
Run
composer normalize
to normalize composer.json in the working directory.
Phar
Run
./composer-normalize.phar
to normalize composer.json in the working directory.
Phive
Run
./tools/composer-normalize
to normalize composer.json in the working directory.
Details
The NormalizeCommand provided by the NormalizePlugin within this package will
- determine whether a
composer.jsonexists - determine whether a
composer.lockexists, and if so, whether it is up to date (unless the--no-check-lockoption is used) - use
Ergebnis\Json\Normalizer\Vendor\Composer\ComposerJsonNormalizerto normalize the content ofcomposer.json - format the normalized content (either as sniffed, or as specified using the
--indent-sizeand--indent-styleoptions) - write the normalized and formatted content of
composer.jsonback to the file - update the hash in
composer.lockif it exists and if an update is necessary
Arguments
file: Path tocomposer.jsonfile (optional, defaults tocomposer.jsonin working directory)
Options
--diff: Show the results of normalizing--dry-run: Show the results of normalizing, but do not modify any files--indent-size: Indent size (an integer greater than 0); should be used with the--indent-styleoption--indent-style: Indent style (one of "space", "tab"); should be used with the--indent-sizeoption--no-check-lock: Do not check if lock file is up to date--no-update-lock: Do not update lock file if it exists
As an alternative to specifying the --indent-size and --indent-style options, you can also use composer extra to configure these options in composer.json:
{
"extra": {
"composer-normalize": {
"indent-size": 2,
"indent-style": "space"
}
}
}
💡 The configuration provided in composer extra always overrides the configuration provided via command line options.
Continuous Integration
If you want to run this in continuous integration services, use the --dry-run option.
composer normalize --dry-run
In case composer.json is not normalized (or composer.lock is not up-to-date), the command will
fail with an exit code of 1 and show a diff.
Examples
pestphp/pest
Running
composer normalize
against https://github.com/pestphp/pest/blob/v0.3.19/composer.json yields the following diff:
diff --git a/composer.json b/composer.json index 1cfbf1e..204f20f 100644 --- a/composer.json +++ b/composer.json @@ -25,6 +25,32 @@ "pestphp/pest-plugin-init": "^0.3", "phpunit/phpunit": ">= 9.3.7 <= 9.5.0" }, + "require-dev": { + "illuminate/console": "^7.16.1", + "illuminate/support": "^7.16.1", + "laravel/dusk": "^6.9.1", + "mockery/mockery": "^1.4.1", + "pestphp/pest-dev-tools": "dev-master" + }, + "config": { + "preferred-install": "dist", + "sort-packages": true + }, + "extra": { + "branch-alias": { + "dev-master": "0.3.x-dev" + }, + "laravel": { + "providers": [ + "Pest\\Laravel\\PestServiceProvider" + ] + }, + "pest": { + "plugins": [ + "Pest\\Plugins\\Version" + ] + } + }, "autoload": { "psr-4": { "Pest\\": "src/" @@ -42,49 +68,23 @@ "tests/Autoload.php" ] }, - "require-dev": { - "illuminate/console": "^7.16.1", - "illuminate/support": "^7.16.1", - "laravel/dusk": "^6.9.1", - "mockery/mockery": "^1.4.1", - "pestphp/pest-dev-tools": "dev-master" - }, "minimum-stability": "dev", "prefer-stable": true, - "config": { - "sort-packages": true, - "preferred-install": "dist" - }, "bin": [ "bin/pest" ], "scripts": { "lint": "php-cs-fixer fix -v", - "test:lint": "php-cs-fixer fix -v --dry-run", - "test:types": "phpstan analyse --ansi --memory-limit=0", - "test:unit": "php bin/pest --colors=always --exclude-group=integration", - "test:integration": "php bin/pest --colors=always --group=integration", - "update:snapshots": "REBUILD_SNAPSHOTS=true php bin/pest --colors=always", "test": [ "@test:lint", "@test:types", "@test:unit", "@test:integration" - ] - }, - "extra": { - "branch-alias": { - "dev-master": "0.3.x-dev" - }, - "pest": { - "plugins": [ - "Pest\\Plugins\\Version" - ] - }, - "laravel": { - "providers": [ - "Pest\\Laravel\\PestServiceProvider" - ] - } + ], + "test:integration": "php bin/pest --colors=always --group=integration", + "test:lint": "php-cs-fixer fix -v --dry-run", + "test:types": "phpstan analyse --ansi --memory-limit=0", + "test:unit": "php bin/pest --colors=always --exclude-group=integration", + "update:snapshots": "REBUILD_SNAPSHOTS=true php bin/pest --colors=always" } }
phpspec/phpspec
Running
composer normalize
against https://github.com/phpspec/phpspec/blob/7.0.1/composer.json yields the following diff:
diff --git a/composer.json b/composer.json index 90150a37..276a2ecd 100644 --- a/composer.json +++ b/composer.json @@ -1,72 +1,73 @@ { - "name": "phpspec/phpspec", - "description": "Specification-oriented BDD framework for PHP 7.1+", - "keywords": ["BDD", "SpecBDD", "TDD", "spec", "specification", "tests", "testing"], - "homepage": "http://phpspec.net/", - "type": "library", - "license": "MIT", - "authors": [ + "name": "phpspec/phpspec", + "type": "library", + "description": "Specification-oriented BDD framework for PHP 7.1+", + "keywords": [ + "BDD", + "SpecBDD", + "TDD", + "spec", + "specification", + "tests", + "testing" + ], + "homepage": "http://phpspec.net/", + "license": "MIT", + "authors": [ { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" }, { - "name": "Marcello Duarte", - "homepage": "http://marcelloduarte.net/" + "name": "Marcello Duarte", + "homepage": "http://marcelloduarte.net/" }, { - "name": "Ciaran McNulty", - "homepage": "https://ciaranmcnulty.com/" + "name": "Ciaran McNulty", + "homepage": "https://ciaranmcnulty.com/" } ], - "require": { - "php": "^7.3 || 8.0.*", - "phpspec/prophecy": "^1.9", - "phpspec/php-diff": "^1.0.0", - "sebastian/exporter": "^3.0 || ^4.0", - "symfony/console": "^3.4 || ^4.4 || ^5.0", + "php": "^7.3 || 8.0.*", + "ext-tokenizer": "*", + "doctrine/instantiator": "^1.0.5", + "phpspec/php-diff": "^1.0.0", + "phpspec/prophecy": "^1.9", + "sebastian/exporter": "^3.0 || ^4.0", + "symfony/console": "^3.4 || ^4.4 || ^5.0", "symfony/event-dispatcher": "^3.4 || ^4.4 || ^5.0", - "symfony/process": "^3.4 || ^4.4 || ^5.0", - "symfony/finder": "^3.4 || ^4.4 || ^5.0", - "symfony/yaml": "^3.4 || ^4.4 || ^5.0", - "doctrine/instantiator": "^1.0.5", - "ext-tokenizer": "*" + "symfony/finder": "^3.4 || ^4.4 || ^5.0", + "symfony/process": "^3.4 || ^4.4 || ^5.0", + "symfony/yaml": "^3.4 || ^4.4 || ^5.0" + }, + "conflict": { + "sebastian/comparator": "<1.2.4" }, - "require-dev": { - "behat/behat": "^3.3", - "symfony/filesystem": "^3.4 || ^4.0 || ^5.0", - "phpunit/phpunit": "^8.0 || ^9.0" + "behat/behat": "^3.3", + "phpunit/phpunit": "^8.0 || ^9.0", + "symfony/filesystem": "^3.4 || ^4.0 || ^5.0" }, - "suggest": { "phpspec/nyan-formatters": "Adds Nyan formatters" }, - - "conflict": { - "sebastian/comparator" : "<1.2.4" + "extra": { + "branch-alias": { + "dev-main": "7.0.x-dev" + } }, - "autoload": { "psr-0": { "PhpSpec": "src/" } }, - "autoload-dev": { "psr-0": { "spec\\PhpSpec": "." } }, - - "bin": ["bin/phpspec"], - - "extra": { - "branch-alias": { - "dev-main": "7.0.x-dev" - } - } - + "bin": [ + "bin/phpspec" + ] }
phpunit/phpunit
Running
composer normalize
against https://github.com/sebastianbergmann/phpunit/blob/9.5.0/composer.json yields the following diff:
diff --git a/composer.json b/composer.json index fd6461fc3..23c3a3596 100644 --- a/composer.json +++ b/composer.json @@ -1,7 +1,7 @@ { "name": "phpunit/phpunit", - "description": "The PHP Unit Testing framework.", "type": "library", + "description": "The PHP Unit Testing framework.", "keywords": [ "phpunit", "xunit", @@ -16,10 +16,6 @@ "role": "lead" } ], - "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues" - }, - "prefer-stable": true, "require": { "php": ">=7.3", "ext-dom": "*", @@ -54,20 +50,22 @@ "ext-PDO": "*", "phpspec/prophecy-phpunit": "^2.0.1" }, + "suggest": { + "ext-soap": "*", + "ext-xdebug": "*" + }, "config": { + "optimize-autoloader": true, "platform": { "php": "7.3.0" }, - "optimize-autoloader": true, "sort-packages": true }, - "suggest": { - "ext-soap": "*", - "ext-xdebug": "*" + "extra": { + "branch-alias": { + "dev-master": "9.5-dev" + } }, - "bin": [ - "phpunit" - ], "autoload": { "classmap": [ "src/" @@ -86,9 +84,11 @@ "tests/_files/NamespaceCoveredFunction.php" ] }, - "extra": { - "branch-alias": { - "dev-master": "9.5-dev" - } + "prefer-stable": true, + "bin": [ + "phpunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues" } }
Changelog
The maintainers of this project record notable changes to this project in a changelog.
Contributing
The maintainers of this project suggest following the contribution guide.
Code of Conduct
The maintainers of this project ask contributors to follow the code of conduct.
General Support Policy
The maintainers of this project provide limited support.
You can support the maintenance of this project by sponsoring @ergebnis.
PHP Version Support Policy
This project supports PHP versions with active and security support.
The maintainers of this project add support for a PHP version following its initial release and drop support for a PHP version when it has reached the end of security support.
Security Policy
This project has a security policy.
License
This project uses the MIT license.
Social
Follow @localheinz and @ergebnis on Twitter.
