Ich habe ein Projekt mit einigen Abhängigkeiten und möchte ein anderes installieren, aber ich möchte die anderen so lassen, wie sie sind. Also habe ich das bearbeitet composer.json
, aber wenn ich laufe composer install
, bekomme ich folgende Ausgabe:
Installing dependencies from lock file
Warning: The lock file is not up to date with the latest changes in composer.json. You may be getting outdated dependencies. Run update to update them.
Your requirements could not be resolved to an installable set of packages.
Problem 1
- laravel/framework dev-master requires ext-mcrypt * -> the requested PHP extension mcrypt is missing from your system.
- laravel/framework dev-master requires ext-mcrypt * -> the requested PHP extension mcrypt is missing from your system.
- Installation request for laravel/framework dev-master -> satisfiable by laravel/framework dev-master.
Zuallererst habe ich mcrypt installiert, deshalb weiß ich nicht, warum es sich dort darüber beschwert.
Wie kann ich diese neue Abhängigkeit installieren?
Mein Komponist.json:
{
"require": {
"opauth/opauth": "*",
"opauth/facebook": "*",
"opauth/google": "*",
"opauth/twitter": "*",
"imagine/Imagine": "dev-develop",
"laravel/framework": "4.*",
"loic-sharma/profiler": "dev-master"
},
"autoload": {
"classmap": [
"app/libraries",
"app/commands",
"app/controllers",
"app/models",
"app/database/migrations",
"app/tests/TestCase.php"
]
},
"minimum-stability": "dev"
}
composer-php
Dualität_
quelle
quelle
Antworten:
Um ein neues Paket zu installieren und nur das, haben Sie zwei Möglichkeiten:
require
Führen Sie mit dem Befehl einfach Folgendes aus:Composer errät die beste zu verwendende Versionsbeschränkung, installiert das Paket und fügt es hinzu
composer.lock
.Sie können auch eine explizite Versionsbeschränkung angeben, indem Sie Folgendes ausführen:
-ODER-
Fügen Sie mit dem
update
Befehl das neue Paket manuell hinzucomposer.json
und führen Sie dann Folgendes aus:Wenn sich Composer beschwert und angibt, dass Ihre Anforderungen nicht in einen installierbaren Satz von Paketen aufgelöst werden konnten, können Sie dies beheben, indem Sie das Flag übergeben
--with-dependencies
. Dadurch werden alle Abhängigkeiten des Pakets, das Sie installieren / aktualisieren möchten, auf die Whitelist gesetzt (jedoch keine Ihrer anderen Abhängigkeiten).Bezüglich der Probleme des Fragestellers mit Laravel und mcrypt: Überprüfen Sie, ob es in Ihrer CLI php.ini ordnungsgemäß aktiviert ist. Wenn
php -m
mcrypt nicht aufgelistet ist, fehlt es.Wichtig: Vergessen Sie nicht,
new/package
bei der Verwendung anzugebencomposer update
! Wenn Sie dieses Argument weglassen, werden alle Abhängigkeiten sowiecomposer.lock
aktualisiert.quelle
"new/package" : "*",
im"require"
Abschnitt composer.json hinzuzufügen ?Eigentlich ist die richtige Lösung:
composer require vendor/package
Entnommen aus der CLI-Dokumentation für Composer :
Zwar werden
composer update
neue Pakete in composer.json installiert, doch werden auch die Datei composer.lock und alle installierten Pakete gemäß der Fuzzy-Logik (>
oder*
Zeichen nach den Doppelpunkten) in composer.json aktualisiert ! Dies kann durch die Verwendung vermieden werdencomposer update vendor/package
, aber ich würde nicht empfehlen, es sich zur Gewohnheit zu machen, da Sie ein vergessenes Argument von einem möglicherweise kaputten Projekt entfernt sind…Halten Sie die Dinge gesund und bleiben Sie dabei,
composer require vendor/package
um neue Abhängigkeiten hinzuzufügen! 😉quelle
composer require
die Datei composer.lock mit aktualisiert?Mein Anwendungsfall ist einfacher und passt einfach zu Ihrem Titel, aber nicht zu Ihrem weiteren Detail.
Das heißt, ich möchte ein neues Paket installieren, das sich noch nicht in meinem befindet,
composer.json
ohne alle anderen Pakete zu aktualisieren.Die Lösung hier ist
composer require x/y
quelle
In meinem Fall hatte ich ein Repo mit:
.json
.lock
In der Zwischenzeit hatten A, B, C neuere Versionen in Bezug auf die Erzeugung der Sperre.
Aus irgendeinem Grund habe ich die "Anbieter" gelöscht und wollte eine
composer install
und schlug mit der Nachricht fehl:Ich habe versucht, die Lösung von Seldaek aus auszuführen, indem ich eine herausgab,
composer update vendorD/libraryD
aber der Komponist bestand darauf, mehr Dinge zu aktualisieren.lock
hatte auch mein Git-Tool Änderungen vorgenommen.Die Lösung, die ich verwendete, war:
vendors
Verzeichnis.VendorD/LibraryD
aus dem.json
.composer install
..json
und checken Sie sie erneut aus dem Repo aus (entspricht dem erneuten Hinzufügen der Datei, wobei jedoch mögliche Änderungen an Leerzeichen vermieden werden).composer update vendorD/libraryD
Es hat die Bibliothek installiert, aber zusätzlich
git
mir diff gezeigt, dass.lock
nur die neuen Dinge hinzugefügt wurden, ohne die anderen zu bearbeiten.(Danke Seldaek für den Zeiger;))
quelle
composer.lock
niemals glücklich gelöscht und neu erstellt werden sollten..lock
ist ... zum Verriegeln !! ; D - Andernfalls wäre die Sperrdatei nutzlos und Sie würden sie nicht festschreiben oder sie würde überhaupt nicht existieren. Wenn Sie in einem qualitätsorientierten Unternehmen arbeiten und eine Sperre mit beispielsweise 1.000 Abhängigkeiten neu erstellen und festlegen, ändern sich alle und QS-Mitarbeiter werden Sie umbringen, hahaha.