composer常用高级技巧 作者: 灯小笼 时间: 2018-08-29 分类: 开发 [Composer](https://getcomposer.org/)作为一个常用的php包管理工具,已经成为PHP项目包管理事实上的标准了。大部分开源的php项目,都可以从里边找到composer.json的身影。基本的知识本文就不介绍了,而是挑选一些日常开发中遇到的比较棘手又常见的几个问题予以记录。如:使用镜像、使用私库、如何使用非http项目、如何修改版本号等等。 ## 使用镜像 使用composer的第一要素就是配置中国镜像,否则,你将一直抱怨这个产品根本没法使用,你对`composer`的影响就会一直处于停摆状态。 一般我们使用作为最经典的配置了。 ```bash composer config -g repo.packagist composer https://packagist.phpcomposer.com ``` 当然,为了便于其他成员可以迅速使用composer,也可以在项目的composer.json文件中直接配置好镜像。 ```bash composer config repo.packagist composer https://packagist.phpcomposer.com ``` 最后出来的结果其实就是在composer.json中增加如下配置: ```json "repositories": { "packagist": { "type": "composer", "url": "https://packagist.phpcomposer.com" } } ``` ## 使用私库 对于公司的开发而言,最重要的一个特征就是,为了保护公司数字资产,一般都会将代码保存在私库,只能被开发人员自己访问到。因此,在composer.json中配置私库就成为一个必备技能了。 其实,在上一部分也有涉及,就是需要自己将项目的来源地址配置在repositories中。 比如,我们公司的项目都是放在vpn的,没有发布到packagelist上去,因此,依赖的这种项目需要自己在composer.json中指定来源地址: ```bash composer config repositories.foo vcs http://yourdomain.com/foo/bar ``` 这个命令的说明如下: * `repositories.foo`参数的`foo`指明项目的代号,区别于其他项目即可,不用严格和composer.json中的项目名`name`保持一致。 * `vcs` 表示类型是vcs(version control system),该参数还可以填写"[composer](https://docs.phpcomposer.com/05-repositories.html#Composer)"、"PEAR"等。 * 最后一个参数就是你的私库地址了 最终,在composer.json文件中,我们会看到如下的配置内容: ```json "repositories": { "foo":{ "type": "vcs", "url": "http://yourdomain.com/foo/bar" } } ``` ## 如何使用非http项目 可以使用私库了,但是执行`composer install`的时候,却还是可能报错: ```bash dengxiaolong@develop php-service (master) $ composer update Loading composer repositories with package information Failed to update http://youdomain.com/foo/bar, package information from this repository may be outdated Updating dependencies (including require-dev) Package operations: 1 installs, 0 updates, 0 removals - Installing foo/bar (0.2.0): Cloning e90a573eb0 from cache [Composer\Downloader\TransportException] Your configuration does not allow connections to http://youdomain.com/foo/bar. See https://getcomposer.org/doc/06-config.md#secure-http for details. update [--prefer-source] [--prefer-dist] [--dry-run] [--dev] [--no-dev] [--lock] [--no-custom-installers] [--no-autoloader] [--no-scripts] [--no-progress] [--no-suggest] [--with-dependencies] [-v|vv|vvv|--verbose] [-o|--optimize-autoloader] [-a|--classmap-authoritative] [--apcu-autoloader] [--ignore-platform-reqs] [--prefer-stable] [--prefer-lowest] [-i|--interactive] [--root-reqs] [--] []... ``` 通过提示中的信息,我们打开该网址查找原因: > secure-http > > Defaults to true. If set to true only HTTPS URLs are allowed to be downloaded via Composer. If you really absolutely need HTTP access to something then you can disable it, but using Let's Encrypt to get a free SSL certificate is generally a better alternative. 原来,`secure-http`选项默认为true,我们需要修改一下,使得composer能支持非https的连接。 ```bash composer config secure-http false ``` 最后,composer.json中配置内容如下: ```json "config": { "secure-http": false } ``` ## 如何修改版本号 对于被公共调用的类库,需要通过版本号管理起来,才能使得代码更加稳定。如果直接依赖master分支的话,一旦框架版本升级,新发布的项目代码使用了新的未经过测试的版本,很容易使项目承受巨大的风险。因此,我们在通过composer依赖项目时,一般要求做到如下两点: * 项目一定需要定义版本号 * 项目版本号对应的commit值不能变 * 在composer.json依赖的项目必须写死版本号,不能出现^或者*等符号。 要定义项目的版本号,需要做到下面两个步骤: - 定义tag,tag可以定义成v1.0.3这样的格式。 - 同步修改composer.json文件中的version属性。 修改composer.json中的version,可以简单通过命令行实现: ```bash composer config version 1.0.3 ``` 可以发现,tag里边用v开头(一般不用数字直接开头),而在composer中则不用。 最后在composer.json中是这样呈现的: ```json { "name": "foo/bar", "version": "1.0.3", ... } ``` ![composer.png](https://c.dengxiaolong.com/blog/typecho/composer.png-typecho) 标签: php, composer