# packagist [packagist](https://packagist.org) 是 Composer 的主要资源库。 一个 Composer 的库基本上是一个包的源:记录了可以得到包的地方。Packagist 的目标是成为大家使用库资源的中央存储平台。这意味着你可以 require 那里的任何包。 当你访问 packagist website (packagist.org),你可以浏览和搜索资源包。 # `composer.json`文件和`vendor`目录 项目中使用 Composer获取的组件,只需要一个 `composer.json `文件生命依赖关系就可以了。该文件包含了项目的依赖和其它的一些元数据。 `vendor`目录下存放拉下来的`composer`组件包。 # 关于` require Key` 第一件事情(并且往往只需要做这一件事),你需要在` composer.json `文件中指定 `require key` 的值。你只需要简单的告诉 Composer 你的项目需要依赖哪些包。 { "require": { "monolog/monolog": "1.0.*" } } 你可以看到, `require `需要一个 包名称 (例如 `monolog/monolog`) 映射到 包版本 (例如 1.0.*) 的对象。 # 包名称 包名称由供应商名称和其项目名称构成。通常容易产生相同的项目名称,而供应商名称的存在则很好的解决了命名冲突的问题。它允许两个不同的人创建同样名为 json 的库,而之后它们将被命名为 `igorw/json `和 `seldaek/json`。 这里我们需要引入 `monolog/monolog`,供应商名称与项目的名称相同,对于一个具有唯一名称的项目,我们推荐这么做。它还允许以后在同一个命名空间添加更多的相关项目。如果你维护着一个库,这将使你可以很容易的把它分离成更小的部分。 # 包版本 在前面的例子中,我们引入的 monolog 版本指定为 1.0.*。这表示任何从 1.0 开始的开发分支,它将会匹配 `1.0.0、1.0.2 `或者` 1.0.20`。 ## 版本约束 可以用几个不同的方法来指定。 | 名称 | 实例 | 描述 | | --- | --- | --- | | 确切的版本号 | 1.0.2 | 你可以指定包的确切版本。 | | 范围 | >=1.0 >=1.0,<2.0 >=1.0,<1.1,>=1.2 | 通过使用比较操作符可以指定有效的版本范围。有效的运算符:>、>=、<、<=、!=。你可以定义多个范围,用逗号隔开,这将被视为一个逻辑AND处理。一个管道符号,将作为逻辑OR处理。AND 的优先级高于 OR。 | | 通配符 | 1.0.* | 你可以使用通配符*来指定一种模式。1.0.*与>=1.0,<1.1是等效的。 | | 赋值运算符 | ~1.2 | 这对于遵循语义化版本号的项目非常有用。~1.2相当于>=1.2,<2.0。 | ## 下一个重要版本(波浪号运算符) `~` 最好用例子来解释:` ~1.2 `相当于` >=1.2,<2.0`,而 `~1.2.3 `相当于` >=1.2.3,<1.3`。正如你所看到的这对于遵循 语义化版本号 的项目最有用。一个常见的用法是标记你所依赖的最低版本,像 `~1.2 `(允许1.2以上的任何版本,但不包括2.0)。由于理论上直到2.0应该都没有向后兼容性问题,所以效果很好。你还会看到它的另一种用法,使用 `~ `指定最低版本,但允许版本号的最后一位数字上升。 注意: 虽然 2.0-beta.1 严格地说是早于 2.0,但是,根据版本约束条件, 例如 ~1.2 却不会安装这个版本。就像前面所讲的 ~1.2 只意味着 .2 部分可以改变,但是 1. 部分是固定的。 ## 稳定性 默认情况下只有稳定的发行版才会被考虑在内。如果你也想获得 RC、beta、alpha 或 dev 版本,你可以使用 稳定标志。你可以对所有的包做 `最小稳定性` 设置,而不是每个依赖逐一设置。 # 安装依赖包 推荐使用`install`命令 composer install 接着前面的例子,这将会找到依赖组件的指定版本,并将它下载到 vendor 目录。 > 如果你正在使用Git来管理你的项目, 你可能要添加 vendor 到你的 .gitignore 文件中。 你不会希望将所有的代码都添加到你的版本库中。另一件事是 install 命令将创建一个 composer.lock 文件到你项目的根目录中。 # composer.lock - 锁文件 在安装依赖后,Composer 将把安装时确切的`版本号`列表写入 composer.lock 文件。这将锁定改项目的特定版本。 请提交你应用程序的 composer.lock (包括 composer.json)到你的版本库中 这是非常重要的,因为 `install `命令将会检查锁文件是否存在,如果存在,它将下载指定的版本(忽略` composer.json` 文件中的定义)。 这意味着,任何人建立项目都将下载与指定版本完全相同的依赖。你的持续集成服务器、生产环境、你团队中的其他开发人员、每件事、每个人都使用相同的依赖,从而减轻潜在的错误对部署的影响。即使你独自开发项目,在六个月内重新安装项目时,你也可以放心的继续工作,即使从那时起你的依赖已经发布了许多新的版本。 如果不存在 composer.lock 文件,Composer 将读取 composer.json 并创建锁文件。 这意味着如果你的依赖更新了新的版本,你将不会获得任何更新。此时要更新你的依赖版本请使用 update 命令。这将获取最新匹配的版本(根据你的 composer.json 文件)并将新版本更新进锁文件。 compose update 如果只想安装或更新一个依赖。 compose update monolog/monolog 还有更多关于composer的操作,推荐查看: [phpcomposer中文文档](http://docs.phpcomposer.com/) [composer命令全解](http://composer.json.jolicode.com/)