Ok folks, time to get up to speed with the latest developments in composer. Composer is trying hard to get out of alpha version. Let’s help spread the word to summon support and contribute. Here is the run down of new/updated features you may want to have under your arsenal belt:
[logo made by @wizardcat, btw i met this guy in Warsaw :)]
Suppose we were to start with a composer.json something like this:
{ "type": "project", "license": "proprietary2", "require": { "lib-ICU": ">=53.1", "php-64bit": ">=5.5", "doctrine/orm" : "*", "symfony/event-dispatcher": ">=2.1" }, "scripts": { "post-update-cmd": [ "phpunit" ] } } |
Notice the new type `project`, and also the first couple of requires. Let’s validate it:
~ composer validate ./composer.json is valid for simple usage with composer but has strict errors that make it unable to be published as a package: See http://getcomposer.org/doc/04-schema.md for details on the schema name : is missing and it is required description : is missing and it is required License "proprietary2" is not a valid SPDX license identifier, see http://www.spdx.org/licenses/ if you use an open license. If the software is closed-source, you may use "proprietary" as license. |
It even offers us the right suggestion. Now suppose we have network problems, and we want to report it or reproduce the problem. No worries, diagnose command to the rescue:
~ composer diagnose Checking platform settings: OK Checking http connectivity: OK Checking composer.json: OK Checking github.com oauth access: OK Checking disk free space: OK Checking composer version: FAIL Your are not running the latest version |
Suppose you get concerned by a rumor some of your bundles have GPL or such forbidding licenses, then just list them with `composer licenses | grep ‘GPL’` or even fail a test if this is different than empty :):
~ composer licenses Name: __root__ Version: dev-master Licenses: proprietary Dependencies: doctrine/annotations v1.1.2 MIT doctrine/cache v1.3.0 MIT doctrine/collections v1.1 MIT doctrine/common v2.4.1 MIT doctrine/dbal v2.4.1 MIT doctrine/inflector v1.0 MIT doctrine/lexer v1.0 MIT doctrine/orm v2.4.1 MIT symfony/console v2.4.0 MIT symfony/event-dispatcher v2.4.0 MIT |
Try running `composer install` now with a mac with updated brew formulas on icu. Currently we are on 52.1 so we will need to downgrade the 53.1 to 52.1 to be able to install the dependencies of our composer.json above or we get this:
- The requested linked library lib-icu >=53.1 has the wrong version installed, try upgrading the intl extension. |
Now because you contribute a lot you need to have a way to see if some of your dependencies have been modified and you need to launch a couple of PRs to your peeps. No worries, got you covered with `status` command:
~ composer status -v You have changes in the following dependencies: /Users/cordoval/Sites/libs/experiment/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher: M CHANGELOG.md |
composer archive symfony/event-dispatcher symfony-event-dispatcher-11d844997699682f23b6fbb50c00d343c645654f-zip-00fc5c.tar |
One more time you gotta run the test suite on your project, then use `run-script` (warning: currently only event named commands are allowed):
composer run-script post-update-cmd PHPUnit 3.7.28 by Sebastian Bergmann. // ... |
Then imagine you are under pressure and composer did not work because of a low timeout number. You can display the merged configuration with the `config` command:
~ composer config --list [repositories.0.type] composer [repositories.0.url] http://satis.l [repositories.packagist.type] composer [repositories.packagist.url] https?://packagist.org [repositories.packagist.allow_ssl_downgrade] true [process-timeout] 300 [use-include-path] false [preferred-install] auto [notify-on-install] true [github-protocols] [git, https] [vendor-dir] vendor [bin-dir] {$vendor-dir}/bin (vendor/bin) [cache-dir] /Users/cordoval/.composer/cache [cache-files-dir] {$cache-dir}/files (/Users/cordoval/.composer/cache/files) [cache-repo-dir] {$cache-dir}/repo (/Users/cordoval/.composer/cache/repo) [cache-vcs-dir] {$cache-dir}/vcs (/Users/cordoval/.composer/cache/vcs) [cache-ttl] 15552000 [cache-files-ttl] 15552000 [cache-files-maxsize] 300MiB (314572800) [discard-changes] false [prepend-autoloader] true [github-domains] [github.com] [home] /Users/cordoval/.composer [github-oauth.github.com] KEYHERE... |
Then run the `config` with `–global key value` to up your network setting for composer to work:
composer config --global process-timeout 400 |
Inside your `~/.composer/config.json` will look like this:
~ cat ~/.composer/config.json { "config": { "github-oauth": { "github.com": "KEYHERE" }, "process-timeout": 400 }, "repositories": [ { "type": "composer", "url": "http://satis.l" } ] } |
Finally, you are just tired of copying or typing your `composer.json` by hand. You then will like the `init` command to do like a boss:
~ composer init Welcome to the Composer config generator This command will guide you through creating your composer.json config. Package name (<vendor>/<name>) [cordoval@gmail.com/experiment]: cordoval/experiment Description []: some description Author [Luis Cordova <cordoval@gmail.com>]: Minimum Stability []: dev License []: MIT Define your dependencies. Would you like to define your dependencies (require) interactively [yes]? Search for a package []: monolog Found 15 packages matching monolog [0] monolog/monolog [1] symfony/monolog-bundle [2] symfony/monolog-bridge [3] kamisama/monolog-init [4] flynsarmy/slim-monolog [5] logentries/logentries-monolog-handler [6] ddtraceweb/monolog-parser [7] enlitepro/enlite-monolog [8] fancyguy/wordpress-monolog [9] swestcott/monolog-extension [10] lexik/monolog-browser-bundle [11] bazo/nette-monolog-extension [12] nodepub/monolog-json-service-provider [13] 0x20h/monoconf [14] beberlei/loggly-bundle Enter package # to add, or the complete package name if it is not listed []: 0 Enter the version constraint to require []: dev-master Search for a package []: Would you like to define your dev dependencies (require-dev) interactively [yes]? n { "name": "cordoval/experiment", "description": "some description", "require": { "monolog/monolog": "dev-master" }, "license": "MIT", "authors": [ { "name": "Luis Cordova", "email": "cordoval@gmail.com" } ], "minimum-stability": "dev" } Do you confirm generation [yes]? |
You forgot what you were doing and wanted to see what it was installed?
~ composer show --installed doctrine/annotations v1.1.2 Docblock Annotations Parser doctrine/cache v1.3.0 Caching library offering an object-oriented API for many cache backends doctrine/collections v1.1 Collections Abstraction library doctrine/common v2.4.1 Common Library for Doctrine projects doctrine/dbal v2.4.1 Database Abstraction Layer doctrine/inflector v1.0 Common String Manipulations with regard to casing and singular/plural rules. doctrine/lexer v1.0 Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers. doctrine/orm v2.4.1 Object-Relational-Mapper for PHP symfony/console v2.4.0 Symfony Console Component symfony/event-dispatcher v2.4.0 Symfony EventDispatcher Component |
Encouragements in all good, totally undeserving it and enjoying grace,
your friend @cordoval