Ce qui suit est une introduction à l'environnement de génération Composer de la colonne Tutoriel du compositeur J'espère que cela sera utile aux amis dans le besoin !
Pour les étudiants qui ne connaissent pas le compositeur, ils se poseront certainement cette question. Le mot
est souvent vu en ligne, notamment dans GitHub. Il est également souvent vu lors de l'utilisation de <span class="typ" style="font-size:14px;">Laravel</span>
et <span class="typ" style="font-size:14px;">Yii</span>
. Est-il recommandé d'utiliser l'installation du compositeur lors de l'installation ? Est-il uniquement utilisé lors de l'installation ? J'ai également utilisé d'autres frameworks. Pourquoi <span class="typ" style="font-size:14px;">Thinkphp</span>
et <span class="typ" style="font-size:14px;">Codeigniter</span>
ne sont-ils pas installés avec composer ?
Avec ces questions, nous étudions.
composer Site officiel : https://www.phpcomposer.com
composer est un outil utilisé par PHP (5.3+) pour gérer les dépendances.
Pendant longtemps, la méthode open source de PHP a été au niveau projet, ce qui signifie qu'une fois open source, c'est un projet, comme un ensemble complet de CMS (Dede, WordPress, discuz), et un ensemble complet de frameworks (Thinkphp, Codeigniter). Pourquoi? L'une des raisons très importantes est qu'il est difficile de le démonter. Si vous le démontez, il n'existe aucun outil de gestion efficace pour le combiner, ce qui fait que personne ne prête attention aux petits modules démontés.
Puis composer est apparu. C'est un outil de gestion efficace, il se charge de gérer les petits modules que chacun a démontés, puis de les intégrer efficacement dans un projet complet.
Par exemple, monolog/monolog est utilisé pour la journalisation, guzzlehttp/guzzle est utilisé pour le client HTTP, etc.
Plateforme de packages Composer : https://packagist.org, qui contient un grand nombre d'excellents packages d'installation. Nous pouvons facilement utiliser d'excellents codes dans nos projets avec une seule commande composer.
En tant que fier PHPer, nous ne pouvons pas toujours simplement utiliser les packages de développement d'autres personnes. Nous devons développer nous-mêmes un package que les autres peuvent utiliser et pour nous-mêmes.
Maintenant que nous savons qu'il présente tant d'avantages, apprenons-en davantage, en commençant par l'installation de composer.
Document d'introduction officiel : https://docs.phpcomposer.com/00-intro.html
En utilisant la méthode ci-dessus, l'installation peut être terminée .
Ensuite, nous utiliserons GitHub combiné avec l'outil Composer comme exemple pour expliquer comment développer un package Composer.
Par exemple, développez un package composer pour traiter les nombres.
Connectez-vous à GitHub (si vous n'avez pas de compte, veuillez en créer un), cliquez sur le bouton "+" dans le coin supérieur droit et sélectionnez "Nouveau référentiel".
Dans l'interface de création, remplissez "numberFormat" pour le nom du référentiel, la description est facultative, laissez-la vide pour l'instant, puis en Public (La méthode recommandée par GitHub, gratuite, accessible à tous) et Privé (payant, accessible uniquement aux personnes désignées, gratuit pour les développeurs individuels après le 09/01/2019), sélectionnez "Public", puis cochez "Initialiser ce référentiel avec un README", cliquez sur le bouton "Créer un référentiel" pour le créer avec succès.
À ce stade, cela signifie qu'un projet vide nommé "numberFormat" a été créé sur GitHub.
Ensuite, vous devez cloner le projet distant en local (ligne de commande Git, client Git) pour le codage.
Quels sont les paramètres de composer.json et comment l'écrire Veuillez vous référer au document : https://docs.phpcomposer.com/04-schema ? .html#composer.json
Un projet doit appeler le package de développement, et vous pouvez savoir comment charger le fichier via composer.json.
composer.json 可以使用两个方式创建,一种是 <span class="pln" style="font-size:14px;">composer init</span>
,另一种是手工创建。
咱们一起先执行下 <span class="pln" style="font-size:14px;">composer init</span>
看看效果。
在本地创建numberFormat目录,然后 git clone 刚才创建的项目。
//进入到本地numberFormat目录 composer init Welcome to the Composer config generator This command will guide you through creating your composer.json config. Package name (<vendor>/<name>) [root/number-format]:number-format/number-format Description []:一个处理数字的包 Author [XinLiang <109760455@qq.com>, n to skip]: //回车 Minimum Stability []: //回车 Package Type (e.g. library, project, metapackage, composer-plugin) []: //回车 License []: //回车 Define your dependencies. Would you like to define your dependencies (require) interactively [yes]?no Would you like to define your dev dependencies (require-dev) interactively [yes]?no { "name": "number-format/number-format", "description": "一个处理数字的包", "authors": [ { "name": "XinLiang", "email": "109760455@qq.com" } ], "require": {} } Do you confirm generation [yes]? //回车
至此,本地numberFormat目录就看到 composer.json 文件了,当然可以直接在目录下按照这个格式进行手工创建,后期直接编辑该文件即可。
开发包结构如下:
--src 源码目录(必须)
--tests 单元测试目录(非必须)
我们按照既定的目录结构去创建目录和文件,然后再到composer.json里面修改一下即可。
接下来,在src目录中创建一个类(NumberFormat.php):
/** * 数字格式化类 * @author XinLiang */ namespace numberFormat; class NumberFormat { /** * 格式化字节 * @param int $num 数字 * @param int $precision 精准度 * @return string */ public static function byte_format($num = 0, $precision = 1) { if ($num >= 1000000000000) { $num = round($num / 1099511627776, $precision); $unit = 'TB'; } elseif ($num >= 1000000000) { $num = round($num / 1073741824, $precision); $unit = 'GB'; } elseif ($num >= 1000000) { $num = round($num / 1048576, $precision); $unit = 'MB'; } elseif ($num >= 1000) { $num = round($num / 1024, $precision); $unit = 'KB'; } else { return number_format($num).' Bytes'; } return number_format($num, $precision).' '.$unit; } }
修改 composer.json
{ "name": "number-format/number-format", "description": "一个处理数字的包", "authors": [ { "name": "XinLiang", "email": "109760455@qq.com" } ], "minimum-stability": "dev", "require": { "php": ">=5.3.0" }, "autoload": { "psr-4": { "numberFormat\\": "src/" } }, "license": "MIT" }
至此,我们的开发包已经完成,接下来我们来测试下这个包是否可用。
在本地numberFormat目录下,通过 <span class="pln" style="font-size:14px;">composer install</span>
安装
composer install Loading composer repositories with package information Updating dependencies (including require-dev) Nothing to install or update Writing lock file Generating autoload files //表示安装成功
惊奇的发现,在本地numberFormat目录多一个 <span class="pln" style="font-size:14px;">vendor</span>
目录。
在tests目录创建 NumberFormatTest.php
/** * 数字格式化测试类 * @author XinLiang */ require '../vendor/autoload.php'; use \numberFormat; $number = '102400010'; echo numberFormat\NumberFormat::byte_format($number); //输出:97.7 MB
至此,测试成功,接下来就是要发布到packagist平台,给广大开发者见面了。
packagist.org 为 composer 安装包的平台(可用GitHub账号登录)。
现将本地代码提交到GitHub。
发布到 packagist 平台,登录后在首页的右上角有一个"Submit"按钮,点击即可进入开发包提交的界面。在“Repository URL (Git/Svn/Hg)”输入框中,输入GitHub项目的地址,点击“Check”按钮,稍微等待几秒钟,会显示验证成功,并显示出“Submit”按钮,点击即完成了开发包的提交了。
恭喜你,这个开发包可以在任何支持 composer 的PHP框架中使用了。
那么问题来了,刚才我们的包写的有的简陋,后期我们维护代码,新增代码还需要按照原来的方式操作一遍吗?
不!因为我们可以在GitHub平台设置代码更新,同时能让 packagist.org 自动更新,是不是很酷!
在GitHub中找到代码仓库,然后选择"settings" -> “Webhooks” ,默认是绑定自动更新的。
如果未绑定,可以这样设置:"settings" -> “Webhooks” -> "Add webhook" ->
Payload URL填写:“https://packagist.org/api/github”
Content type填写:“application/json”
Secret填写:“packagist提供的token”
其他的默认即可
点击“Add webhook” 完成。
至此,后期我们更新代码后会自动同步到 packagist.org 上。
//其他开发者可以这样获取包 composer require number-format/number-format:dev-master
为什么会有:dev-master,为什么引用其他的包不用这样设置?
因为我们引用的其他包都是稳定包,默认为:-stable。
是因为我们 composer.json 中设置了 minimum-stability 属性,这个可以了解下“版本约束”,在这就不多说了。
当我们在发布包后,如果获取不到报错怎么办,有可能是镜像的问题。
//查看全局设置 composer config -gl //第一种:设置国内镜像 composer config -g repo.packagist composer https://packagist.phpcomposer.com //第二种:设置国内镜像 composer config -g repo.packagist composer https://packagist.laravel-china.org //第三种:设置国内镜像 composer config -g repos.packagist composer //m.sbmmt.compkg.org
通过这篇文章,解决了上述提到的三个问题:
composer 是用来干嘛的?
composer 是如何安装的?
composer 包是如何开发的?
看完后,是不是觉得 Composer 包开发原来这么简单,作为骄傲的程序员,去开发属于自己的 Composer 包吧!
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!