composer

Composer 国内镜像源:https://packagist.phpcomposer.com

软件包列表:https://packagist.org/
最受欢迎的PHP库: https://phptrends.com/top

Composer 中文文档:(http://docs.phpcomposer.com/)

composer require --prefer-dist yiisoft/yii2-jui

如果安装速度太慢,可以追加参数 -vvv

关于镜像源

如果选择 packagist.org 的国内镜像 https://pkg.phpcomposer.com/ ,就需要配合使用插件 fxp/composer-asset-plugin 来下载 bower 和 npm 资源。此方案的缺点在于 https://api.github.com/repos/ 下载bower 和 npm 资源太慢。

composer.json

"config": {
        "process-timeout": 1800,
        "fxp-asset": {
            "enabled": true
        }
    },
    "repositories": [
        {
            "type": "composer",
            "url": "https://packagist.laravel-china.org"
        }
    ]

如果选择了 asset-packagist.org ,就不需要 fxp/composer-asset-plugin,因为 https://asset-packagist.org/ 会把 bower 和 npm 包当做 native 的 composer 包一样安装。此方案的缺点在于,国内目前还没有镜像(2018年4月5日),所以下载依然很慢。

"config": {
        "process-timeout": 1800,
        "fxp-asset": {
            "enabled": false
        }
    },
    "repositories": [
        {
            "type": "composer",
            "url": "https://asset-packagist.org"
        }
    ]

最佳实践:即使使用了 composer 的国内镜像源,如果没有新的 bower 包需要安装,fxp-asset 最好置为 false。因为开启 fxp-asset,会严重拖慢 composer install 速度,浪费时间。应该只在需要安装新的 bower 包才启用 fxp-asset。也就是:

"config": {
        "process-timeout": 1800,
        "fxp-asset": {
            "enabled": false
        }
    },
    "repositories": [
        {
            "type": "composer",
            "url": "https://packagist.laravel-china.org"
        }
    ]

记得压缩打包 vendor/bower-asset

生产环境

--no-dev 跳过 require-dev 字段中列出的包

安装 composer.lock 中既定的版本:

composer install --no-dev && composer dump-autoload --optimize

安装新的包:

composer require "foo/bar:1.0.0"

升级指定包:

composer require "foo/bar:1.0.0"

优化一下自动加载

composer dump-autoload --optimize

如果不小心在生产环境执行了 composer install 把开发依赖也安装了,可以再次执行 composer update --no-dev 就可以移除开发依赖。

composer install --prefer-dist -vvv

开发环境

安装 composer.lock 中既定的版本:

composer install --prefer-dist

安装扩展包生产环境使用

composer require --prefer-dist yiisoft/yii2-jui

安装扩展包开发环境使用

composer require --dev --prefer-dist yiisoft/yii2-debug
composer require --dev --prefer-dist yiisoft/yii2-gii

composer update

禁止使用composer update --no-devcomposer update。因为这样会把所有的包都更新到最新版本,如果包之间不兼容(大多数情况都是),项目就会 crash 掉。

正确的做法是使用 require 指定包的特定版本。例如,项目中当前包 "sami/sami": "3.0." 需要更新到 "sami/sami": "3.2."

composer require --prefer-dist "sami/sami:3.2.*"

或者仅仅对特定包升级到最新版本:

composer update --prefer-dist yiisoft/yii2 yiisoft/yii2-composer bower-asset/inputmask

安装和配置 Composer

安装 Composer注意,php 需要 5.6 及以上版本才能正常安装 composer)

1.1 通过国内镜像下载 composer

➜  ~ sudo wget https://dl.laravel-china.org/composer.phar -O /usr/local/bin/composer

或者:

# Become user root
➜  ~ sudo su

# Pipe the composer installer to php, and pass the installer some flags
➜  ~ curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer

2. 给 composer 执行权限

➜  ~ chmod a+x /usr/local/bin/composer
➜  ~ composer -v

3.1 全局配置 composer 中国镜像源

➜  ~ composer config -g repo.packagist composer https://packagist.laravel-china.org

3.2 配置 github token

进入 https://github.com/settings/tokens 点击 「Generate new token」 新建一个 Token,不用勾选任何权限,直接生成 Token,然后复制粘贴这个值就 OK 了。

composer config --global --auth github-oauth.github.com <token>

或者手动修改配置文件:/home/vagrant/.config/composer/auth.json

配置完成后,bower 的资源就会通过 https://api.github.com/repos/xxx 从 github 下载。

4. 在项目目录下安装依赖

➜  $ composer install --prefer-dist -vvv

5. 更新 composer 需要 root 权限

➜  ~ sudo su
➜  ~ echo "PATH=\$PATH:/usr/local/bin" >> ~/.bashrc && source ~/.bashrc
➜  ~ composer selfupdate

6. 使用 composer 创建项目/安装包

composer 执行太慢时,可以在命令末尾添加 -vvv 参数输出详细日志,例如 :

composer install --prefer-dist -vvv
composer update --prefer-dist -vvv
composer --prefer-dist -vvv create-project laravel/laravel blog
composer --prefer-dist -vvv require psr/log

Q:为什么基于 Yii2 创建的项目安装依赖包时即便设置了中国镜像依然很慢?
A:yii2 通过 fxp/composer-asset-plugin 插件来安前端开发所用到依赖包,此插件会在安装完 php 依赖包之后再安装前端开发所依赖的 npm 或 bower 包, 所以导致再次前往 Github 下载资源,从而绕开了我们中国镜像。

composer require --prefer-dist foo/bar
composer require --dev --prefer-dist foo/bar

composer require --prefer-dist "foo/bar:1.0.0"
composer require --dev --prefer-dist "foo/bar:1.0.0"

composer 配置

修改项目根目录下的 composer.json

{
    "config": {
        "process-timeout": 1800,
        "github-oauth": {
            "github.com": "填入你的Github开发token"
        }
    }
}

常见问题

Failed to decode response: zlib_decode(): data error

根据提示,关闭 IPv6

使用 composer

安装包

composer require --prefer-dist 包名

创建项目

Yii2
composer global require "fxp/composer-asset-plugin:^1.3.1"

composer create-project --prefer-dist yiisoft/yii2-app-basic basic

composer create-project --prefer-dist yiisoft/yii2-app-advanced yii-application
Laravel
composer create-project laravel/laravel learnlaravel5  

部署应用时,生产环境请使用 --no-dev 选项

composer install --prefer-dist --no-dev
composer update --prefer-dist --no-dev

proc_open(): fork failed - Cannot allocate memory

free -m

如果 swap 为 0

,则创建 swap

Failed to decode response: zlib_decode(): data error

方法 1:根据提示,关闭 IPv6

方法 2

composer clear-cache

# 如果全是 ok,就更新下
composer diagnose
composer selfupdate

然后重新运行安装命令

方法2.修改 php 配置

在etc/php5目录下有三个文件夹:cgi cli fpm。我们这里修改 cli 目录下的配置文件

  • cli 是命令行运行php命令的配置
  • fpm(FastCGI 进程管理器)
# 查看配置
php -i

The php.ini used by your command-line PHP is: /etc/php5/cli/php.ini

zlib.output_compression = On
zlib.output_compression_level = 5
# 如果全是 ok,就更新下
composer diagnose
composer selfupdate

发布 composer 包

https://packagist.org/ 注册账户,新建包,填入 github 仓库地址,完成后,根据 auto update 提示,在 github 新建 集成服务来实现 github 发布 tag,作为版本发布 trigger。

第一个版本可以打上 tag 0.1,修正版本可以打 tag 0.1.1,需要注意的是不要加前缀 v

git tag -a 0.0.0
git push --tags

QQ--20180606185402

github readme 加入徽章,https://poser.pugx.org/ ,输入 vendor/project 搜索对应的项目,将代码加入 readme