2,PHP依赖管理:composer
2017-02-21 本文已影响66人
陈钢镚学财
作为一个年轻的开发者,熟练使用一些提高开发效率的工具是必须的。
composer是PHP的依赖管理工具,用于管理PHP的Libraries和packages。
它将优秀的php轮子统一管理在 packagist.org
packagist并不管理代码,简单地说,他就像一张表,一方面为composer提供了依赖名称,另一方面又映射到了github的某一个仓库
composer的用处
刚去了解composer的时候,光从字面上理解所谓的依赖管理,的确有些生硬。
但是,任何一个工具的诞生,背后必然是由时长需求所驱动。
既然如此,只要我们知道,用了composer,能给我们php开发带来怎样的意义,你就已经知道,composer到底是个什么东西了。
那么接下来,我们就从不用composer和用composer两种场景,来说说,composer到底能做什么。
-
不用composer
-
假设,你的项目A,需要用到了一些github上面的轮子,如分页类、curl类、日志类、数据库驱动类。这时候,想要将之应用到你的项目中,你的步骤可能是这样的:
- 在github上,分别找到这几个类所在的仓库,再一一下载下来
- 按照你项目的特性,将几个类分别或统一放入某个文件夹
- 你可能需要对下载下来的东西做一些修改,才能运用到你的项目中(如,命名空间)
-
这时候,你又要做另一个项目B了,需要这其中的某几个类,但出于一些原因,你不能直接复制项目A现有的框架,于是:
- 你又把项目A中的几个类库,复制出来
- 放到你新项目的文件夹中,进行改造,才能使用
这种情况下,项目A或项目B中,从github上找来的轮子,就是项目的依赖。通常,你都是手动的管理这些依赖,这会耗费你大量的精力,如果项目和轮子很多的话。
正是因为这样手动管理的成本太大,程序员又多是聪明绝顶之辈,composer(php的依赖管理工具)就应运而生了。
- 用composer
从上面的流程看来,很明显,你在不同的项目间,管理github上的轮子,是非常麻烦的,而且,万一操作过程中,你电脑卡了,文件复制到一半,那岂不是麻烦了?但如果你使用了composer,那就是另外一回事了。
- 新建一个composer.json文件,写好所有依赖
- 运行composer install
- 坐等完成
- require 'vendor/autoload.php';
- 接着就能直接用了
别看步骤好像很多,去体会一下,就知道妙处。
composer使用的核心
- composer.json
这是laravel的composer.json文件,注意到 autoload 的值了吗?这就是composer对你项目自动加载要求的命名空间
{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "MIT",
"type": "project",
"require": {
"php": ">=5.6.4",
"laravel/framework": "5.4.*",
"laravel/tinker": "~1.0"
},
"require-dev": {
"fzaninotto/faker": "~1.4",
"mockery/mockery": "0.9.*",
"phpunit/phpunit": "~5.7"
},
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\": "app/"
}
},
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
}
},
"scripts": {
"post-root-package-install": [
"php -r \"file_exists('.env') || copy('.env.example', '.env');\""
],
"post-create-project-cmd": [
"php artisan key:generate"
],
"post-install-cmd": [
"Illuminate\\Foundation\\ComposerScripts::postInstall",
"php artisan optimize"
],
"post-update-cmd": [
"Illuminate\\Foundation\\ComposerScripts::postUpdate",
"php artisan optimize"
]
},
"config": {
"preferred-install": "dist",
"sort-packages": true
}
}
- composer.lock
这个文件存在时,当其他环境得到这份安装包,则composer install时,会以一模一样的版本安装依赖。 - 执行
composer install ,它会自动帮你把依赖的类库全载入进来
- 自动加载
require 'vendor/autoload.php';
结语
本文只对composer做了一个入门级的总结,实际上,这已经适用于很多开发场景了。如果需要更深入的学习,可以看一下composer的中文文档。