Composer/Tutorial: Extension für Composer fit machen: Unterschied zwischen den Versionen

Aus Contao Community Documentation

(Grundlagen)
K (Name, Beschreibung, Schlagwörter, Typ, Website, Lizenz: Typo)
 
(14 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 8: Zeile 8:
 
=Grundlagen=
 
=Grundlagen=
  
{{Hinweis|In Composer redet man von ''Paketen'', nicht von ''Erweiterungen'' - weil ein ''Composer Paket'' nicht an ein CMS / System gebunden ist. Aber ein ''Composer Paket'' kann auch eine ''Contao Erweiterung'' sein.}}
+
{{Hinweis|In Composer redet man von '''Paketen''', nicht von '''Erweiterungen''' - weil es sich dabei um ein generelles '''PHP Paket''' handelt.}}
  
 
=Die <code>composer.json</code>=
 
=Die <code>composer.json</code>=
 +
 +
==Name, Beschreibung, Schlagwörter, Typ, Website, Lizenz==
  
 
Die <code>composer.json</code> ist die zentrale Konfigurationsdatei für Composer.
 
Die <code>composer.json</code> ist die zentrale Konfigurationsdatei für Composer.
Zeile 19: Zeile 21:
 
{{Hinweis|Mit '''Repository''' ist das git/svn/hg Repository gemeint.}}
 
{{Hinweis|Mit '''Repository''' ist das git/svn/hg Repository gemeint.}}
  
Die <code>composer.json</code> muss auf der obersten ebene im Repository hinterlegt werden.
+
Die <code>composer.json</code> muss auf der obersten Ebene im Repository hinterlegt werden.
Die die Dateiendung bereits verrät, handelt es sich dabei um eine [http://json.org/ JSON] Datei.
+
Wie die Dateiendung bereits verrät, handelt es sich dabei um eine [http://json.org/ JSON] Datei.
  
 
Fangen wir mal mit den Basics an:
 
Fangen wir mal mit den Basics an:
Zeile 35: Zeile 37:
 
</source>
 
</source>
  
Mit <code>name</code> wird der Name des Pakets festgelegt. Hierbei ist zu beachten, dass sich der Name aus 2 Teilen zusammen setzt: <code>&lt;vendor&gt;/&lt;name&gt;</code>.
+
Mit <code>name</code> wird der Name des Pakets festgelegt. Hierbei ist zu beachten, dass sich der Name aus 2 Teilen zusammen setzt: <code>&lt;vendor&gt;/&lt;name&gt;</code>.<br>
 +
'''<code>&lt;vendor&gt;</code>''' ist der Name des Entwicklers, es empfiehlt sich den Personen/Organisations-Namen den man auf github verwendet zu benutzen.<br>
 +
'''<code>&lt;name&gt;</code>''' ist der Name des Pakets, es empfiehlt sich den Namen des Repositories auf github zu verwenden.
 +
 
 +
{{Hinweis|Der Paketname wird normalisiert. Es sind ausschließlich '''kleine Buchstaben''', '''Zahlen''', '''Unterstriche''' und '''Bindestriche''' erlaubt!<br>
 +
'''Richtig''': my-name/my-extension-name oder my_name/my_extension_name<br>
 +
'''Falsch''': MyName/MyExtensionName}}
 +
 
 +
Mit <code>description</code> kann man eine Kurzbeschreibung zu seinem Paket hinzufügen. Diese wird für gewöhnlich in Englisch verfasst.
 +
 
 +
{{Hinweis|Es gibt aktuell noch keine Möglichkeit, die Beschreibung Mehrsprachig zu erfassen. Dies ist aber geplant, bspw. in Ticket [https://github.com/composer/composer/issues/1954 #1954] des Composer Projekts.}}
 +
 
 +
Mit <code>keywords</code> kann man ein oder mehrere Schlagwörter erfassen. Diese werden für gewöhnlich in Englisch verfasst.
 +
 
 +
Mit <code>type</code> definiert man, um was für einen Pakettyp es sich handelt. Hier ist wichtig, dass der Typ auf <code>contao-module</code> gesetzt wird, weil sonst der Contao-Installer (Teil des [[Composer/Plugin|Composer Plugin]]) nicht verwendet wird und das Paket damit nicht richtig installiert wird.
 +
 
 +
Mit <code>homepage</code> kann man eine URL zur Projekt- oder Entwickler-Website erfassen.
 +
 
 +
Mit <code>license</code> kann man die Lizenz(en) festlegen. Dies sollte ein oder mehrere gültige Identifier aus der [http://spdx.org/licenses/ SPDX License List] sein. Wenn man ein privates / closed-source Paket erstellen möchte, setzt man hier <code>proprietary</code> ein.
 +
 
 +
==Abhängigkeiten==
 +
 
 +
<source lang="javascript">
 +
{
 +
    "require": {
 +
        /* PHP Version */
 +
        "php": ">=5.3",
 +
 
 +
        /* Contao Version */
 +
        "contao/core": ">=3.1,<=3.4-dev",
 +
 
 +
        /* Das Plugin / Der Installer */
 +
        "contao-community-alliance/composer-plugin": "~2.0",
 +
 
 +
        /* Andere Abhängigkeiten */
 +
        "another-developer/another-extension": "~1.0"
 +
    }
 +
}
 +
</source>
 +
 
 +
==Ersetzen von Legacy Paketen==
 +
 
 +
<source lang="javascript">
 +
{
 +
    "replace": {
 +
        "contao-legacy/my_extension": "self.version"
 +
    }
 +
}
 +
</source>
 +
 
 +
==Autoload==
 +
 
 +
<source lang="javascript">
 +
{
 +
    "autoload": {
 +
        // Classmap
 +
        "classmap": [
 +
            "classes"
 +
        ],
 +
 
 +
        // PSR-0
 +
        "psr-0": {
 +
            "Me\\MyExtension": "classes/"
 +
        },
 +
 
 +
        // PSR-4
 +
        "psr-4": {
 +
            "Me\\MyExtension\\": "classes/"
 +
        }
 +
    }
 +
}
 +
</source>
 +
 
 +
==Contao Konfiguration==
 +
 
 +
<source lang="javascript">
 +
{
 +
    "extra": {
 +
        "contao": {
 +
            /* sources wird immer synchronisiert, alte Dateien gelöscht, neue hinzugefügt, veränderte überschrieben */
 +
            "sources": {
 +
                "<pfad innerhalb des Repository>": "<pfad innerhalb von Contao>",
 +
 
 +
                /* Beispiel */
 +
                "TL_ROOT/system/modules/my_extension": "system/modules/my_extension",
 +
            },
 +
 
 +
            /* files wird nur zusammengeführt, alte Dateien bleiben erhalten, neue hinzugefügt, veränderte werden nicht überschrieben */
 +
            "files": {
 +
                "<pfad innerhalb des Repository>": "<pfad innerhalb von Contao>",
 +
 
 +
                /* Beispiel */
 +
                "TL_ROOT/templates": "templates",
 +
            },
 +
 
 +
            /* userfiles wird nur zusammengeführt wie files, aber alle Zielpfade sind relativ zum Contao Upload Pfad */
 +
            "userfiles": {
 +
                "<pfad innerhalb des Repository>": "<pfad innerhalb vom Contao Upload Pfad>",
 +
 
 +
                /* Beispiel, Zielpfad hier wäre TL_ROOT/files/mytheme/images */
 +
                "TL_ROOT/mytheme/images": "mytheme/images",
 +
            }
 +
        }
 +
    }
 +
}
 +
</source>
 +
 
 +
==Branch Alias==
 +
 
 +
<source lang="javascript">
 +
{
 +
    "extra": {
 +
        "branch-alias": {
 +
            /* Alias für Branch "master" */
 +
            "dev-master": "2.0.x-dev",
 +
 
 +
            /* Alias für Branch "support/lts" */
 +
            "dev-support/lts": "1.0.x-dev",
 +
 
 +
            /* Alias für Branch "develop" */
 +
            "dev-develop": "3.0.x-dev"
 +
        }
 +
    }
 +
}
 +
</source>
  
 
=Beispiele=
 
=Beispiele=

Aktuelle Version vom 11. Juli 2015, 19:09 Uhr



MsgError.png Unvollständiger Artikel: dieser Artikel ist noch nicht sauber bearbeitet.

Bitte erweitere ihn und entferne erst anschliessend diesen Hinweis.


Grundlagen

Hinweis.png Hinweis: In Composer redet man von Paketen, nicht von Erweiterungen - weil es sich dabei um ein generelles PHP Paket handelt.


Die composer.json

Name, Beschreibung, Schlagwörter, Typ, Website, Lizenz

Die composer.json ist die zentrale Konfigurationsdatei für Composer. In dieser werden Name, Beschreibung, Typ, Lizenz, Author, und viel mehr hinterlegt. Eine vollständige Schema-Beschreibung kann man auf der Composer Website finden. An dieser Stelle werden erst ein mal nur auf die wichtigsten Einträge erörtert.


Hinweis.png Hinweis: Mit Repository ist das git/svn/hg Repository gemeint.


Die composer.json muss auf der obersten Ebene im Repository hinterlegt werden. Wie die Dateiendung bereits verrät, handelt es sich dabei um eine JSON Datei.

Fangen wir mal mit den Basics an:

{
    "name": "me/my-extension",
    "description": "A very usefull extension.",
    "keywords": ["contao", "extension", "usability"],
    "type": "contao-module",
    "homepage": "http://my-homepage.me/my-extension",
    "license": "LGPL-3.0+"
}

Mit name wird der Name des Pakets festgelegt. Hierbei ist zu beachten, dass sich der Name aus 2 Teilen zusammen setzt: <vendor>/<name>.
<vendor> ist der Name des Entwicklers, es empfiehlt sich den Personen/Organisations-Namen den man auf github verwendet zu benutzen.
<name> ist der Name des Pakets, es empfiehlt sich den Namen des Repositories auf github zu verwenden.


Hinweis.png Hinweis: Der Paketname wird normalisiert. Es sind ausschließlich kleine Buchstaben, Zahlen, Unterstriche und Bindestriche erlaubt!

Richtig: my-name/my-extension-name oder my_name/my_extension_name
Falsch: MyName/MyExtensionName


Mit description kann man eine Kurzbeschreibung zu seinem Paket hinzufügen. Diese wird für gewöhnlich in Englisch verfasst.


Hinweis.png Hinweis: Es gibt aktuell noch keine Möglichkeit, die Beschreibung Mehrsprachig zu erfassen. Dies ist aber geplant, bspw. in Ticket #1954 des Composer Projekts.


Mit keywords kann man ein oder mehrere Schlagwörter erfassen. Diese werden für gewöhnlich in Englisch verfasst.

Mit type definiert man, um was für einen Pakettyp es sich handelt. Hier ist wichtig, dass der Typ auf contao-module gesetzt wird, weil sonst der Contao-Installer (Teil des Composer Plugin) nicht verwendet wird und das Paket damit nicht richtig installiert wird.

Mit homepage kann man eine URL zur Projekt- oder Entwickler-Website erfassen.

Mit license kann man die Lizenz(en) festlegen. Dies sollte ein oder mehrere gültige Identifier aus der SPDX License List sein. Wenn man ein privates / closed-source Paket erstellen möchte, setzt man hier proprietary ein.

Abhängigkeiten

{
    "require": {
        /* PHP Version */
        "php": ">=5.3",
 
        /* Contao Version */
        "contao/core": ">=3.1,<=3.4-dev",
 
        /* Das Plugin / Der Installer */
        "contao-community-alliance/composer-plugin": "~2.0",
 
        /* Andere Abhängigkeiten */
        "another-developer/another-extension": "~1.0"
    }
}

Ersetzen von Legacy Paketen

{
    "replace": {
        "contao-legacy/my_extension": "self.version"
    }
}

Autoload

{
    "autoload": {
        // Classmap
        "classmap": [
            "classes"
        ],
 
        // PSR-0
        "psr-0": {
            "Me\\MyExtension": "classes/"
        },
 
        // PSR-4
        "psr-4": {
            "Me\\MyExtension\\": "classes/"
        }
    }
}

Contao Konfiguration

{
    "extra": {
        "contao": {
            /* sources wird immer synchronisiert, alte Dateien gelöscht, neue hinzugefügt, veränderte überschrieben */
            "sources": {
                "<pfad innerhalb des Repository>": "<pfad innerhalb von Contao>",
 
                /* Beispiel */
                "TL_ROOT/system/modules/my_extension": "system/modules/my_extension",
            },
 
            /* files wird nur zusammengeführt, alte Dateien bleiben erhalten, neue hinzugefügt, veränderte werden nicht überschrieben */
            "files": {
                "<pfad innerhalb des Repository>": "<pfad innerhalb von Contao>",
 
                /* Beispiel */
                "TL_ROOT/templates": "templates",
            },
 
            /* userfiles wird nur zusammengeführt wie files, aber alle Zielpfade sind relativ zum Contao Upload Pfad */
            "userfiles": {
                "<pfad innerhalb des Repository>": "<pfad innerhalb vom Contao Upload Pfad>",
 
                /* Beispiel, Zielpfad hier wäre TL_ROOT/files/mytheme/images */
                "TL_ROOT/mytheme/images": "mytheme/images",
            }
        }
    }
}

Branch Alias

{
    "extra": {
        "branch-alias": {
            /* Alias für Branch "master" */
            "dev-master": "2.0.x-dev",
 
            /* Alias für Branch "support/lts" */
            "dev-support/lts": "1.0.x-dev",
 
            /* Alias für Branch "develop" */
            "dev-develop": "3.0.x-dev"
        }
    }
}

Beispiele

Repository mit TL_ROOT

Repository mit system/modules/my_extension

Repository das bei system/modules/my_extension startet

Neue Struktur

Ansichten
Meine Werkzeuge

Contao Community Documentation

Ich habe eine Anpassungsgeschichte angepasst.

Leo Feyer
Navigation
Verstehen
Verwenden
Entwickeln
Verschiedenes
Werkzeuge