Maison > développement back-end > tutoriel php > Comment construire votre premier package PHP

Comment construire votre premier package PHP

Karen Carpenter
Libérer: 2025-03-06 01:38:08
original
589 Les gens l'ont consulté

How to  Build Your First PHP Package

Vous souhaitez créer un package PHP à partir de zéro et le partager avec d'autres développeurs PHP? Composer, cet outil de gestion des dépendances, facilite ce processus! Grâce au compositeur, PHP possède l'un des écosystèmes de package les plus élevés. Jetons un aperçu plus approfondi sur la façon de créer des packages PHP étape par étape.

démarrer


Cet article s'adresse principalement aux débutants PHP (ou aux débutants de rédaction de packages PHP) et vise à les aider à apprendre à créer des packages PHP à partir de zéro.

La création d'un nouveau package PHP nécessite les tâches suivantes:

  • Initialiser le référentiel git
  • Créer et configurer composer.json Fichier
  • Installation des dépendances
  • Définition du chargement automatique

Bien que nous puissions d'abord créer un projet GitHub vide et le cloner localement, nous créerons un nouveau dossier directement localement, initialiserons le projet, puis pousserons le code source vers GitHub plus tard:

$ mkdir example-package
$ cd ./example-package
$ git init
$ echo "/vendor/" >> .gitignore
$ composer init
$ git add .
$ git commit -m"第一次提交"
# 稍后您可以添加远程仓库并推送源代码
Copier après la connexion
Copier après la connexion
Copier après la connexion
La commande

composer init vous guidera pour configurer des projets de manière interactive, définir les noms de packages, les auteurs, les licences, etc. et rechercher des dépendances de package. Vous pouvez remplir ces informations comme vous le souhaitez, mais par souci de concision, c'est là que nous commençons:

{
    "name": "laravelnews/feeds",
    "description": "获取Laravel-News.com的文章",
    "type": "library",
    "require": {}
}
Copier après la connexion
Copier après la connexion
Copier après la connexion

Nous avons la configuration de base du package, mais cela ne fera pas beaucoup de travail. Si le package utilise uniquement le langage PHP de base, certains packages ne nécessitent aucune dépendance. Quoi qu'il en soit, vous devez configurer le chargement automatique afin que les utilisateurs de votre package puissent charger des fonctions et des classes dans leurs projets.

Lorsque vous êtes prêt à connecter votre paiement local à un système de contrôle de version comme GitHub, vous pouvez suivre les instructions pour ajouter un référentiel distant. Il peut être similaire à la commande suivante:

git remote add origin git@github.com:laravelnews/example-package.git
Copier après la connexion
Copier après la connexion

Définition du chargement automatique


Après avoir créé la base

, nous pouvons continuer à créer le code source. Vous devez décider où stocker le code source de votre projet. Les dossiers peuvent être nommés à volonté, mais la "norme" typique est composer.json ou src/. Le compositeur ne se soucie pas du chemin que vous utilisez, mais vous devez demander au compositeur de charger automatiquement le fichier à l'aide de PSR-4. Utilisons le dossier lib/ et créons une classe pour notre exemple de package: src

$ mkdir src/
$ touch src/Api.php
Copier après la connexion
Copier après la connexion
Ensuite, ouvrez le fichier

et utilisez la touche composer.json pour configurer l'autoloader: "autoload"

Les propriétés de la clé
{
    "name": "laravelnews/feeds",
    "description": "获取Laravel-News.com的文章",
    "type": "library",
    "require": {},
    "autoload": {
        "psr-4": {
            "LaravelNews\Feed\": "src/"
        }
    }
}
Copier après la connexion
Copier après la connexion

mappent l'espace de noms PHP dans un dossier. Lorsque nous créons des fichiers dans le dossier autoload.psr-4, ils sont mappés sur l'espace de noms src. Pour cet exemple, nous créons un fichier LaravelNewsFeed qui demande et renvoie un flux Laravel News JSON. Si vous apprenez, ajoutez le code suivant à Api.php: src/Api.php

<?php namespace LaravelNews\Feed;

class Api
{
    public function json(): array
    {
        $json = file_get_contents('https://laravel-news.com/feed/json');

        return json_decode($json, true);
    }
}
Copier après la connexion
Copier après la connexion
Comment essayons-nous tout de suite notre nouvelle classe?

Il existe plusieurs façons, telles que l'exigence de ce package dans un autre projet via une dépendance des compositeurs locaux, et même en poussant le code vers GitHub et en exécutant dev-main sur notre package. Cependant, nous pouvons également l'essayer en créant un fichier composer update dans le répertoire racine du projet: index.php

$ mkdir example-package
$ cd ./example-package
$ git init
$ echo "/vendor/" >> .gitignore
$ composer init
$ git add .
$ git commit -m"第一次提交"
# 稍后您可以添加远程仓库并推送源代码
Copier après la connexion
Copier après la connexion
Copier après la connexion
Nous avons utilisé Autoloader du compositeur, qui sait comment charger les fichiers de notre package. Pour que le compositeur comprenne comment trouver nos fichiers, nous devons exécuter

: composer install

{
    "name": "laravelnews/feeds",
    "description": "获取Laravel-News.com的文章",
    "type": "library",
    "require": {}
}
Copier après la connexion
Copier après la connexion
Copier après la connexion
Vous pouvez également exécuter la commande

après avoir ajouté l'espace de noms à composer.json pour mettre à jour l'autoader du compositeur. dump-autoload

Exécuter le fichier

nous permet de commencer rapidement à utiliser nos packages, cependant, nous pouvons également commencer à utiliser notre code en créant une suite de tests. Faisons de la façon de le configurer! index.php

Test de package et dépendances de développement


Je recommande d'écrire des tests pour tout projet dans lequel vous êtes impliqué, et j'aime mettre en place des tests le plus tôt possible. Le cadre de test le plus courant lors de la création de packages PHP est le phpunit. Mon choix préféré ces derniers temps est le PEST PHP, et je pense que vous aimerez la façon dont il est facile de mettre en place!

Le package

Composer dispose de deux ensembles d'exigences: la pièce

contient les packages requis pour que le package s'exécute, et la pièce require contient les packages requis pour le test. Jusqu'à présent, nous n'avons pas de packages require-dev, ce qui peut se produire si vous n'avez pas besoin d'autres dépendances de package. require

Je doute que vous ne vouliez pas écrire votre propre cadre de test à partir de zéro, nous sommes donc sur le point d'installer notre première dépendance au développement. Nous ne voulons pas non plus toujours faire des demandes aux points de terminaison JSON en temps réel, nous allons donc également installer une bibliothèque simulée (moquerie) pour simuler les appels HTTP:

git remote add origin git@github.com:laravelnews/example-package.git
Copier après la connexion
Copier après la connexion
CONSEIL: Je recommande de configurer le tri des packages avec les options de configuration suivantes dans

pour garder les dépendances organisées: composer.json

$ mkdir src/
$ touch src/Api.php
Copier après la connexion
Copier après la connexion
Après avoir installé des ravageurs et des moqueries, nous pouvons initialiser les ravageurs via le drapeau

. Après avoir créé le fichier, nous pouvons exécuter --init pour tester notre code: pest

{
    "name": "laravelnews/feeds",
    "description": "获取Laravel-News.com的文章",
    "type": "library",
    "require": {},
    "autoload": {
        "psr-4": {
            "LaravelNews\Feed\": "src/"
        }
    }
}
Copier après la connexion
Copier après la connexion
Vous pouvez organiser les tests du package comme vous le souhaitez, et je vous recommande de consulter la documentation des ravageurs pour plus de détails sur la configuration des ravageurs.

Ensuite, créons une classe simple que nous pouvons utiliser pour démontrer les tests de package. Cette classe obtiendra les derniers articles du Feed JSON de Laravel News et reviendra aux derniers articles.

Nous avons nommé cette classe fictive

et l'avons ajoutée au fichier NewsChecker avec le contenu suivant: src/NewsChecker.php

<?php namespace LaravelNews\Feed;

class Api
{
    public function json(): array
    {
        $json = file_get_contents('https://laravel-news.com/feed/json');

        return json_decode($json, true);
    }
}
Copier après la connexion
Copier après la connexion
Notez qu'il faut la classe

comme dépendance et nous nous moquerons de la moquer dans nos tests. Api

Ensuite, nous créerons ce fichier dans le fichier

et ajouterons le test suivant pour vérifier la méthode tests/Feature/NewsCheckerTest.php: latestArticle()

$ mkdir example-package
$ cd ./example-package
$ git init
$ echo "/vendor/" >> .gitignore
$ composer init
$ git add .
$ git commit -m"第一次提交"
# 稍后您可以添加远程仓库并推送源代码
Copier après la connexion
Copier après la connexion
Copier après la connexion

Vous pouvez exécuter ces tests et vérifier que le code est valide en exécutant vendor/bin/pest. Vous pouvez supprimer les exemples de tests créés après l'exécution pest --init comme vous le souhaitez.

Nous avons couvert beaucoup de choses, en initialisant les référentiels Git, en configurant des packages PHP avec composer.json, en ajoutant du code source et des tests, et en les exécutant avec les ravageurs. De là, vous pouvez publier votre colis sur Packagist!

en savoir plus


Je vous recommande de vous inscrire et de consulter la documentation sur packagist.org où vous publierez une nouvelle version du package. Le processus de mise à jour des versions du package sur Packagist peut être automatisé, ce qui signifie que lorsque vous marquez une nouvelle version d'un package, ils apparaîtront automatiquement sur packagist.org.

Nous avons appris étape par étape sur la création de packages à partir de zéro, mais si vous utilisez GitHub, la création d'un référentiel de modèle pour votre organisation ou vos projets personnels peut être réalisé plus rapidement! Il existe des cadres de packages stellaires communautaires qui peuvent être utilisés comme point de départ pour votre prochain package compositeur:

{
    "name": "laravelnews/feeds",
    "description": "获取Laravel-News.com的文章",
    "type": "library",
    "require": {}
}
Copier après la connexion
Copier après la connexion
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal