composer介绍

composer是php的一个依赖管理工具,在项目中声明所依赖的外部工具库,会自动安装这些工具库及所依赖的库文件。

对我等初阶工程狮来说,就是拉别人的代码,用别人的库,一个进阶版的cp命令 <( ̄︶ ̄)>

安装流程

curl -sS https://getcomposer.org/installer | php

然后当前文件夹下应该会有一个composer.phar文件,然后把它放到全局路径里或者在PATH里加入它的位置

mv composer.phar /usr/local/bin/composer

windows用户添加到环境变量里的PATH中

不会的这里有百度经验 https://jingyan.baidu.com/article/8ebacdf02d3c2949f65cd5d0.html

运行命令看看安装成功没有

composer --versio
//输出: Composer version 1.5.6 2017-12-18 12:09:18
//输出这种样子的就是成功了

也可以看个图,直接运行 composer命令:

composer

介绍下composer.json文件

{
"name": "HiPHP",
"description": "hi world",
"type": "Framework",
"keywords": [
"PHP",
"PHP FRAMEWORK"
],
"require": {
"php": ">5.3.0",
"catfan/Medoo": "*",
"monolog/monolog": "1.2.*"
},
"repositories": {
"packagist": {
"type": "composer",
"url": "https://packagist.phpcomposer.com"
}
}
}
  1. 这部分是一些自己项目的介绍,名称描述类型关键字
  2. 加载的第三方库,包括第三方库的版本
  3. 国内的镜像服务,由于众所周知的原因,使用国外的会很慢很卡,具体方法查看composer国内镜像的官网介绍。 https://pkg.phpcomposer.com/

引入一个新的包

搞个例子,我们还缺少一个正式的日志功能,php有个很牛x的开源日志库,我们这就使用composer把他加载进来。(开源就是光明正大让你copy过来的写好了的代码,然而cp太麻烦,于是大佬们就发明了composer一次行复制过来)。

这是github地址

https://github.com/Seldaek/monolog

这是是我们之前 composer.json 文件中requeire部分

"require": {
"php": ">5.3.0",
"catfan/Medoo": "*"
},

现在加上monolog的部分

  "require": {
"php": ">5.3.0",
"catfan/Medoo": "*",
"monolog/monolog": "1.2.*"
},

然后我们执行 composer update



打印出来的数据没问题,我们去看看vender里的文件,多了这么一个monolog的文件夹。

现在我们在代码里测试一下,这是修改之后的testCtrl控制器

namespace controller;
use Monolog\Logger;
use Monolog\Handler\StreamHandler; class testCtrl
{
public function index()
{
$log = new Logger('name');
$log->pushHandler(new StreamHandler('my.log', Logger::WARNING));
$log->warn('warn警告');
$log->err('err错误');
}
}

运行之后根目录下多出来一个文件,my.log,打开里边有这样的内容。

另一种加载第三方库的方式

还可以直接跑命令composer require

比如我们还是添加这个monolog库,把我们刚才修改的composer.json文件里的引入monolog的这一行删除掉,然后运行 composer update,会发现刚才自动下载的monolog文件夹消失了,回到了最初的状态。

然后我们运行

composer require monolog/monolog

看输出:



看看composer.json文件,发现已经多出了一行

"monolog/monolog": "^1.24"

版本详细到了1.24,比我们最开始指定的要详细一些,文件夹也出来了,代码也可以正常调用。

关于composer.lock

看一下我们的composer.lock,这是个运行了composer install或者update之后就存在的文件。

composer.json是用来配置我们要引入的库,那这个composer.lock是用来干嘛的呢?答案是,用来精确指定版本。

比如我们一开始手动添加版本的时候,添加的是1.2.*,这样我们在拉取的时候,可能会拉去1.2.1或者1.2.4,但加入他官方的版本升级了,之后使用这个项目的人,install的时候拉去的可能就是1.2.5了,说不定有一些不兼容的问题。于是compsoer便设计了一个lock文件,lock文件里会有完整的包信息和版本号。

关于compser.lock的具体情景:

  1. composer install 的时候会首先检查lock文件是否存在,如果存在,就按照composer.lock文件指定的版本,取拉取对应的版本,如果不存在,就拉取默认的版本,并且创建composer.lock文件
  2. 如果在composer.json文件中修改了版本号,一定要执行composer update,这样,composer.lock文件就会被更新。
  3. 团队开发的时候,一定要把composer.lock文件上传到仓库里,这样才能保证团队里的每一个成员的版本都是一致的。

composer常用命令汇总

  1. composer install
  2. composer update
  3. composer require 库名 [版本] 引入新库或者修改原来库版本
  4. composer selfupdate composer自身更新
  5. composer self-update --rollback 更新之后回退到上次的版本
  6. composer create-project 从现有的包里创建一个新的项目 如:composer create-project topthink/think=5.0.* tp5 --prefer-dist 就可以直接下载一个thinkphp5.0的代码
  7. composer search 包名 比如 composer search monolog就可以搜索composer的官方网站 https://packagist.org/ 上的有的包
  8. composer config composer配置命令,比如全局设置composer的国内镜像 composer config -g repo.packagist composer https://packagist.phpcomposer.com

php手撸轻量级开发(三)composer小白入门的更多相关文章

  1. php手撸轻量级开发(一)

    聊聊本文内容 之前讲过php简单的内容,但是原生永远是不够看的,这次用框架做一些功能性的事情. 但是公司用自己的框架不能拿出来,用了用一些流行的框架比如tp,larveral之类的感觉太重,CI也不顺 ...

  2. php手撸轻量级开发(二)框架加载

    先上图,有图有真相 1. 加载index文件 index文件是整个项目的唯一入口,任何请求进入项目都是走的index,只是带的参数不一样,然后再在index文件里加载其他文件,相当于把其他文件整个复制 ...

  3. 纯手撸web框架

    纯手撸web框架 一.Web应用的组成 接下来我们学习的目的是为了开发一个Web应用程序,而Web应用程序是基于B/S架构的,其中B指的是浏览器,负责向S端发送请求信息,而S端会根据接收到的请求信息返 ...

  4. 99%的程序员都在用Lombok,原理竟然这么简单?我也手撸了一个!|建议收藏!!!

    罗曼罗兰说过:世界上只有一种英雄主义,就是看清生活的真相之后依然热爱生活. 对于 Lombok 我相信大部分人都不陌生,但对于它的实现原理以及缺点却鲜为人知,而本文将会从 Lombok 的原理出发,手 ...

  5. 【分布式锁的演化】终章!手撸ZK分布式锁!

    前言 这应该是分布式锁演化的最后一个章节了,相信很多小伙伴们看完这个章节之后在应对高并发的情况下,如何保证线程安全心里肯定也会有谱了.在实际的项目中也可以参考一下老猫的github上的例子,当然代码没 ...

  6. 《Spring 手撸专栏》第 3 章:初显身手,运用设计模式,实现 Bean 的定义、注册、获取

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 你是否能预见复杂内容的设计问题? 讲道理,无论产品功能是否复杂,都有很大一部分程序员 ...

  7. 《Mybatis 手撸专栏》第7章:SQL执行器的定义和实现

    作者:小傅哥 博客:https://bugstack.cn - <手写Mybatis系列> 一.前言 为什么,要读框架源码? 因为手里的业务工程代码太拉胯了!通常作为业务研发,所开发出来的 ...

  8. 【Unity游戏开发】SDK接入与集成——小白入门篇

    一.简介 通常一款游戏开发到后期,一般都会涉及到第三方SDK的接入与集成,对于不熟悉SDK接入的同学来说,接SDK每次都是云里雾里,而熟悉SDK接入的同学又觉得不断地重复做接入SDK工作这样没有成就感 ...

  9. java web面试技巧,数据库面试,java web轻量级开发面试教程

    我最近看到一本比较好的讲java web方面面试的书,java web轻量级开发面试教程. 其中不仅用案例和视频讲述了Spring MVC,Hibernate, ORM等方面的技巧,而且还实际讲到了面 ...

随机推荐

  1. 【Linux】系统基本命令

    # lsb_release -a 查看系统版本# uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cp ...

  2. Matplotlib模块:绘图和可视化

    一.简单介绍Matplotlib 1.Matplotlib是一个强大的Python绘图和数据可视化的工具包 2.安装方法:pip install matplotlib 3.引用方法:import ma ...

  3. 【python】控制台输出颜色

    来源:http://www.cnblogs.com/yinjia/p/5559702.html 在开发项目过程中,为了方便调试代码,经常会向stdout中输出一些日志,默认的这些日志就直接显示在了终端 ...

  4. MySQL----数据库练习

    一.多对多的正反向查询 class Class(models.Model): name = models.CharField(max_length=32,verbose_name="班级名& ...

  5. Tmk吃汤饭

    问题 : Tmk吃汤饭 时间限制: 1 Sec  内存限制: 128 MB 题目描述 Tmk喜欢吃汤饭! Tmk喜欢吃汤饭!! Tmk喜欢吃汤饭!!! 汤饭窗口分点餐和取餐两个窗口,一位蜀黍负责点餐窗 ...

  6. asp.net core 验证码方案

    /// <summary> /// 图片验证码 /// </summary> public class VerificationCodeServices { /// <s ...

  7. 基本 TCP 的回射服务器

    实验一 代码:链接[01项目] 1. 先启动服务器,如图: 2. 然后启动客户端,如图: 3. 输出结果: [注意]:在服务器终止时,给父进程发送了一个SIGCHILD信号,这一点本例发生了,但是我们 ...

  8. Nginx 提示host not found in upstream 错误解决方法

      Nginx DNS resolver配置实例,本文讲解在proxy_pass 和 upstream server 通信的时候需要手动指定 resolver,本文就给出了配置实例. nginx 通过 ...

  9. SQL Server Profiler的简单使用

    SQL Server Profiler可以检测在数据上执行的语句,特别是有的项目不直接使用sql语句,直接使用ORM框架的系统处理数据库的项目,在调试sql语句时,给了很大的帮助. 之前写了使用SQL ...

  10. JavaScript中this 详解

    涵义 this 关键字是一个非常重要的语法点.毫不夸张地说,不理解它的含义,大部分开发任务都无法完成. 首先, this 总是返回一个对象,简单说,就是返回属性或方法“当前”所在的对象. this.p ...