Composer

PHP-FIG

PHP-FIG(PHP Framework Interop Group, PHP框架可互用性小组)可理解为PHP通用性框架小组,他们制定PHP编码规范(PSR, Proposing a Standards Recommendation)。此小组从2009年开始,又几位框架开发者所组成,一直扩展到目前20多位成员,原名为PHP Standards Group。小组成立的最主要原因是希望PHP能够 有个最低程度的共同编码风格可以依循,以避免各家发展的写法。

PSR

PSR(PHP Standard Recommendations, PHP标准规范)是PHP-FIG组织制定的PHP规范,是PHP开发的实践标准。项目的目的在于:通过框架作者或代表之间讨论,以最低程度的限制,制定一个协作标准,各个框架遵循统一的编码规范,编码各家自信发展的风格阻碍PHP的发展,解决这个层序设计师由来已久的困扰。

Composer

Composer是PHP的安装包管理工具,服务于PHP生态系统,包括Composer和Packagist两部分。

Composer 是由 Jordi Boggiano 和 Nils Aderman 创作的命令行工具,作用是为项目自动安装所依赖的开发包。

Composer 理念借鉴自 npmbundlercomposer包含了一个依赖解析器用来处理开发包之间复杂的依赖关系,还包含下载器、安装器等。

Packagist是Composer的默认开发包仓库,类似如Java的maven、Python的pip、Node.js的npm、前端有bower等。

packagist

下载安装

安装Composer要求

  • php 版本大于 5.5.9
  • php开启openssl扩展
# 创建目录并进入
$ mkdir composer && cd composer

# 下载composer
$ php -r "copy('http://install.phpcomposer.com/installer','composer-setup.php');"

# 下载composer
$ php -r "readfile('https://getcomposer.org/installer');" | php
# 上述命令不行将https替换为http
$ php -r "readfile('http://getcomposer.org/installer');" | php


# 安装composer
$ php composer-setup.php
Some settings on your machine make Composer unable to work properly.
Make sure that you fix the issues listed below and run this script again:
# 需php.ini中开启openssl扩展
The openssl extension is missing, which means that secure HTTPS transfers are impossible.
If possible you should enable it or recompile php with --with-openssl

# 安装composer
$ php composer-setup.php
All settings correct for using Composer
Downloading...

Composer (version 1.6.5) successfully installed to: D:\composer\composer.phar
Use it: php composer.phar

# 关于composer
$ composer about
Composer - Package Management for PHP
Composer is a dependency manager tracking local dependencies of your projects and libraries.
See https://getcomposer.org/ for more information.

# 查看composer版本
$ composer -V
Composer version 1.2.1 2016-09-12 11:27:19

# windows制作bat文件并将composer目录加入环境变量
$ vim composer.bat
@php "%~dp0composer.phar" %*
$ echo @php "%~dp0composer.phar" %* > composer.bat

切换源

查看镜像地址

$ composer config -gl repo.packagist

安装Composer后修改全局配置文件,采用中国镜像,加快下载速度。

$ composer config -g repo.packagist composer https://packagist.phpcomposer.com

项目操作

初始化项目

# 初始化生成composer.json
$ composer init
$ cat composer.json
{
    "name": "laravel/laravel",
    "description": "The Laravel Framework.",
    "keywords": ["framework", "laravel"],
    "license": "MIT",
    "type": "project",
    "require": {
        "php": "^7.1.3",
        "fideloper/proxy": "^4.0",
        "laravel/framework": "5.6.*",
        "laravel/tinker": "^1.0"
    },
    "require-dev": {
        "filp/whoops": "^2.0",
        "fzaninotto/faker": "^1.4",
        "mockery/mockery": "^1.0",
        "nunomaduro/collision": "^2.0",
        "phpunit/phpunit": "^7.0"
    },
    "autoload": {
        "classmap": [
            "database/seeds",
            "database/factories"
        ],
        "psr-4": {
            "App\\": "app/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "Tests\\": "tests/"
        }
    },
    "extra": {
        "laravel": {
            "dont-discover": [
            ]
        }
    },
    "scripts": {
        "post-root-package-install": [
            "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
        ],
        "post-create-project-cmd": [
            "@php artisan key:generate"
        ],
        "post-autoload-dump": [
            "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
            "@php artisan package:discover"
        ]
    },
    "config": {
        "preferred-install": "dist",
        "sort-packages": true,
        "optimize-autoloader": true
    },
    "minimum-stability": "dev",
    "prefer-stable": true
}

安装依赖

$ composer install

从当前目录读取composer.json处理依赖后,在当前目录自动创建vendor目录,并将require配置项中的依赖包下载安装到vendor目录下。

若当前目录存在composer.lock则从它读取依赖版本,而非composer.json,以确保依赖的版本。若没有composer.lock则处理往后会自动创建。

更新依赖

# 获取依赖的最新版本并升级composer.lock
$ composer update

# 使用composer安装时,若出现卡慢情况可添加-vvv参数,查看具体安装进度。
$ composer update -vvv

Composer的类采用PSR-4标准,Composer会自动生成vendor/autoload.php文件用于自动加载,利用它可自动引入文件并完成类库的自动加载。

引入类库

$ composer require 厂商/类库=版本
$ composer require phpmailer/phpmailer

引入类库的配置文件格式

{
  "require":{
    "厂商/类库":"版本"
  }
}

# 示例
{
    "require": {
        "php": "^7.1.3",
        "fideloper/proxy": "^4.0",
        "laravel/framework": "5.6.*",
        "laravel/tinker": "^1.0"
    }
}

卸载类库

$ composer remove phpmailer/phpmailer

搜索依赖

# 搜索依赖
$ composer search monolog
# 列出依赖
$ composer show

# 检测composer.json是否有效
$ composer validate

# 升级composer
$ composer self-update

# 查看配置
$ composer config --list

# 打印自动加载索引,更新autoloader,优化项目的自动加载。
$ composer dump-autoload

安装Laravel

# 安装Laravel
$ composer create-projecct --prefer-dist laravel/laravel lrv

# 安装Laravel并指定版本
$ composer create-project --prefer-dist laravel/laravel lrv 5.5.*
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,406评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,732评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,711评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,380评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,432评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,301评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,145评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,008评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,443评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,649评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,795评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,501评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,119评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,731评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,865评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,899评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,724评论 2 354

推荐阅读更多精彩内容

  • 是什么 如果你知道yum、apt-get、npm、bower等命令中的一种或者多种,那么,你也能很快知道compo...
    旱魃一样阅读 3,129评论 0 9
  • 缘起 Composer 是 PHP 的一个包管理和包依赖管理的工具 ( 官方的定义是 "Dependency Ma...
    patiencing阅读 6,482评论 2 3
  • Composer是一个非常流行的PHP包依赖管理工具,已经取代PEAR包管理器,对于PHP开发者来说掌握Compo...
    dreamer_lk阅读 2,411评论 0 15
  • # 为什么要学习composer? 由于我们要学习的laravel框架底层是syfomy框架。syfomy框架底层...
    Yu_b29b阅读 661评论 0 0
  • Composer是一个非常流行的PHP包依赖管理工具,已经取代PEAR包管理器,对于PHP开发者来说掌握Compo...
    bycall阅读 2,177评论 0 1