教你用Composer管理相依性
Aug 07, 2020 pm 01:23 PM下面由composer教程栏目给大家介绍用Composer管理相依性,希望对需要的朋友有所帮助!
composer原本是Symfony这个PHP Framework中,设计来管理套件相依性的工具,因为简单又好用,现在已经成为一个独立的开放原始码计画。许多Framework以及程式库,现在都可以使用composer来安装管理。
其实在PHP上,很早就有这类的套件相依性管理工具,也就是PEAR。不过PEAR的设定过于繁复,也很难针对个别专案设定各自的相依性,所以现在Composer受到大众的喜爱。
这个简介只针对使用者,所以不会对于套件开发者需要知道的部份着墨。
* 安装
如果是Windows的使用者,只需要下载安装档并且执行安装:
https://getcomposer.org/Composer-Setup.exe
如果要手动安装,可以参考官网的指引:
http://getcomposer.org/doc/00-intro.md#installation-windows
如果是UNIX Like系统的使用者,可以透过这样的指令来安装:(需要先安装curl)
curl -sS https://getcomposer.org/installer | php
安装程式会检查PHP的设定,然后下载composer.phar到当前的目录。要执行composer的话,可以执行
php composer.phar
或是干脆把它改成执行档
>mv composer.phar composer >chmod +x composer
然后执行./composer。
不过如果再不同的工作目录中都需要的话,而且执行权限也没问题,也可以直接把档案复制到/usr/local/bin。
* 设定相依性
在专案中使用composer时,首先要产生一个composer.json档,里面指定要使用的套件与版本。例如需要用phpmailer来寄信时,可以这样指定:
{ "require": { "phpmailer/phpmailer": "~5.2.7" } }
然后执行安装:
eng-Hsu-Pingteki-MacBook-Air:2-1a fillano$ composer install Loading composer repositories with package information Installing dependencies (including require-dev) - Installing phpmailer/phpmailer (v5.2.7) Downloading: 100% Writing lock file Generating autoload files Feng-Hsu-Pingteki-MacBook-Air:2-1a fillano$
这样就安装好了。看一看到底装了什么:
Feng-Hsu-Pingteki-MacBook-Air:2-1a fillano$ ls -l total 16 -rw-r--r-- 1 fillano staff 66 10 11 18:15 composer.json -rw-r--r-- 1 fillano staff 2330 10 11 18:16 composer.lock drwxr-xr-x 5 fillano staff 170 10 11 18:16 vendor
根据目录中的档案可以发现,本来只有composer.json档案,安装之后多了一个composer.lock档案以及vendor目录。先看一下composer.lock的内容:
Feng-Hsu-Pingteki-MacBook-Air:2-1a fillano$ cat composer.lock { "_readme": [ "This file locks the dependencies of your project to a known state", "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file" ], "hash": "065c23f92d5ae579cb91beff67f41196", "packages": [ { "name": "phpmailer/phpmailer", "version": "v5.2.7", "source": { "type": "git", "url": "https://github.com/PHPMailer/PHPMailer.git", "reference": "8717a79565b2c0ed67f851d70e1949febdf3b226" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/8717a79565b2c0ed67f851d70e1949febdf3b226", "reference": "8717a79565b2c0ed67f851d70e1949febdf3b226", "shasum": "" }, "require": { "php": ">=5.0.0" }, "require-dev": { "phpdocumentor/phpdocumentor": "*", "phpunit/phpunit": "*" }, "type": "library", "autoload": { "classmap": [ "class.phpmailer.php", "class.pop3.php", "class.smtp.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "LGPL-2.1" ], "authors": [ ....下略
看起来是刚刚安装套件的资讯。
再看一下vendor目录有什么东西:
Feng-Hsu-Pingteki-MacBook-Air:2-1a fillano$ tree vendor vendor ├── autoload.php ├── composer │ ├── ClassLoader.php │ ├── autoload_classmap.php │ ├── autoload_namespaces.php │ ├── autoload_real.php │ └── installed.json └── phpmailer └── phpmailer ├── LICENSE ├── PHPMailerAutoload.php ├── README.md ├── changelog.md ├── class.phpmailer.php ├── class.pop3.php ├── class.smtp.php ├── composer.json ├── docs │ ├── Callback_function_notes.txt │ ├── DomainKeys_notes.txt │ ├── Note_for_SMTP_debugging.txt │ ├── extending.html │ ├── faq.html │ ├── generatedocs.sh │ └── pop3_article.txt ...下略
看起来除了phpmailer目录安装了phpmailer在里面之外,主要还有autoload.php档案以及composer目录。
原来要载入透过composer安装的套件,需要先引用vendor/autoload.php档案,然后就可以使用phpmailer。写一个简单的程式测试一下:
<?php require 'vendor/autoload.php'; $phpmailer = new PHPMailer;
执行以后没有出错,表示phpmailer可以正常载入...接下来就看一下这几个档案的用途。
* composer.json
对使用者来说,这个档案主要是用来维护相依性。只要在档案中的"require"属性中加入一个物件,属性名称是套件名称,值就是版本。套件名称分成两个部分,第一个部分是vendor,第二个部分才是实际套件名称,使用"\"隔开。版本有几种规则:
直接指定版号,例如2.7.3
指定主版号之后,使用"*"指定次版号,例如2.7.*表示版号大于等于2.7.0,小于2.8.0的版本
使用>、>=、!=、<=、<等在版号前,表示使用这些比较运算子来指定版号规则,可以使用多个规则并用","分开
使用"~"在版号前,表示下一个版号变动之前的版本。例如~2.7,表示版本大于等于2.7,小于3.0
在版号之后,还可以加上不同的stability flag,例如2.7.*@beta。可以使用的flag有:dev、alpha、beta、RC、stable
指定好版本后,执行composer install,就会根据指定的版本规则,安装最新版本的套件。
实际上每个有composer.json档案的目录,也是一个套件的根目录。不过如果是要做成给别人使用的套件,还需要加上许多设定,这些就不在讨论范围内了。
* composer.lock
在首次安装套件完毕后,会产生这个档案,里面记录了所安装套件的资讯。这个档案的真正作用是:如果目录中有这个档案,执行安装时,就不会去搜寻更新的版本,而是依照这个档案中记录的版本来安装。这个设计很重要,因为新版的套件很有可能与目前使用的版本不相容,如果不是使用同样版本,很难保证系统的稳定。过去在使用pear来管理套件时,如果不注意,就有可能发生升级导致的惨剧。
除此之外,只要把这个档案加入版本管理,所有开发者目录中也都会有这个档案,所以大家使用的套件版本也都会是一致的,这样可以减少开发时,使用套件版本不一导致的程式相容问题。
* vendor目录
所有套件都会放置在这个目录,并且依照<vendor name>/<package name>的目录结构来组织。
* vendor/autoload.php
只要引用这个档案,就可以载入套件中所有对外公开的类别。基本上每个套件都会定义自己的autoload规则,在安装时,composer会把这些规则加入,这样透过autoload.php就可以直接使用所有已安装的类别。
=====
从这些地方可以看到,Composer这个套件管理工具,在设计上已经做了很周密的考量,只需要简单指定要使用的套件及版本,一个指令就可以安装完毕,引用一个胆案之后就能使用,这样真的非常方便。所以目前几乎所有的程式库以及Framework,应该都逐渐在套用这个工具了。未来在开发PHP程式,恐怕最基本的工具也就是composer。
Atas ialah kandungan terperinci 教你用Composer管理相依性. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Artikel Panas

Alat panas Tag

Artikel Panas

Tag artikel panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Ciri lanjutan komposer: alias, skrip dan penyelesaian konflik

Pembangunan tangkas dan pengendalian kontena perkhidmatan mikro PHP

Pengisihan selari tatasusunan PHP: memanfaatkan CPU berbilang teras untuk meningkatkan prestasi

Apakah cara biasa untuk menukar tatasusunan kepada objek dalam PHP?

Bagaimana untuk menggunakan PHP CI/CD untuk lelaran dengan cepat?

Bagaimana untuk menggunakan cache Redis dalam penomboran tatasusunan PHP?

Penyelenggaraan dan kemas kini pembangunan perkhidmatan web PHP dan reka bentuk API
