Rumah >alat pembangunan >composer >教你用Composer管理相依性

教你用Composer管理相依性

藏色散人
藏色散人ke hadapan
2020-08-07 13:23:462910semak imbas

下面由composer教程栏目给大家介绍用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 &#39;vendor/autoload.php&#39;;
$phpmailer = new PHPMailer;

执行以后没有出错,表示phpmailer可以正常载入...接下来就看一下这几个档案的用途。

* composer.json

对使用者来说,这个档案主要是用来维护相依性。只要在档案中的"require"属性中加入一个物件,属性名称是套件名称,值就是版本。套件名称分成两个部分,第一个部分是vendor,第二个部分才是实际套件名称,使用"\"隔开。版本有几种规则:

  • 直接指定版号,例如2.7.3

  • 指定主版号之后,使用"*"指定次版号,例如2.7.*表示版号大于等于2.7.0,小于2.8.0的版本

  • 使用>、>=、!=、f2339f83c3fa60ae5167bfa1650820d2/acab04e509e5b64e7e2bc0d60ab53414的目录结构来组织。

    * 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!

Kenyataan:
Artikel ini dikembalikan pada:ithome. Jika ada pelanggaran, sila hubungi admin@php.cn Padam