若要在项目中使用 Composer 你需要一个 composer.json
文件。该文件描述了你的项目依赖关系和其他元数据。
require 键
首先(通常也是唯一)应该做的事情就是在你的 composer.json
文件中定义好 require
键。你应该简要告诉 Composer 你的项目所依赖的包有哪些。
{
"require" : {"paypal/rest-api-sdk-php" : "1.5.1"}
}
如上所示, require
获取了一个包名称 (例如 paypal/rest-api-sdk-php)映射到版本约束 (例如 1.5.1
)的 json 对象。
Composer 使用该信息去「版本库」中搜索,首先从你在 Composer.json 中设置的 repositories 键中所指定的仓库去寻找合适的文件,如果没有则在 Packagist 默认包库中寻找。
假设: 在上述示例中,因为没有在 composer.json 文件中找到 repositories 键以及设置版本库信息,所以 composer 认为
paypal/rest-api-sdk-php 包默认是在 Packagist 中。
包名称
包名由供应商名称和项目名称组成。通常情况下,这些名称是相同的,供应商名称的存在则很好的解决了命名冲突。 例如,它允许两个不同的人创建同样名为 Json
的库。 可以命名为 igorw/json
和 seldaek/json
包版本约束
在上面的示例中,我们引入的 rest-api-sdk-php版本指定为 1.5.1
安装依赖关系
使用 install
命令为你的项目安装已经定义好的依赖关系
composer install
运行该命令,composer
会根据情况通过以下两种方式中的一种进行安装
非 composer.lock
安装
如果你之前从未运行过命令就不会出现 composer.lock
文件,Composer 只会解析你在 composer.json
文件中列出的依赖关系并且下载最近版本到你项目 vendor
目录中 ( vendor
是项目中存放所有第三方代码的常规目录)。在我们上面的例子中,你最终会在 vendor/
paypal /
rest-api-sdk-php/
目录中看到所有 rest-api-sdk-php/
的源文件。如果 rest-api-sdk-php /
有任何依赖,也将会出现在 vendor/
中.
提示:如果你的项目中使用了 git
, 或许你希望将 vendor
添加到 .gitignore
中。因为将所有第三方包添加到版本库里面看起来很傻
当 Composer 完成安装后,它将把所有下载的包和确切的版本信息写入到 composer.lock
文件, 以此来锁定项目中第三方包的版本。你应该将 composer.lock
放在项目仓库中,以便该项目所有成员都能锁定在依赖关系相同的版本 。
下面是我第一次是composer install进行安装。
使用 composer.lock
文件安装
这里来到了第二种安装方式。如果你在运行 composer install
命令之前已经存在了 composer.lock
和 composer.json
文件, 这意味着你之前使用了 install
命令, 或者项目中的其他成员使用了 install
命令并将 composer.lock
文件提交至了项目中 (这是非常好的)。
无论使用哪种方式,存在 composer.lock
文件时使用 install
命令安装依赖时 composer.lock
都会解析并安装你在 composer.json
中所列出来的依赖,但是 Composer
会严格使用 composer.lock
文件列出来的版本来确保项目中的所有成员所安装的版本都是一致的。因此,你可以获得 composer.json
文件列出的所有文件,但是与此同时他们可能并不是最新的可用版本 (一些在 composer.lock
文件中列出的依赖可能会在这个文件创建之后释放了新的版本)。这个是设计上的,这样的设计可以确保你的项目不会因为一些依赖的改变而崩溃。
composer另外的安装方式 。当文件composer.json存在时。也可以使用下面命令安装
composer require magento/data-migration-tool:2.2.7
安装过程如下:
sun@karat:/var/www/html/sun/magento2Store2/test/migrationmagento227$ composer require magento/data-migration-tool:2.2.7
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
- Installing magento/data-migration-tool (2.2.7): Downloading (100%)
Package phpunit/phpunit-mock-objects is abandoned, you should avoid using it. No replacement was suggested.
Writing lock file
Generating autoload files
sun@karat:/var/www/html/sun/magento2Store2/test/migrationmagento227$
安装完成之后,查看composer.json。文件存在你需要的文件 migration-tool:2.2.7