教你用Compoer管理相依性

2025-07-08 10:45:01 4
  • 收藏
  • 管理
    下面由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 withpackage information Installing dependencies (including require-dev)-Installing phpmailer/phpmailer (v5.2.7)Downloading:100%Writinglock 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 66101118:15 composer.json -rw-r--r--1 fillano staff 2330101118:16 composer.lock drwxr-xr-x 5 fillano staff 170101118: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。写一个简单的程式测试一下: 复制、>=、!=、<=、<等在版号前,表示使用这些比较运算子来指定版号规则,可以使用多个规则并用","分开 使用"~"在版号前,表示下一个版号变动之前的版本。例如~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/autoload.php 只要引用这个档案,就可以载入套件中所有对外公开的类别。基本上每个套件都会定义自己的autoload规则,在安装时,composer会把这些规则加入,这样透过autoload.php就可以直接使用所有已安装的类别。 ===== 从这些地方可以看到,Composer这个套件管理工具,在设计上已经做了很周密的考量,只需要简单指定要使用的套件及版本,一个指令就可以安装完毕,引用一个胆案之后就能使用,这样真的非常方便。所以目前几乎所有的程式库以及Framework,应该都逐渐在套用这个工具了。未来在开发PHP程式,恐怕最基本的工具也就是composer。
    上一页:教你用SEO内链来提升优化系统的诀窍 下一页:教你正确识别百度蜘蛛
    全部评论(0)