X

Symfony 4 : déballer les packs |Articles


Nous recevons beaucoup de retours positifs sur Symfony 4. Vous adorez la nouvelle structure de répertoires. Vous aimez la simplicité d’utilisation des services sans rien configurer. Et vous adorez l’automatisation qu’offre Flex. Cela me rend heureux et fier.

Mais un problème que j’entends parfois est qu’il est plus complexe de démarrer un nouveau projet. La plupart des projets nécessitent de nombreuses fonctionnalités Symfony. Mais les nouveaux projets ont désormais un minimum de dépendances lorsqu’ils sont créés via composer create-project symfony/skeleton. Vous devez ajouter explicitement toutes les dépendances dont vous souhaitez dépendre. Être explicite, c’est bien, mais l’UX en souffre. J’ai déjà essayé d’ajouter profiler et vous n’avez pas obtenu d’informations sur le timing ? Ouais, symfony/stopwatch est facultatif, vous devez donc l’ajouter explicitement.

Vous avez aimé la simplicité de démarrer un projet avec Symfony Standard Edition. Est-ce de la nostalgie ? Peut-être. Serait-il possible d’obtenir le meilleur des deux mondes ? Certainement! Continuer à lire.

Tout d’abord, permettez-moi de récapituler certaines fonctionnalités actuellement disponibles :

Les Packs Symfony permettent de gagner du temps, mais ils ont une limite : ils masquent les vraies dépendances. Laissez-moi vous expliquer avec un exemple. En utilisant symfony/orm-pack est un excellent moyen d’obtenir les packages et les bundles liés à Doctrine les plus couramment nécessaires. Courir composer req symfony/orm-pack (ou simplement composer req orm) pour obtenir Doctrine core, le bundle Doctrine et le bundle Doctrine migrations (le tout configuré grâce à de belles recettes).

Mais que se passe-t-il si vous souhaitez supprimer une dépendance incluse dans le pack ? Comme le bundle migrations. Vous ne pouvez pas le supprimer car le projet composer.json le fichier nécessite symfony/orm-packpas les dépendances individuelles :

diff --git a/composer.json b/composer.json
index e24f26b..5238f98 100644
--- a/composer.json
+++ b/composer.json
@@ -7,6 +7,7 @@
         "symfony/flex": "^1.0",
         "symfony/framework-bundle": "^4.0",
         "symfony/lts": "^4@dev",
+        "symfony/orm-pack": "^1.0",
         "symfony/yaml": "^4.0"
     },
     "require-dev": {

Un autre exemple serait lorsque vous souhaitez modifier une contrainte de dépendance pour un package provenant d’un pack.

Vous pouvez bien sûr exiger les dépendances individuelles, mais pour des packs comme debug ou apivous devriez jeter un œil à leur composer.json sur Github et faites un copier/coller. Pas idéal.

Il existe un autre moyen. Déballage du pack. Tu peux maintenant unpack un pack déjà installé via le unpack commande:

composer unpack orm

La commande met à jour composer.json pour supprimer le pack et le remplacer par les dépendances individuelles définies dans le pack :

diff --git a/composer.json b/composer.json
index 5238f98..b8c9794 100644
--- a/composer.json
+++ b/composer.json
@@ -3,11 +3,13 @@
     "license": "proprietary",
     "require": {
         "php": "^7.1.3",
+        "doctrine/doctrine-bundle": "^1.6.10",
+        "doctrine/doctrine-migrations-bundle": "^1.3",
+        "doctrine/orm": "^2.5.11",
         "symfony/console": "^4.0",
         "symfony/flex": "^1.0",
         "symfony/framework-bundle": "^4.0",
         "symfony/lts": "^4@dev",
-        "symfony/orm-pack": "^1.0",
         "symfony/yaml": "^4.0"
     },
     "require-dev": {

Ajuster les dépendances du pack est maintenant possible. Vous ne voulez pas les bundles de migration ? Assez simple:

composer rem migrations

Vous pouvez également déballer un pack au moment de l’installation via le --unpack drapeau. Ce drapeau indique à Composer d’ajouter les dépendances du pack dans votre composer.json au lieu d’ajouter le package pack lui-même :

composer req orm-pack --unpack

Notez que le unpack commande et le --unpack flag ne fonctionne que pour les packs Symfony (le type de package Composer doit être symfony-pack). Toutes les autres dépendances sont simplement ignorées et suivent le processus d’installation standard de Composer.

C’est une excellente fonctionnalité en soi et vous donne encore plus de pouvoir en matière de gestion des dépendances.

Maintenant, vous pouvez créer un pack “Symfony Standard Edition” et bénéficier de la nouvelle fonctionnalité de décompression.

Cela marcherait presque. Sauf que Symfony Standard Edition a des dépendances de développement qui ne seraient pas installées par Composer. Comme vous le savez, lors de l’ajout d’une dépendance, Composer installera toutes les dépendances transitives à partir du require section, mais il ne se soucie pas de ceux définis sous la require-dev section.

Pour passer au niveau supérieur, et parce que vous pouvez désormais décompresser un pack très facilement, une Édition Standard peut être recréée simplement en ayant un nouveau squelette.

Pour montrer comment cela fonctionne, prenons l’exemple du tout nouveau “Squelette de site Web Symfony”.

Ce nouveau squelette presque réplique les dépendances de Symfony Standard Edition :

{
    "name": "symfony/website-skeleton",
    "type": "project",
    "license": "MIT",
    "description": "A skeleton to start a new Symfony website",
    "require": {
        "php": "^7.1.3",
        "ext-iconv": "*",
        "sensio/framework-extra-bundle": "^5.1",
        "symfony/asset": "^4.0",
        "symfony/browser-kit": "^4.0",
        "symfony/console": "^4.0",
        "symfony/css-selector": "^4.0",
        "symfony/debug-pack": "*",
        "symfony/expression-language": "^4.0",
        "symfony/flex": "^1.0",
        "symfony/framework-bundle": "^4.0",
        "symfony/form": "^4.0",
        "symfony/lts": "^4@dev",
        "symfony/orm-pack": "*",
        "symfony/monolog-bundle": "^3.1",
        "symfony/process": "^4.0",
        "symfony/security-bundle": "^4.0",
        "symfony/serializer-pack": "*",
        "symfony/validator": "^4.0",
        "symfony/swiftmailer-bundle": "^3.1",
        "symfony/web-link": "^4.0",
        "symfony/webpack-encore-pack": "*",
        "symfony/yaml": "^4.0"
    },
    "require-dev": {
        "symfony/dotenv": "^4.0",
        "symfony/maker-bundle": "^1.0",
        "symfony/phpunit-bridge": "^4.0",
        "symfony/profiler-pack": "*"
},
...

Courir composer create-project symfony/website-skeleton pour démarrer un nouveau projet. Vous obtenez tout ce dont vous avez besoin pour démarrer rapidement. Utilisez le unpack commande si vous avez besoin d’un meilleur contrôle sur les dépendances ajoutées ; déballez, retirez, ajoutez comme bon vous semble. Vous avez le plein contrôle. Notez que si vous décompressez une dépendance définie sous require-devtoutes ses dépendances sont ajoutées au require-dev partie comme prévu.

Comme Silex ? Commencer avec symfony/skeleton. Vous aimez mieux le framework Symfony full-stack ? Commencer avec symfony/website-skeleton. Ensuite, soyez libre d’ajouter ou de supprimer des dépendances. Échelle le chemin toi voulez votre projet.

Les packs permettent de créer facilement de superbes squelettes. Et unpack permet de garder la flexibilité d’être explicite et précis sur les dépendances.

La nouvelle fonctionnalité de décompression ouvre de nombreuses possibilités et vous donne encore plus de flexibilité et de contrôle sur la gestion des dépendances de votre projet. Époustouflant si vous me demandez.

Joyeux Symfony !