Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Composer #3

Open
suhao opened this issue May 16, 2022 · 0 comments
Open

Composer #3

suhao opened this issue May 16, 2022 · 0 comments

Comments

@suhao
Copy link
Member

suhao commented May 16, 2022

简介

Composer 是PHP的一个依赖管理工具,用于申明和安装项目所依赖的代码库

  • 包管理器功能:全局安装时可以认为提供了包管理器的功能;但默认不认为Composer是包管理器,因为我们默认不全局安装任何东西
  • 依赖管理:在项目基础上管理依赖包,安装在项目的目录(例如vendor)中

声明依赖关系

创建一个composer.json文件,用于描述项目的依赖关系:

{
  "require": {
    "monolog/monolog": "1.2.*"
  }
}
  • 包名称:由提供商名称和项目名称组成,允许不同的人创建同名的项目名
  • 包版本:可以定义具体的确切版本号,或者范围(>=1.0, >=1.0,<2.0, >=1.0,<1.1|>=1.2),或者通配符(1.0.*),或者赋值运算符(~1.2,相当于>=1.2,<2.0)

安装和系统要求

运行Composer需要PHP 5.3.2+以上版本,我们将从包的来源直接安装,例如从git、svn、hg载入包。

  • 局部安装:将下载composer.phar(PHAR: PHP的归档)二进制文件到项目目录
  • 全局安装:安装后可以直接运行composer命令
  • 安装依赖包:执行composer install,将找到composer.json的组件最新版本,下载到vendor目录,同时创建一个composer.lock文件到项目根目录
  • composer.lock锁文件:composer会将安装时确切的版本号写入lock文件,锁定改项目的特定版本,推荐将锁文件提交到项目版本库中,若存在lock文件将忽略json中的定义
  • 更新依赖包:执行composer update,将根据composer.json获得组件库的最新版本并更新写入锁文件

自动加载

对于库的自动加载信息,Composer将生成一个 vendor/autoload.php 文件,引入此文件将会得到一个免费的自动加载支持:

require 'vendor/autoload.php'

PSR-4

我们可以在composer.jsonautoload字段中增加自己的autoloader:

{
  "autoload": {
    "psr-4": {"Acme\\": "src/"}
  }
}

Composer将注册一个PSR-4的autoloader到Acme命名空间,实现从命名空间到目录的映射;例如上例中src在我们的项目根目录,与vendor同级别,src/Foo.php文件应该包含Acme\Foo类。添加autoload字段后,需要再次运行install命令来生成vendor\autoload.php文件。

引用vendor\autoload.php文件将返回autoloader实例,可以将包含调用的返回值存储在变量中,并添加更多的命名空间,对于在一个测试套件中自动加载类文件时非常有用的:

$loader = require 'vendor/autoload.php';
$loader->add('Acme\\Test\\', __DIR__);

PSR-4 在键下定义从命名空间到路径的映射,相对于包根目录,当自动加载一个类(如指向目录的命名空间前缀)时,自动加载程序将查找已命名的文件并将其包含进来

classmap:允许类被自动加载,即使不符合PSR-0规范

classmap引用所有组合,都会在install/update过程中生成,并存储在文件中:

{
  "autoload": {
    "classmap": ["src/", "lib/", "file.php"]
  }
}

Files

如果想要明确指定文件,在每次请求时都载入,可以使用files的autoloading,通常作为函数库的载入方式(非类库):

{
  "autoload": {
    "files": ["src/functions.php"]
  }
}

库:资源包

  • 每个项目都是一个包:目录中包含一个composer.json,整个目录就是一个包;当你添加一个require到项目中,就是创建一个依赖于其他库的包;可以通过composer.json中的name来定义包名
  • 平台软件包:安装在系统上,但并不由composer安装的包视为一个虚拟的平台软件包,包括PHP本身、PHP扩展和一些系统库

Composer命令行

  • 初始化:composer init
  • 安装:composer install
  • 更新:composer update
  • 申明依赖:composer require
  • 全局执行:composer global 命令
  • 搜索:composer search 包名
  • 展示:composer show 包名
  • 依赖性检测:composer depends
  • 创建项目:composer create-project ,类似于git clone命令后将包的依赖安装到它自己的vendor目录

资源库

Composer是一个依赖管理工具,它在本地安装一些资源包,本质是一些包含东西的目录,通常存储PHP代码,理论上可以是任何东西,并且包含一个描述(有一个名称和版本号)用于识别该包。

资源库

一个资源库是一个包的来源,它是一个packages/versions的列表,默认情况下将Packagist.org注册到Composer,可以在composer.json中申明更多的资源库。

Types

主资源库的类型位composer,使用一个单一的packages.json文件,包含所有的资源包的元数据。要引用一个composer资源库,只需要提供一个存放packages.json文件的目录路径,唯一必须的字段是packages,它的JSON结构如下:

{
  "packages": {
    "vendor/package-name": {
        "dev-master": {@composer.json},
    }
  }
}

PEAR

PEAR类型资源库,使得从任何PEAR渠道安装资源包成为可能。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant