composer 常用命令

北城以北 提交于 2020-11-13 03:00:27

php composer 常用操作总结

介绍

Composer 是 PHP 的 一个 项目级别的 依赖管理 工具。

安装 composer

curl -sS https://getcomposer.org/installer | php
# 或者
php -r "readfile('https://getcomposer.org/installer');" | php

总之,就是想办法 下载 https://getcomposer.org/installer 脚本,并用 PHP 运行它;以便在当前目录得到一个 composer.phar 文件。后续 composer 操作都是通过 php composer.phar(或简化为直接用 composer) 去运行。

如果你想更方便地全局使用,你也可以将其设为可执行(linux)或者写一个bat文件(windows)包装一下,并放置到系统目录。

windows 用户还有更简单的方式,直接下载: Composer-Setup.exe 进行全局安装。

创建 composer 包

只要你项目中已经有一个 composer.json 文件,那说明先帮你做好了创建工作。

否则请使用 php composer.phar init 命令,按交互引导创建。

如果你比较熟悉 composer.json 的格式说明,你也可以手动创建该文件。

配置依赖

在项目根目录的 composer.json 文件中,添加/编辑 依赖说明。

{
    "require": {
        "monolog/monolog": "1.0.*"
    }
}

格式为 包名: 版本

常用:

版本格式 说明
1.0.* 表示 1.0.x
~1.2 表示指定版本而小于下一个大版本,即 >=1.2,<2.0

更多版本格式说明请参考: phpcomposer - 基本用法#包版本 章节

安装依赖

在项目目录,已配置好 composer.json 后,运行:

# 如果使用了全局安装,可以直接使用 ( composer.phar install 或 composer install)
php composer.phar install

composer 将下载并安装对应依赖包到 vendor 目录(默认)。

安装逻辑:

如果存在 composer.lock 文件,严格按照该文件指定的包版本安装;否则,将读取 composer.json 根据规则下载满足条件的包,并创建一个记录了确定版本的 composer.lock 文件。

对于开发项目,建议提交该文件(composer.lock)到版本库,以确保各环境实际安装的依赖包版本相同。

优化国内下载速度:

# 可忽略 -g 参数,则配置仅在当前项目生效
# Packagist 
composer config -g repo.packagist composer https://packagist.phpcomposer.com
# 阿里云
# composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

更多 命令请参考: phpcomposer - 命令行 章节

发布 composer 包

请先按照格式规范配置你项目中的 composer.json 。

关注配置项:

  • name 格式:[供应商]/[库名],建议 小写字母+短横线命名;
  • license 根据实际选择适合的协议;
  • version 不建议配置该项。

发布的版本可以通过 tag 或者 分支 控制。如:

  • 打个 tag 为 v1.0.1 则表示存在这么一个确定版本;
  • 创建分支 v1.2 则表示存在一个版本 1.2.x-dev;特别的默认存在 dev-master。(如果分支名为一个合法版本,则对应版本 [分支名]-dev;否则对应版本 dev-[分支名])。

比较主流是将自己的包发布到 packagelist 上,以便全世界都可以使用:

首先请把你的代码放置到公网版本管理系统,如 github, gitee 等; 然后访问 https://packagist.org/ 注册自己的账号,并按引导提交即可。

更多详情请参考: phpcomposer - 库(资源包)章节

自建composer 仓库

有时公司内部使用,不方便发布到公网,也可以自建 composer 仓库管理。 推荐两种简单的方法:直接使用 git 仓库作为源 或者 使用 satis 统一管理包。

直接使用 git 仓库作为源

提交待发布的 composer 包代码到 git,注意名称 和 版本。 在使用包的项目 里 配置 composer.json 参考:

    // 添加/编辑 repositories 节点,增加包引用地址,参考如下:
    "repositories":[ 
       { 
           "type":"git", 
           "url":"http://internal.site/pkgs/demo.git"
       }
    ],

    // require 节点 添加包引用,参考如下:
    "require": {
        "mypkg/demo": "1.0.0"
    },

    // (如果内部 git 未配置 https 支持)↓
    // config 节点 配置取消强制 https 限制,参考如下:
    "config": {
        "secure-http": false
    }

使用 satis 统一管理包

好处是:避免每个项目使用都去添加 repositories 配置

安装:

composer create-project composer/satis:dev-master
php bin/satis build <configuration-file> <output-directory>

其中 configuration-file 类似 composer.json,主要包含引用包地址。如:

{
    "name": "My Repository",
    "homepage": "http://mysatis.site",
    "repositories": [
        { "type": "git", "url": "http://internal.site/pkgs/demo1.git" },
        { "type": "git", "url": "http://internal.site/pkgs/demo2.git" },
        {"packagist": false}
    ],
    "require-all" : true,
    "config":{"secure-http":false}
}

然后把 output-directory 添加到 nginx server,如 http://mysatis.site

项目引用时,不再需要配置如果 repositories,直接配置 mysatis.site 作为源,然后引用包即可。

{
    "repositories": [ { "type": "composer", "url": "http://mysatis.site" } ],
    "require": {
        "mypkg/demo1": "1.0.0",
        "mypkg/demo2": "dev-master"
    },
    "config" :{"secure-http":false}
}

疑难杂症

vendor 下载的某些包包含 .git 目录,无法提交到项目代码库

一般情况下,不建议 将 vendor 目录(或者你安装依赖的其它目录)添加到代码库。

如果一定要这么做,你有可能会踩到一个坑。对于某些没有发布 release 版本的依赖库,拉取下来的代码里,会包含 .git 目录。

而等你将 vendor 目录提交到自己代码库的时候,要么 git 会报错提示存在子仓库,要么提交上去之后该代码库目录是空的。

解决方案:

  1. 把该代码库下的 .git 添加到 .ignore 文件的忽略列表里,如:vendor/xxx/.git;
  2. 如果你是在提交过一次之后才发现需要忽略,则该目录已被git添加到索引。还需要手动清除一下。即: git rm --cached vendor/xxx/.git

参考文章

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!