composer: How to find the exact version of a package?
PhpDependency ManagementPackage ManagersComposer PhpPhp Problem Overview
Suppose I'm writing a library A, that depends on another library, monolog for instance.
I want to install the latest version of monolog, so I just put this inside composer.json:
{
"require": {
"monolog/monolog": "*.*.*"
}
}
Then I run $ php composer.phar install
.
I was expecting to find the version installed, inside composer.lock, but it's not there:
{
"hash": "d7bcc4fe544b4ef7561918a8fc6ce009",
"packages": [
{
"package": "monolog/monolog",
"version": "dev-master",
"source-reference": "2eb0c0978d290a1c45346a1955188929cb4e5db7"
}
],
"packages-dev": null,
"aliases": [
],
"minimum-stability": "dev",
"stability-flags": [
]
}
I need the version because I want to tie my library to a specific set of versions, eg: If I find the version is 1.3.5, in my composer.json I would like to put something like this:
"require": {
"monolog/monolog": "1.3.*"
}
Any ideas?
Php Solutions
Solution 1 - Php
I know it's an old question, but...
composer.phar show
Will show all the currently installed packages and their version information. (This was shown in previous versions of Composer only when using the now-deprecated -i
option.)
To see more details, specify the name of the package as well:
composer.phar show monolog/monolog
That will show many things, including commit MD5 hash, source URL, license type, etc.
Solution 2 - Php
You can use composer show like this:
composer show package/name
Solution 3 - Php
If you're just interested to get the output as the package version number like: 1.7.5 or 1.x-dev or dev-master.
Linux console snippet (composer & sed):
composer show 'monolog/monolog' | sed -n '/versions/s/^[^0-9]\+\([^,]\+\).*$/\1/p'
or (composer, grep & cut):
composer show 'monolog/monolog' | grep 'versions' | grep -o -E '\*\ .+' | cut -d' ' -f2 | cut -d',' -f1;
Solution 4 - Php
You can use show all, specially when dont have package.json file, get available packages from packagist.org:
composer show "monolog/monolog" --all
Also you can specify versions
composer show "monolog/monolog" 1.* --all
Solution 5 - Php
Technically "dev-master" is the exact version that you ended up using there. It is the development branch, and thus the very latest version.
The best place to look for available versions for composer packages is Packagist since that's the place composer loads the versions from when you install packages. The monolog versions are listed on http://packagist.org/packages/monolog/monolog.
Solution 6 - Php
If you are using git version control system.you will search easily for any package
composer show |grep packagename
For Example
composer show |grep monolog
If you aren't installing git. you can install grep program from this link. And link it with environment variable you can view this link if you don't know how to link program with environment variables after linking it write the same command on the above
Solution 7 - Php
If you want to check the version within PHP itself, you can use the composer Runtime Utilities:
\Composer\InstalledVersions::getVersion('my/package')
See https://getcomposer.org/doc/07-runtime.md for more information.