2013-06-18 3 views
6

Ich habe gerade angefangen, die Composer-Funktion zu verwenden, in der Sie lokalen Verzeichnissen nach Abhängigkeiten suchen, so dass Sie eine Bibliothek und etwas entwickeln können, das diese Bibliothek parallel verwendet, ohne die ganze Zeit auf git zu drücken, Das ist großartig. z.B.Composer-Option, um Alternative zu composer.json zu verwenden?

"repositories": [ 
    { 
     "type": "vcs", 
     "url": "/documents/projects/github/guzzle" 
    } 
], 

"require":{ 
    "guzzle/guzzle": "3.7.*@dev" 
} 

Also, wenn Sie einen Komponisten Update zu tun, Komponist wird in der Version von Guzzle aus dem lokalen Verzeichnis ziehen, so können Sie den Code für eine Bibliothek in einer anderen Anwendung testen, die diese Bibliothek verwendet, ohne eine schieben, die Repository zwischen jeder Codeänderung.

Allerdings habe ich fast in der composer.json für mein Projekt mit diesem Set eingecheckt - was offensichtlich auf keiner anderen Maschine funktioniert.

Gibt es sowieso zu sagen Komponist zu einer anderen Datei als composer.json oder andere Möglichkeit zu sagen, Komponist zu verwenden, um lokale Verzeichnisse sicher zu verwenden, ohne die hohe Wahrscheinlichkeit, versehentlich eine defekte Version von composer.json zu begehen Ihr Repository?

Antwort

2

Anstatt von einem lokalen Repository an anderer Stelle abzuholen, können Sie die Option --prefer-source zum Befehl composer install/update hinzufügen und die lokale Repository-Referenz entfernen.

Auf diese Weise wird Composer git Klon die Software in das Lieferantenverzeichnis aufrufen, und Sie können sowohl Ihre Software entwickeln als auch die Software des Anbieters verwenden, denn das ist auch ein voll funktionsfähiges Git Repo.

Das Hinzufügen von lokalen Repository-Referenzen wird nicht wirklich empfohlen. Es funktioniert, wenn es für echte lokale Software verwendet wird, aber es hat seinen Overhead: Sie müssen dieses Repository in jeder composer.json Datei erwähnen, die diese Software laden wird, auch wenn es nur eine indirekte Abhängigkeit ist (dh Sie fügen eine Software hinzu das benötigt diese Software als eine Abhängigkeit in Ihrem lokalen Repo).

Das Feststellen der URL des Repositorys verhindert auch, dass Sie es nach Belieben ändern können. Obwohl Sie das Repository verschieben und die URL entsprechend ändern können, haben alle älteren Versionen Ihrer Software immer noch die alte URL in den Dateien composer.json und composer.lock und versuchen, von dort zu laden.

0

Es sieht so aus, als ob es keine Möglichkeit gibt, dies innerhalb des Composers gut zu machen, jedoch ist es möglich, es herumzuhacken.

Geben Sie in Ihrer composer.json-Datei einen Kommentar ein, wo Sie Daten hacken möchten.

{ 
"name": "base-reality/intahwebz", 

"//": "LOCALHACK", 

"require":{ 
    "base-reality/php-to-javascript": ">=0.1.17", 
    "guzzle/danackguzzle": "3.3.*@dev", 
    ... 
    ... 
    } 
    ... 
} 

haben dann eine separate Datei composer.local (nicht zu Git verpflichtet), die die Verweise auf lokale Verzeichnisse enthält:

"LOCALHACK", 

"repositories": [ 
    { 
     "type": "vcs", 
     "url": "/documents/projects/github/intahwebz-core" 
    } 
], 

hinzufügen winzigen PHP-Skript composerLocal.php nannte die neue composer.json zu erzeugen Datei

<?php 

$srcFile = file_get_contents("composer.json"); 
$hackFile = file_get_contents("composer.local"); 
$finalString = str_replace('"LOCALHACK",', $hackFile, $srcFile); 
file_put_contents("composer.json", $finalString); 

?> 

und ein wenig bash-Skript localupdate.sh für die Sicherung der realen composer.json Datei mit dem Namen, erzeugen die gehackt composer.json, führen Komponist und dann wiederherstellen die ursprüngliche composer.json Datei

cp -f composer.json composer.json.bak 
php composerLocal.php 
composer update 
cp -f composer.json.bak composer.json 

das localupdate.sh-Scripts ausführen können Sie die Commits, ohne dass die Gefahr einer Veränderung der tatsächlichen composer.json Datei durch das Projekt verwendet lokal testen, so gibt es weniger Chancen, aus Versehen eine ungültige composer.json in das Repository schieben.

Nur zu beachten, Composer liest nicht die Dateien aus dem Repository-Verzeichnis, es liest die commited-Dateien in Git, so dass Sie Änderungen am Bibliothekscode vornehmen müssen. Der obige Prozess überspringt einfach den Push-Schritt.

-1

Einfach, verwenden Sie einfach Artefakt.

In Repositories hinzufügen dies:

{ 
    "type": "artifact", 
    "url": "path/to/artifact/files/" 
}, 

Jetzt müssen Sie nur eine Kopie des Repository in das Verzeichnis das Verzeichnis und zip erstellen.

Name des ZIP-Dateien wie folgt:

[vendorname]-[packagename]-[version].zip 

Beispiel:

querypath-QueryPath-3.0.0.zip 

Jetzt können Sie das Paket lokal ändern und es wird aus der Zip-Datei anstelle der Online-Repo ziehen.

In erfordert es, wie so hinzufügen und Version angeben, wie in zip definiert:

"querypath/QueryPath": "3.0.0", 

Mit dieser Methode haben Sie die Möglichkeit haben die Herstellerdateien und Komponist wird noch irgendwelche Autoloader relativ zu den Änderungen aktualisieren, zu bearbeiten und Es wird deine Änderungen in Ruhe lassen.

+0

Ich kann die composer.json Datei bearbeiten. Die Frage lautete: "Gibt es dem Komponisten zu sagen, dass er eine andere Datei als composer.json verwenden soll?", Um zu vermeiden, die composer.json bearbeiten zu müssen. – Danack

+0

Sorry, Miss-verstanden den Punkt der Frage. Dachte, du wolltest Bibliotheken bearbeiten und lässt den Komponisten in Ruhe. –