如何正确使用composer

composer 是一款优秀的PHP依赖管理工具,正如pip之于python、gem之于ruby、gem之于node。无论任何一门语言,在现代软件开发实践中,依赖管理对于开发者而言都是必不可少的一个部分。敏捷开发强调不要重复造轮子,而依赖管理工具则提供了一种最容易的方式帮助我们方便的获取到别人造好的漂亮轮子,并且完美的安插到我们的项目之中。理想总是好的,但当理想落地成为现实的时候,一切又变得不那么美好,尤其是当它准备落在中国的土地上。

因为众所周知的原因,composer在国内并不好用,虽然在PHP社区里也有一些为国内开发者提供的镜像网站,然而经过尝试,这些镜像的表现也不尽人意,常常出现502等让开发者们叫苦不迭。简单分析一下,composer更新缓慢主要在两个地方,一是从packgist获取依赖包的下载地址时常常会卡死(也就是: Loading composer repositories with package information 这一步); 二是从github下载文件时,有时会因为网络请求超时而中断

自建镜像

Satis是composer官方提供的一个搭建私有镜像的工具, clone satis 到自己的服务器以后, 在配置文件中申明需要的依赖, 如:

 {
    "repositories": [ { "type": "composer", "url": "http://packages.example.org/" } ],
    "require": {
        "company/package": "1.2.0",
        "company/package2": "1.5.2",
        "company/package3": "dev-master"
    }
}

然后通过命令行工具生成镜像网站即可,如:

$ php bin/satis build satis.json web/

最后, 在使用时和其他的镜像一样, 在composer.json中用自己的镜像地址替换composer官方镜像地址:

{
    "repositories": [
        {"type": "composer", "url": "http://packages.example.org/"},
        {"packagist": false}
    ]
}

更多细节,可参考 官方文档

终极方案

statis所能解决的问题仅仅是第一步, 也就是从packagist获取下载地址的那个部分, composer 得到依赖包的地址以后,还需要从 Github 上去获取这些依赖。而有的时候,访问Github也会时不时出现超时的情况, composer更新到一半挂掉了, 这种时候satis并没有什么卵用。所以, 还是翻墙吧。

proxychains 是 *Nix 下一款好用的小工具, 在Ubuntu下,你可以直接通过 apt-get install proxychains 获取到。

proxychains默认的配置文件在/etc/proxychains.conf中,基本配置项包括代理方式(Http|Socks4|Socks5),代理模式(严格|动态|随机)及超时控制等,最后,你需要在行尾加入你要连接的代理客户端配置,如:

[ProxyList]
socks5 127.0.0.1 1080

通过 proxychains 你能让所有的命令行工具(如: composer)通过代理访问网络, 实现这一点, 你只需要在原本的命令之前加上 proxychains即可,如:

$ proxychains composer install 

composer-with-proxychains

现在看起来就满意多了。

最后,读者如果想要自己搭建VPN服务器,可以参考这篇博客《如何快速搭建一个VPN服务器》, 个人仍然推荐采用 shadowsocks 的方式来搭建VPN服务。

Show Comments