PHP面試中經(jīng)常出現(xiàn)的composer 問題總結(jié)
前言
今天使用composer create-project 安裝了一下thinkphp6,以前是知道怎么用create-project這個(gè)命令來(lái)安裝項(xiàng)目的,很長(zhǎng)一段時(shí)間沒有使用了。還好自己還不算太老,腦子還可以動(dòng)起來(lái),索性就一遍看文檔,一遍寫下筆記。
(一)做什么的
到底什么時(shí)候會(huì)用到composer create-project 這個(gè)命令呢, 一般情況而言都是使用composer require來(lái)引入以來(lái)庫(kù),很少使用create-project 來(lái)安裝項(xiàng)目,我記得上次使用這個(gè)命令還是用thinkphp5.1寫項(xiàng)目的時(shí)候。 那這句話到底有什么作用呢,下面引用Composer官網(wǎng)的一句話
你可以使用 Composer 從現(xiàn)有的包中創(chuàng)建一個(gè)新的項(xiàng)目。這相當(dāng)于執(zhí)行了一個(gè) git clone 或 svn checkout 命令后將這個(gè)包的依賴安裝到它自己的 vendor 目錄。
從上面我們可以讀到這些信息,它會(huì)做這樣的兩個(gè)操作:
從現(xiàn)有的包中創(chuàng)建一個(gè)新項(xiàng)目
安裝這個(gè)包中的依賴到
vendor
也就是會(huì)創(chuàng)建一個(gè)新項(xiàng)目,并且會(huì)把這個(gè)項(xiàng)目中的依賴下載到vendor目錄中。那這個(gè)包是哪里來(lái)的呢,Composer說(shuō)了會(huì)在 packagist.org上查找你指定的包
(二)怎么用
知道做什么的,要怎么使用呢。常規(guī)的使用是這樣的composer create-project topthink/think think 5.1.*,
?對(duì)這個(gè)命令詳細(xì)說(shuō)一下,分為四部分講解
第一部分就是
composer create-project,告訴composer我們要?jiǎng)?chuàng)建項(xiàng)目;第二部分
topthink/think是包名,這個(gè)包名是在packagist.org網(wǎng)站可以搜索的到的,如果找不到也創(chuàng)建不了項(xiàng)目,composer會(huì)報(bào)錯(cuò);第三部分
think, 這個(gè)是給創(chuàng)建的項(xiàng)目取一個(gè)名字,其實(shí)也就是一個(gè)目錄名字,這個(gè)目錄如果在的話,目錄一定要為空,不然創(chuàng)建項(xiàng)目會(huì)失敗,如果目錄不存在會(huì)自動(dòng)創(chuàng)建,目錄起英文名字,中文會(huì)遇到一些不可描述的問題
第四部分,創(chuàng)建的項(xiàng)目的版本,因?yàn)槲覀儎?chuàng)建的項(xiàng)目來(lái)自于packagist庫(kù)中的包,包有不同的版本,以我創(chuàng)建的
topthink\think為例就有5.1.*、5.0.*,如果我們不指定版本號(hào),默認(rèn)會(huì)使用新的版本來(lái)創(chuàng)建,當(dāng)然也可以使用指定的版本5.1.38。這里也可以使用通配符5.1.*,賦值運(yùn)算符~5.1等等
(三)參數(shù)
composer create-project 這個(gè)命令有一些參數(shù),比如--prefer-dist當(dāng)有可用的包從dist安裝項(xiàng)目,--prefer-source當(dāng)有可用的項(xiàng)目從source安裝
不僅我上面提到的參數(shù),還有一些參數(shù),但是在工作中一致沒有用過(guò),我也沒有仔細(xì)研究過(guò),即便是看了,當(dāng)時(shí)了解了也忘記了,所以我的第一步操作是把composer create-project這個(gè)命令學(xué)會(huì),再來(lái)了解它的參數(shù)使用方法
(四)其他
也不是說(shuō)使用composer創(chuàng)建項(xiàng)目只能使用composer create-project, 也可以使用git clone把項(xiàng)目克隆到你的電腦上,方法多種多樣,就看你使用哪一種,對(duì)于我而言我更喜歡使用composer create-project來(lái)安裝一個(gè)thinkphp項(xiàng)目
(五)擴(kuò)展:composer 包版本的范圍指定

版本約束使用示例
:?和?=?都可以版本約束可以加引號(hào),也可以不加
composer文檔使用的是?
:?并且版本約束加引號(hào)(可以說(shuō)更加規(guī)范吧)
composer?create-project?topthink/think:"5.1.*"composer create-project topthink/think=5.1.*
關(guān)于擴(kuò)展包的安裝方法
那么,準(zhǔn)備添加一個(gè)擴(kuò)展包,install, update, require 三個(gè)命令都可以用來(lái)安裝擴(kuò)展包,選擇哪一個(gè)才是正確的呢?答案是:使用 composer require 命令
另外,在手動(dòng)修改 composer.json 添加擴(kuò)展包后,composer update new/package 進(jìn)行指定擴(kuò)展包更新的方式,也可以正確的安裝,不過(guò)不建議使用這種方法,因?yàn)?,一旦你忘記敲定后面的擴(kuò)展包名,就會(huì)進(jìn)入萬(wàn)劫不復(fù)的狀態(tài),別給自己留坑呀。
上面的概念不論對(duì)新手或者老手來(lái)說(shuō),都比較混淆,主要記住這個(gè)概念:
原有項(xiàng)目新添加擴(kuò)展的,都使用 composer require new/package 這種方式來(lái)安裝。
(六)名詞解釋
composer install - 如有 composer.lock 文件,直接安裝,否則從 composer.json 安裝最新擴(kuò)展包和依賴;
composer update - 從 composer.json 安裝最新擴(kuò)展包和依賴;
composer update vendor/package - 從 composer.json 或者對(duì)應(yīng)包的配置,并更新到最新;
composer require new/package - 添加安裝 new/package, 可以指定版本,如:composer require new/package ~2.5.
鏈接:https://juejin.im/post/6844903937011613704

