首页 开发工具 composer 教你用Composer管理相依性

教你用Composer管理相依性

Aug 07, 2020 pm 01:23 PM
composer

下面由composer教程栏目给大家介绍用Composer管理相依性,希望对需要的朋友有所帮助!

教你用Composer管理相依性

composer原本是Symfony这个PHP Framework中,设计来管理套件相依性的工具,因为简单又好用,现在已经成为一个独立的开放原始码计画。许多Framework以及程式库,现在都可以使用composer来安装管理。

其实在PHP上,很早就有这类的套件相依性管理工具,也就是PEAR。不过PEAR的设定过于繁复,也很难针对个别专案设定各自的相依性,所以现在Composer受到大众的喜爱。

这个简介只针对使用者,所以不会对于套件开发者需要知道的部份着墨。

* 安装

如果是Windows的使用者,只需要下载安装档并且执行安装:

1

https://getcomposer.org/Composer-Setup.exe

登录后复制

如果要手动安装,可以参考官网的指引:

1

http://getcomposer.org/doc/00-intro.md#installation-windows

登录后复制

如果是UNIX Like系统的使用者,可以透过这样的指令来安装:(需要先安装curl)

1

curl -sS https://getcomposer.org/installer | php

登录后复制

安装程式会检查PHP的设定,然后下载composer.phar到当前的目录。要执行composer的话,可以执行

1

php composer.phar

登录后复制

或是干脆把它改成执行档

1

2

>mv composer.phar composer

>chmod +x composer

登录后复制

然后执行./composer。

不过如果再不同的工作目录中都需要的话,而且执行权限也没问题,也可以直接把档案复制到/usr/local/bin。

* 设定相依性

在专案中使用composer时,首先要产生一个composer.json档,里面指定要使用的套件与版本。例如需要用phpmailer来寄信时,可以这样指定:

1

2

3

4

5

{

"require": {

"phpmailer/phpmailer": "~5.2.7"

}

}

登录后复制

然后执行安装:

1

2

3

4

5

6

7

8

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$

登录后复制

这样就安装好了。看一看到底装了什么:

1

2

3

4

5

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的内容:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

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目录有什么东西:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

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。写一个简单的程式测试一下:

1

2

3

<?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>的目录结构来组织。

1

* vendor/autoload.php

登录后复制

只要引用这个档案,就可以载入套件中所有对外公开的类别。基本上每个套件都会定义自己的autoload规则,在安装时,composer会把这些规则加入,这样透过autoload.php就可以直接使用所有已安装的类别。

=====

从这些地方可以看到,Composer这个套件管理工具,在设计上已经做了很周密的考量,只需要简单指定要使用的套件及版本,一个指令就可以安装完毕,引用一个胆案之后就能使用,这样真的非常方便。所以目前几乎所有的程式库以及Framework,应该都逐渐在套用这个工具了。未来在开发PHP程式,恐怕最基本的工具也就是composer。

以上是教你用Composer管理相依性的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章标签

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Composer 的高级功能:别名、脚本和冲突解决 Composer 的高级功能:别名、脚本和冲突解决 Jun 03, 2024 pm 12:37 PM

Composer 的高级功能:别名、脚本和冲突解决

PHP 微服务容器化的敏捷开发与运维 PHP 微服务容器化的敏捷开发与运维 May 08, 2024 pm 02:21 PM

PHP 微服务容器化的敏捷开发与运维

PHP 代码版本控制与协作 PHP 代码版本控制与协作 May 07, 2024 am 08:54 AM

PHP 代码版本控制与协作

PHP 数组转对象的常见方式有哪些? PHP 数组转对象的常见方式有哪些? Apr 28, 2024 pm 10:54 PM

PHP 数组转对象的常见方式有哪些?

PHP 数组并行排序:利用多核 CPU 提升性能 PHP 数组并行排序:利用多核 CPU 提升性能 Apr 27, 2024 am 10:03 AM

PHP 数组并行排序:利用多核 CPU 提升性能

如何使用 PHP CI/CD 实现快速迭代? 如何使用 PHP CI/CD 实现快速迭代? May 08, 2024 pm 10:15 PM

如何使用 PHP CI/CD 实现快速迭代?

PHP数组分页中如何使用Redis缓存? PHP数组分页中如何使用Redis缓存? May 01, 2024 am 10:48 AM

PHP数组分页中如何使用Redis缓存?

PHP Web 服务开发与 API 设计的维护和更新 PHP Web 服务开发与 API 设计的维护和更新 May 06, 2024 pm 02:57 PM

PHP Web 服务开发与 API 设计的维护和更新

See all articles