2014-12-04 13 views
6

Ich habe ein Projekt geerbt, die mit PHP 5.3.x, Symfony2 und Komponisten für Abhängigkeitsmanagement gebaut wurden.Wie liest man die composer.lock-Datei?

Die composer.json Datei hat viele Zeilen wie folgt: "vendorname/library" : "dev-master" für die Version der Bibliotheken im Einsatz. Es wurde zuletzt im August 2012 bearbeitet und funktioniert dann eindeutig, da die composer.lock-Datei existiert und das Projekt auf einem Server bei unserem Host läuft.

Zum Glück mit 1 kleinen Tweak zu composer.lock, habe ich composer install zu arbeiten, aber was ich versuche, jetzt zu tun, ist einige Fehler beheben, die ich bekomme, wenn Composer-Update ausgeführt wird. Es gibt viele Posts online über Component Abhängigkeits-Hölle - und ich bin in einem undichten Boot auf dem Fluss Styx, der dorthin geht, zieht mir die Haare aus.

Kurz gesagt, vor ein paar Jahren, als composer.lock erstellt wurde, arbeitete das Projekt mit den damals aktuellen Versionen von "dev" von Dutzenden von mitgelieferten Bibliotheken, aber jetzt, wo ich versuche, die Unordnung aufzuräumen, Ich würde gerne passende Versionen in composer.json schreiben und versuchen, Dinge aus einem bekannten Zustand zu aktualisieren.

Wie finde ich heraus, welche Versionen tatsächlich von composer install installiert werden? Oder welche Schlüssel/Werte in der composer.lock-Datei sagen Ihnen das?

Ich habe viele Github-Commit-Hashes in der composer.lock-Datei, aber es ist nicht klar, angesichts eines willkürlichen Commit-Hash, was die am nächsten markierte Version wäre, die entsprechende Zeile in composer.json mit zu ersetzen.

Hier ist ein Beispiel Linie von composer.json:

"doctrine/doctrine-bundle"    : "dev-master", 

und hier ist der entsprechende Knoten in composer.lock für dieses Modul:

{ 
    "name": "doctrine/doctrine-bundle", 
    "version": "dev-master", 
    "target-dir": "Doctrine/Bundle/DoctrineBundle", 
    "source": { 
     "type": "git", 
     "url": "http://github.com/doctrine/DoctrineBundle.git", 
     "reference": "d3c930599723c8343472a5791b0f5909a4111a73" 
    }, 
    "dist": { 
     "type": "zip", 
     "url": "https://github.com/doctrine/DoctrineBundle/zipball/d3c930599723c8343472a5791b0f5909a4111a73", 
     "reference": "d3c930599723c8343472a5791b0f5909a4111a73", 
     "shasum": "" 
    }, 
    "require": { 
     "doctrine/dbal": ">=2.2,<2.4-dev", 
     "php": ">=5.3.2", 
     "symfony/doctrine-bridge": "2.1.*", 
     "symfony/framework-bundle": "2.1.*" 
    }, 
    "require-dev": { 
     "doctrine/orm": ">=2.2,<2.4-dev", 
     "symfony/validator": "2.1.*", 
     "symfony/yaml": "2.1.*" 
    }, 
    "suggest": { 
     "doctrine/orm": "The Doctrine ORM integration is optional in the bundle." 
    }, 
    "type": "symfony-bundle", 
    "extra": { 
     "branch-alias": { 
      "dev-master": "1.0.x-dev" 
     } 
    }, 
    "autoload": { 
     "psr-0": { 
      "Doctrine\\Bundle\\DoctrineBundle": "" 
     } 
    }, 
    "license": [ 
     "MIT" 
    ], 
    "authors": [ 
     { 
      "name": "Fabien Potencier", 
      "email": "[email protected]" 
     }, 
     { 
      "name": "Benjamin Eberlei", 
      "email": "[email protected]" 
     }, 
     { 
      "name": "Symfony Community", 
      "homepage": "http://symfony.com/contributors" 
     } 
    ], 
    "description": "Symfony DoctrineBundle", 
    "homepage": "http://www.doctrine-project.org", 
    "keywords": [ 
     "DBAL", 
     "Database", 
     "ORM", 
     "Persistence" 
    ], 
    "support": { 
     "source": "https://github.com/doctrine/DoctrineBundle/tree/master", 
     "issues": "https://github.com/doctrine/DoctrineBundle/issues" 
    }, 
    "time": "2012-09-10 15:12:44" 
} 

ich bin, dass Komponisten raten installiert die dist- > uRL oder Quellen-> url von composer.lock, aber ich habe Module mehrere Dutzend bis zu gehen und sich fragen, wie die nächste (nach Datum) zu finden Tag für jede referenzierte Bibliothek eine vernünftige composer.json-Datei erstellen vorwärts mit der Aktualisierung bewegen unser Code.

+0

Um die aktuell installierten Versionen zu finden, können Sie 'composer show -i' verwenden, von [diese Antwort] (http://stackoverflow.com/questions/15185459/how-to-get-list-of-all-installed) -Packages-mit-Version-in-Composer). Sollte dich beginnen. – geoB

Antwort

3

Zuerst müssen Sie herausfinden, welche Pakete von einer dev-master Version abhängig sind.

composer show -i 

Hier werden alle Ihre Pakete zusammen mit der installierten Version. Etwas wie folgt aus:

symfony/http-foundation    dev-master 1234abc 
symfony/http-kernel     v2.5.7 

Sie werden einige der Pakete sehen werden als mit der Version dev-master <commit> aufgeführt. Notieren Sie sich die Namen dieser Pakete.

Jetzt können Sie es ein bisschen auf sich leichter durch den Quellcode für die Pakete in Ihrem vendor Verzeichnis installieren.

composer install --prefer-source 

nun für jedes Paket bemerken Sie cd in das Paketverzeichnis oben, und den neuesten Tag finden.

cd vendor/symfony/http-foundation 
git describe # Shows the latest tag 

Jetzt können Sie diesen Tag verwenden, um zu bestimmen, welche Version Sie installieren möchten.Wenn zum Beispiel git describev2.2.3 zurückgegeben wird, können Sie die Versionsnummer in Ihrer composer.json in ändern.

"symfony/http-foundation": "2.2.*" 

Dieser Teil könnte schwierig sein, wenn das neueste Tag "weit entfernt" vom installierten Commit ist. Wenn Sie zu viele Probleme haben, können Sie immer einen genauen Commit-Hash installieren, indem Sie dev-master#<commit> in Ihre Versionsanforderung einfügen.

"symfony/http-foundation": "dev-master#1234abc" 
+0

Das ist ziemlich einfach, und die eigentliche Arbeit beginnt, wenn Pakete seither nicht markiert sind, aber in diesem Master-Zweig etwas Entwicklung hatten. Sie wollen vermeiden, irgendwelche Zweige, aber das ist für den zweiten Schritt: Ersetzen Sie Software, die nicht mit etwas markiert ist, dass ist. – Sven

2

Dank anderen Antworten beginne ich zu graben und fand, dass Sie nützliche Informationen mit haben:

composer show -t 

Es hat einen Abhängigkeitsbaum, und neben jedes Paket produzieren wird es Version.

Verwandte Themen