yoanm / composer-config-manager
command line to manage composer configuration file
Installs: 19
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 2
Forks: 0
Open Issues: 0
pkg:composer/yoanm/composer-config-manager
Requires
- php: >=5.5
- symfony/config: ^3.2
- symfony/console: ~3.0
- symfony/dependency-injection: ^3.2
- symfony/filesystem: ^3.2
- symfony/finder: ^3.2
- symfony/serializer: ^3.2
Requires (Dev)
- behat/behat: ~3.0
- phpunit/phpunit: ~4.0
- squizlabs/php_codesniffer: 2.*
- yoanm/behat-utils-extension: ^0.7.0
README
Command to manage composer configuration file
Install
composer global require yoanm/composer-config-manager
Add the following in your .bashrc file :
export PATH=~/.composer/vendor/bin:$PATH
How to
just type the following
composercm create "vendor/package-name" path/to/repository/directory [OPTIONS]
composercm update path/to/repository/directory [OPTIONS]
In case you launch the command from the repository directory, you can simply use
composercm create "vendor/package-name" [OPTIONS]
composercm update [OPTIONS]
- Type
composercm listto list all available command - Type
composercm help COMMAND_NAMEorcomposercm COMMAND_NAME -hto display help for a specific command
See below for more information regarding command line options
composercm updatecommand will take the current composer.json file and will applied given values
Create
- A
--templateoption is available, given values will be applied to the template - Values are appended in a default order
Update
- A
--templateoption is available, see below how templates are managed - Key order are kept from old configuration file. New one are appended in a default order
Templates
- Multiple template could be provided. Update workflow is the following
-
1 - Templates between them If more than one template is given,
- the first first one is updated with values from the second one
- resulting configuration is updated with third template
...
- resulting configuration is updated with X template
-
2 - Resulting configuration with existing one
- For update command only, in case at least a template was given
-
3 - Resulting configuration with command line values
- Could by skipped if only templates are used
-
Key order
- By default key order as the one defined in composer documentation website
- It's possible to use the
--templateoption to define key order of final configuration For instance, defined a template file namekey_order.jsonwith following content :
{
"name": null,
"type": null,
"license": null,
"version": null,
"description": null,
"keywords": [],
"authors": {},
"provide": {},
"suggest": {},
"support": {},
"autoload": {},
"autoload-dev": {},
"require": {},
"require-dev": {},
"scripts": {}
}
Then use the following command :
composercm [create|update] [ARGS] [OPTIONS] --template key_order.json
Resulting file will have keys ordered like in key_order.json file. All keys could be added in key_order.json, in case no value is given for a key, key will not appear in final file.
In case you also want to provide a template with default value, use the following:
composercm [create|update] [ARGS] [OPTIONS] --template key_order.json --template default_values.json [--template another.json]
Managed properties
Following properties could be defined with option from command line :
- Package name
- Package type
- License
- Version
- Description
- Keywords Many allowed
- Author Many allowed
- Provided packages Many allowed
- Suggested packages Many allowed
- Support Many allowed
- PSR-0 / PSR-4 Autoload Many allowed
- PSR-0 / PSR-4 Autoload dev Many allowed
- Required packages Many allowed
- Required dev packages Many allowed
- Scripts
All others properties could ever be defined in templates and will be managed in a default way (could produce unexpected merge for complex nested values)
Full composer configuration
{
"name": "vendor/package-name",
"type": "library",
"license": "LICENSE_TYPE",
"version": "X.Y.Z",
"description": "package description",
"keywords": ["KEYWORD1", "KEYWORD2"],
"authors": [
{
"name": "name1",
"email": "email1",
"role": "role1"
},
{
"name": "name2",
"email": "email2",
"role": "role2"
}
],
"provide": {
"package1": "~x.y",
"package2": "x.y.z",
},
"suggest": {
"package1": "Description 1",
"package2": "Description 2",
},
"support": {
"type1": "url1"
},
"autoload": {
"psr-0": {
"\\RootNamespace\\SubNamespace": "path"
}
},
"autoload-dev": {
"psr-4": {
"\\RootNamespace\\SubNamespace\\": "path"
}
},
"require": {
"requirement1": ">=x.y"
},
"require-dev": {
"requirement1": ">=x.y"
},
"scripts": {
"script-1": [
"command_1",
"command_2"
],
"script-2": [
"command_1",
"command_2"
],
}
}