Composer命令行集錦及小案例 - 1

直接說命令彷佛很枯燥,咱就來個命令 + 圖片,但願你們喜歡。php

一個好消息,週五sf講座 分析 composer.json文件各項,感興趣的能夠報名https://segmentfault.com/l/15...

啓動:命令行輸入composer 或 composer -v既能看到命令列表,一共35個。git

由於數量較多,分爲3篇說完,本篇介紹其中的 about、init、install、update、clear-cache/clearcache、archive、browsehome 這9個。github

about

這個命令實際意義不大,至關於composer的一句話簡介吧,也不須要其餘參數json

init

顧名思義,初始化你的composer項目,再簡單一點說就是嚮導的形式幫你生成一個composer.json,若是你喜歡手動建立composer.json也沒有問題。segmentfault

這個過程將你的項目也歸入了composer體系,composer.json裏包含項目的基本信息(好比做者,項目名稱等)和項目所須要的依賴(你vendor裏的那些庫),總之,經過init你新建了一個composer.json。瀏覽器

咱們看一下它的樣子緩存

alt

你暫時無需在乎composer.json裏那些key-value,咱們將在composer.json篇詳細講解。服務器

install & update

重要且很是經常使用的命令,這兩個命令須要放一塊兒說才更好理解,install - 安裝、update - 更新。說到這裏,咱們有必要順一順composer安裝一個擴展的邏輯,認真看,這將是本篇最最重要的部分。yii2

咱們要先科普下兩個文件,composer.json和composer.lockcomposer

  • composer.json記錄項目及依賴信息
  • composer.lock記錄項目及依賴當前版本信息

好比在composer.json有一條依賴是 "abei2017/yii2-emoji": "^1.0",那麼你在composer.lock能夠看到yii2-emoji當前用的是1.0.0版本,因此纔有了下面的邏輯。

當咱們composer install後,composer安裝器進行了以下操做

  1. 若是當前目錄下存在 composer.lock 文件,它會今後文件讀取依賴版本,進行處理。
  2. 若是你當前項目沒有 composer.lock 文件,它會從composer.json來讀取依賴版本並更新到依賴最新版本,最後生成composer.lock

composer.lock 是一個標尺。

固然若是你手動修改了composer.json,而後執行composer install後,會發現一個警告信息,看下圖。

alt

上面圖中警告出現的場景是我在composer.json中改了項目的name值,而後composer install。這個警告是告訴咱們Composer發現composer.json哈希值和composer.lock中記載的不一樣,所以不進行任何處理。

可是,可是,可是,咱們如何在這個場景下保證json和lock文件一致那,其實也很簡單,在咱們改動了composer.json後執行以下命令

composer update nothing // 或composer update --lock

上面的命令不會處理依賴(有例外,若是改動了require數據,則會處理依賴),僅僅保證json和lock文件的一致。

要記住,install命令處理依賴的依據是composer.lock文件,好比一個image擴展當前最新版本是3.0,lock文件記錄使用的是2.0,則install會按照2.0來安裝,就像官方所說「composer.lock確保了該庫的每一個使用者都能獲得相同的依賴版本。」

接下來咱們說說update,強大的update,永遠追求最新版本的update。

update命令負責更新,從上面咱們知道它能經過更新保證json和lock文件的一致,另外好比你在composer.json中修改了好比require(依賴)的增長或減小,執行 composer update也能直接幫你安裝或刪除相關依賴並保證json和lock文件的一致。

要記住的是 composer update 更新的是全部且更新到最新版本,若是要單獨更新某個庫,可使用 composer update abei2017/yii2-emoji 。

update是一把利劍,它讓不少人後悔莫已。

到此刻你會發現,install和update彷佛均可以安裝擴展,那麼咱們如何準確使用他們那?咱們如今溫習一下上面學習的結果,3條。

  • composer install 若有 composer.lock 文件,直接安裝,不然從 composer.json 安裝最新擴展包和依賴;
  • composer update 從 composer.json 安裝最新擴展包和依賴;
  • composer update new/package - 添加安裝 new/package, 能夠指定版本,如: composer update new/package ~3.5.

因此通常咱們以下部署程序

  1. 建立 composer.json,並添加依賴到的擴展包;
  2. 運行 composer install,安裝擴展包並生成 composer.lock;
  3. 提交 composer.lock 到代碼版本中;
  4. 克隆項目到生產環境,根目錄下直接運行 composer install 從 composer.lock 中安裝指定版本的擴展包以及其依賴;

一句話就是保證composer.lock的一致和穩定。其實最穩定安裝擴展的方法是requrie命令(下篇講到)。

另外上面是在思路方面爲你們介紹install 和 update,這兩個命令還有不少參數,剛阿北看了下到很好了解,這裏列出來不一一講解,有不懂留言便可。

install

  • --prefer-source: 下載包的方式有兩種: source 和 dist。對於穩定版本 composer 將默認使用 dist 方式。而 source 表示版本控制源 。若是 --prefer-source 是被啓用的,composer 將從 source 安裝(若是有的話)。若是想要使用一個 bugfix 到你的項目,這是很是有用的。而且能夠直接從本地的版本庫直接獲取依賴關係。
  • --prefer-dist: 與 --prefer-source 相反,composer 將盡量的從 dist 獲取,這將大幅度的加快在 build servers 上的安裝。這也是一個迴避 git 問題的途徑,若是你不清楚如何正確的設置。
  • --dry-run: 若是你只是想演示而並不是實際安裝一個包,你能夠運行 --dry-run 命令,它將模擬安裝並顯示將會發生什麼。
  • --dev: 安裝 require-dev 字段中列出的包(這是一個默認值)。
  • --no-dev: 跳過 require-dev 字段中列出的包。
  • --no-scripts: 跳過 composer.json 文件中定義的腳本。
  • --no-plugins: 關閉 plugins。
  • --no-progress: 移除進度信息,這能夠避免一些不處理換行的終端或腳本出現混亂的顯示。
  • --optimize-autoloader (-o): 轉換 PSR-0/4 autoloading 到 classmap 能夠得到更快的加載支持。特別是在生產環境下建議這麼作,但因爲運行須要一些時間,所以並無做爲默認值。

update

  • --prefer-source: 當有可用的包時,從 source 安裝。
  • --prefer-dist: 當有可用的包時,從 dist 安裝。
  • --dry-run: 模擬命令,並無作實際的操做。
  • --dev: 安裝 require-dev 字段中列出的包(這是一個默認值)。
  • --no-dev: 跳過 require-dev 字段中列出的包。
  • --no-scripts: 跳過 composer.json 文件中定義的腳本。
  • --no-plugins: 關閉 plugins。
  • --no-progress: 移除進度信息,這能夠避免一些不處理換行的終端或腳本出現混亂的顯示。
  • --optimize-autoloader (-o): 轉換 PSR-0/4 autoloading 到 classmap 能夠得到更快的加載支持。特別是在生產環境下建議這麼作,但因爲運行須要一些時間,所以並無做爲默認值。
  • --lock: 僅更新 lock 文件的 hash,取消有關 lock 文件過期的警告。
  • --with-dependencies 同時更新白名單內包的依賴關係,這將進行遞歸更新。

clear-cache & clearcache

這個要說下,和名字同樣,清空全部緩存,咱們來順一順。

當咱們使用require安裝一個擴展的時候,composer會在咱們機器上留一個緩存文件夾,通常是在 C:UsersAdministratorAppDataLocalComposer(須要執行一次require纔有會Composer目錄),它的基本結構以下

緩存文件夾

切記,不要和全局目錄混淆了,全局目錄的位置爲C:UsersAdministratorAppDataRoamingComposer,裏面含有好比全局配置文件,全局安裝的擴展包等。

下面咱們來看一下這個過程,首先我requrie了一個擴展包,以下圖
alt

如圖所示,這個過程是從服務器下載的,而後咱們看看緩存文件夾

alt

看到了吧,此刻在緩存文件夾的files子文件夾裏多了一個abei2017/yii2-emoji/xxx.zip的文件,這個就是緩存,接下來咱們刪除項目的yii2-emoji而後再安裝,看看有何不一樣了,看下圖

從緩存讀取
不同了吧,下一次從緩存讀取,你是否發現速度快了不少,那是必須的。

因此,有些問題你能夠清空緩存試試,好比版本問題等等。好了,咱們尚未說clear-cache命令那(clearcache一個意思)

composer clearcache

alt

流程明白了吧,記住,這個clearcache也同時刪除了C:UsersAdministratorAppDataLocal下的Composer文件夾自身。

archive

首先要知道這仍然是一個從遠程下載的過程,只不過下載後將其打包成了zip/tar壓縮包,好比你能夠打包某個擴展發給你的同事等。官方手冊的書寫方法會讓一些初學者誤會 對於包的指定是不能含有vendor的,接下來的命令是正確的

composer archive abei2017/yii2-emoji --format=zip --dir ./zip

結果以下圖,咱們一一說明下。

archive

  • 1 若是要指定版本,後面空格而後直接放版本號就能夠,不指定也沒事,會自動選擇穩定最新的。
  • 2 兩種格式,不寫則默認是tar,推薦使用zip。
  • 3 若是不指定就在當前項目的根目錄,你能夠指定當前項目的相對路徑,好比 ./zip,composer若是發現無此目錄會本身創建,固然你也能夠指定好比 D:zip,一個絕對的路徑。
  • 4 從4中你應該看到,這仍然是一個install的過程,不過你不用擔憂,雖然是install,可是它並無對你的vendor進行寫入,僅僅是生成了歸檔文件而已。

要注意:運行此命令生成歸檔文件並不會下載此擴展相關的依賴。

browse && home

瀏覽,這個命令我以爲最大的一個用處就是打開倉庫頁面、好比我輸入了

composer browse abei2017/yii2-emoji

命令行會調出瀏覽器並打開 https://github.com/abei2017/y... ,這個命令和另一個home命令差很少。

composer home abei2017/yii2-emoji

小結

本篇就說這些,其中update在後面還有講,尤爲是介紹requrie命令時候要和它有一些對比,也幫你們分析出當咱們安裝或升級一個擴展的時候,正確姿式爲什麼用require而不是update。


相關文章
相關標籤/搜索