PHP的依赖管理——Composer
2017-01-19 本文已影响404人
懒人成长
Composer
简介
Composer 是 PHP5 以上的依赖管理工具,用来对需要用到的功能模块进行统一管理,包括引用模块的版本、模块的安装和删除等等。它类似于 Java 语言中的 Maven和 Gradle,Node 语言的 NPM,Ruby 的 Gem 等。
安装
在终端中执行下面的命令即可获取到最新版本的 Composer
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('SHA384', 'composer-setup.php') === '55d6ead61b29c7bdee5cccfb50076874187bd9f21f65d8991d46ec5cc90518f447387fb9f76ebae1fbbacf329e583e30') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
或者使用 Homebrew 进行安装
brew install composer
引用
-
方式一
在项目目录中创建一个 composer.json 的文件,在文件中添加下面的代码。
{ "require": { "monolog/monolog": "1.0.*" } }
保存文件后,在终端中项目目录下执行命令
composer install
执行后就会安装 monolog 模块,并在项目目录中自动生成一个 vendor 目录,该目录下就包含着引用的 monolog 模块的信息。
-
方式二
可以直接在终端中执行命令composer require monolog/monolog
这样就得到了和方式一一样的结果。
开发时引用
在 composer.json 文件中添加 require-dev 的配置,表示的是这当中引用的模块是开发模式下使用的。
"require-dev": {
"monolog/monolog": "1.0.*"
}
再次在终端执行 composer update
命令时就会在 vendor 目录下出现 monolog 模块了。
如果有些模块不需要在生产环境下加载的话,可以将这些模块配置到 require-dev 中,然后在执行 composer update/install 时添加 --no-dev选项,命令如下。
composer install --no-dev
composer update --no-dev
版本号的设置
名称 | 实例 | 描述 |
---|---|---|
确切的版本号 | 1.0.2 | 指定确切的版本 |
范围 | >=1.0 | 通过使用比较操作符可以指定有效的版本范围。 有效的运算符:>、>=、<、<=、!= |
通配符 | 1.0.* | 使用通配符来指定一种模式。 1.0.与>=1.0,<1.1是等效的 |
波浪号运算符 | ~1.2.1 | ~1.2相当于>=1.2.1,<1.3.0 |
异或运算符 | ^1.2 | ^1.2相当于>=1.2,<2.0 |
自动加载
在自己的 php 文件中加入下面的代码。
require 'vendor/autoload.php';
这样 Composer 就会通过 vendor 目录下的 autoload.php文件对 vendor 目录中的模块进行自动加载。
创建项目
composer create-project vendor/project:version [target-directory]
composer create-project vendor/project [target-directory] [version]
例如在当前目录中创建 Laravel 项目,可以使用下面的命令
composer create-project laravel/laravel
运行 shell 命令
可以使用 composer 执行一些脚本命令,只需要将这些命令配置在 composer.json 文件的 script 下就可以了。
"scripts": {
"事件名称": "事件脚本",
"事件名称": [
"事件脚本1",
"事件脚本2"
]
}
事件名称 | 详细说明 |
---|---|
pre-install-cmd | 在 install 命令执行前触发。 |
post-install-cmd | 在 install 命令执行后触发。 |
pre-update-cmd | 在 update 命令执行前触发。 |
post-update-cmd | 在 update 命令执行后触发。 |
pre-status-cmd | 在 status 命令执行前触发。 |
post-status-cmd | 在 status 命令执行后触发。 |
pre-package-install | 在资源包安装前触发。 |
post-package-install | 在资源包安装后触发。 |
pre-package-update | 在资源包更新前触发。 |
post-package-update | 在资源包更新后触发。 |
pre-package-uninstall | 在资源包被卸载前触发。 |
post-package-uninstall | 在资源包被卸载后触发。 |
pre-autoload-dump | 在自动加载器被转储前触发,无论是 install/update 还是 dump-autoload 命令都会触发。 |
post-autoload-dump | 在自动加载器被转储后触发,无论是 install/update 还是 dump-autoload 命令都会触发。 |
post-root-package-install | 在 create-project 命令期间,根包安装完成后触发。 |
post-create-project-cmd | 在 create-project 命令执行后触发。 |