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 入门 #62

Open
huliuqing opened this issue Aug 28, 2017 · 0 comments
Open

Composer 入门 #62

huliuqing opened this issue Aug 28, 2017 · 0 comments

Comments

@huliuqing
Copy link
Owner

huliuqing commented Aug 28, 2017

Composer 入门

一 Composer 是什么?

Composer 是 PHP 项目的依赖管理工具,用于管理项目中的 packagies 和 libraries ,使用Composer 可以轻而易举的管理依赖库的安装。

什么是依赖管理?

依赖管理是就单个项目来说的,我们在某个项目中声明了所依赖的库(libraries 或 packages)。使用依赖工具在本项目安装库后,如果新建另一个项目,则需要在新项目中重新定义相关依赖并安装。

你可以通过这篇文章,了解包管理工具与依赖管理工具区别

二 Composer 工作原理

执行原理

  • 项目在 composer.json 文件中定义若干依赖库
  • 其中某些库依赖于其它库
  • composer install 安装依赖时,将查找并安装所有对应版本依赖库到 vendor 目录

举例:

假定项目: Project 在 composer.json 文件中

定义依赖库: package1, package2, package3

同时:package1 在库内 composer.json 定义依赖 package1.1, package1.2
package2 在库内 composer.json 定义依赖 package2.1, package2.2
package3 在库内 composer.json 定义依赖 package3.1, package3.2

当执行 composer install 安装依赖时,查找并安装当前项目依赖库 package1, package2, package3
并依据 package1, package2, package3 各自定义的 composer.json 安装依赖库 package1.1, package1.2, package2.1, package2.2, package3.1, package3.2

三 声明依赖管理

声明依赖关系及定义 composer.json 依赖规则,composer.json 文件是 JSON 格式的定义了项目依赖及元数据的文件。

3.1 name 字段

发布项目时必须给定该字段即包的名称,name 是以 / 分隔的供应商名项目名 的包名

{
    "name": "monolog/monolog"
}

3.2 description 字段

发布项目时必须给定该字段即包的描述

{
    name: "monolog/monolog"
    "description": "Sends your logs to files, sockets, inboxes, databases and various web services"
}

3.3 keywords 字段

keywords 用于定义搜索时的关键词数组

{
    name: "monolog/monolog"
    "description": "Sends your logs to files, sockets, inboxes, databases and various web services",
    "keywords": ["log", "logging", "psr-3"]
}

3.4 authors 字段

authors 包含本包作者信息,是一个对象数组

单个作者对象可包含以下属性:
name: 作者的姓名,通常使用真名。
email: 作者的 email 地址。
homepage: 作者主页的 URL 地址。
role: 该作者在此项目中担任的角色(例:开发人员 或 翻译)。

{
    name: "monolog/monolog"
    "description": "Sends your logs to files, sockets, inboxes, databases and various web services",
    "keywords": ["log", "logging", "psr-3"],
    "authors": [
        {
            "name": "Jordi Boggiano",
            "email": "j.boggiano@seld.be",
            "homepage": "http://seld.be"
        }
    ]
}

3.5 type 字段

type 用户定义安装类型,默认为 library。此外还有 project, metapackage, composer-plugin

3.6 license 许可协议

3.7 homepage 项目主页

3.8 time 支持 YYYY-MM-DD 或 YYYY-MM-DD HH:MM:SS 格式的发布时间

查看更多

四 Composer 命令行工具

4.1 list: 获取所有 composer 命令及查看给定命令用法

在命令行终端执行下面命令,将获取帮助信息

composer
#
composer list

查看某个指定命令具体帮助信息:可执行

composer init -h
#
composer init --help

4.2 init: 初始化库

除了手动创建 composer.json 文件外,我们还可以执行 composer init 命令在命令行终端,进行交互式创建 composer.json 操作

{
    "name": "liuqing/composer-learn",
    "description": "composer,learn-composer",
    "type": "library",
    "authors": [
        {
            "name": "Hu liuqing",
            "email": "huliuqing1989@gmai.com"
        }
    ],
    "require": {}
}

4.3 install: 安装依赖

创建 composer.json 或执行 init 操作后,可以执行

composer install

将安装 composer.json require 字段定义的依赖库,安装目录为 vendor 目录,安装完成后将会生成 composer.lock 锁定文件

之后在执行 composer install 命令时将会从 composer.lock 文件读取相关依赖版本而不是直接读取 composer.json 文件

4.3 require: 声明依赖

使用 composer require 命令将新增依赖 package 到 composer.json 文件的 require 字段

如:

composer require monolog/monolog

会安装 monolog 日志库

4.4 search: 搜索相关库

使用命令 composer search 可以让我们在 packagist 搜索需要的依赖包

composer search flysystem

4.5 show: 列出项目安装的依赖库

composer show 会显示项目中安装的依赖库摘要,可以执行 composer show monolog/monolog 显示 monolog 库的具体信息

4.6 validate: 检测 composer.json 文件有效性

4.7 self-update: 升级 composer 至最新版

4.8 update: 升级依赖库值最新版本

4.9 create-project: 依据现有库创建项目

composer create-project --prefer-dist laravel/laravel MyLaravel
# 该命令将会创建一个 laravel 项目,项目名叫 MyLaravel

更多

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

No branches or pull requests

1 participant