PHP面试中经常出现的composer 问题总结
前言
今天使用composer create-project
安装了一下thinkphp6
,以前是知道怎么用create-project
这个命令来安装项目的,很长一段时间没有使用了。还好自己还不算太老,脑子还可以动起来,索性就一遍看文档,一遍写下笔记。
(一)做什么的
到底什么时候会用到composer create-project
这个命令呢, 一般情况而言都是使用composer require来引入以来库,很少使用create-project
来安装项目,我记得上次使用这个命令还是用thinkphp5.1
写项目的时候。 那这句话到底有什么作用呢,下面引用Composer官网的一句话
你可以使用 Composer 从现有的包中创建一个新的项目。这相当于执行了一个 git clone 或 svn checkout 命令后将这个包的依赖安装到它自己的 vendor 目录。
从上面我们可以读到这些信息,它会做这样的两个操作:
从现有的包中创建一个新项目
安装这个包中的依赖到
vendor
也就是会创建一个新项目,并且会把这个项目中的依赖下载到vendor
目录中。那这个包是哪里来的呢,Composer
说了会在 packagist.org上查找你指定的包
(二)怎么用
知道做什么的,要怎么使用呢。常规的使用是这样的c
omposer create-project topthink/think think 5.1.*
,
对这个命令详细说一下,分为四部分讲解
第一部分就是
composer create-project
,告诉composer
我们要创建项目;第二部分
topthink/think
是包名,这个包名是在packagist.org网站可以搜索的到的,如果找不到也创建不了项目,composer
会报错;第三部分
think
, 这个是给创建的项目取一个名字,其实也就是一个目录名字,这个目录如果在的话,目录一定要为空,不然创建项目会失败,如果目录不存在会自动创建,目录起英文名字,中文会遇到一些不可描述的问题
第四部分,创建的项目的版本,因为我们创建的项目来自于packagist库中的包,包有不同的版本,以我创建的
topthink\think
为例就有5.1.*
、5.0.*
,如果我们不指定版本号,默认会使用新的版本来创建,当然也可以使用指定的版本5.1.38
。这里也可以使用通配符5.1.*
,赋值运算符~5.1
等等
(三)参数
composer create-project
这个命令有一些参数,比如--prefer-dist
当有可用的包从dist安装项目,--prefer-source
当有可用的项目从source安装
不仅我上面提到的参数,还有一些参数,但是在工作中一致没有用过,我也没有仔细研究过,即便是看了,当时了解了也忘记了,所以我的第一步操作是把composer create-project
这个命令学会,再来了解它的参数使用方法
(四)其他
也不是说使用composer
创建项目只能使用composer create-project
, 也可以使用git clone
把项目克隆到你的电脑上,方法多种多样,就看你使用哪一种,对于我而言我更喜欢使用composer create-project
来安装一个thinkphp
项目
(五)扩展:composer 包版本的范围指定
版本约束使用示例
:
和=
都可以版本约束可以加引号,也可以不加
composer文档使用的是
:
并且版本约束加引号(可以说更加规范吧)
composer create-project topthink/think:"5.1.*"
composer create-project topthink/think=5.1.*
关于扩展包的安装方法
那么,准备添加一个扩展包,install, update, require 三个命令都可以用来安装扩展包,选择哪一个才是正确的呢?答案是:使用 composer require 命令
另外,在手动修改 composer.json 添加扩展包后,composer update new/package 进行指定扩展包更新的方式,也可以正确的安装,不过不建议使用这种方法,因为,一旦你忘记敲定后面的扩展包名,就会进入万劫不复的状态,别给自己留坑呀。
上面的概念不论对新手或者老手来说,都比较混淆,主要记住这个概念:
原有项目新添加扩展的,都使用 composer require new/package 这种方式来安装。
(六)名词解释
composer install - 如有 composer.lock 文件,直接安装,否则从 composer.json 安装最新扩展包和依赖;
composer update - 从 composer.json 安装最新扩展包和依赖;
composer update vendor/package - 从 composer.json 或者对应包的配置,并更新到最新;
composer require new/package - 添加安装 new/package, 可以指定版本,如:composer require new/package ~2.5.
链接:https://juejin.im/post/6844903937011613704