composer相關知識

參考資料

composer包基本信息

  • 包名name:包括供應商名稱和項目名稱;
  • 描述description:一個包的簡短描述,這個最長只有一行;
  • 版本version:X.Y.Z的形式,可選後綴:-dev -patch -alpha -beta 或 -RC,後綴之後可以再跟一個數字;
    • 可以從VCS(GIT,SVN,HG)的信息推出包的版本號,這種情況可以忽略version;
  • 安裝類型type:
    • libraray:默認類型,將文件複製到vendor目錄;
    • project:表示當前包是一個項目,不是一個庫;
    • metapackage:當一個空的包,包含依賴並且需要觸發依賴的安裝,這將不會對系統寫入額外的文件。因此這種安裝類型並不需要一個 dist 或 source;
    • composer-plugin: 一個安裝類型爲 composer-plugin 的包,它有一個自定義安裝類型,可以爲其它包提供一個 installler。
  • 關鍵字keywords:該包相關的關鍵詞數組,可用於搜索和過濾;
  • 項目主頁homepage:該項目網站的URL地址;
  • 版本時間time:發版時間,必須符合YYYY-MM-DD 或 YYYY-MM-DD HH:MM:SS格式
  • 許可協議license:可以是一個字符串或字符串數組,常見協議:Apache-2.0 BAD-2 Clause
  • 作者authors:對象數組,包含name,email,homepage,role
  • 支持support:獲取項目支持的相關信息
  • minimun_stability:限定了最小穩定性版本,默認爲stable
    • 穩定性標識:dev、alpha、beta、RC、stable
    • 作用:會對每個包的版本進行穩定性檢查,低於minimun-stability所設定的最低穩定性版本,將忽略

package links相關

以下所有對象,都應該是包名到版本的映射對象

{
    "require": {
        "monolog/monolog": "1.0.*"
    }
}
  • require和require-dev的區別

    • require:包含了生產環境所需的包,即運行代碼的必備包;
    • require-dev:這個列表是爲開發或測試等目的,額外列出的依賴。“root 包”的 require-dev 默認是會被安裝的。然而 install 或 update 支持使用 --no-dev 參數來跳過 require-dev 字段中列出的包。
    {
        "require": {
            "monolog/monolog": "1.0.*"
        }
        "require-dev": {
            "acme/fo": "~1.17"
        }
    }
    
  • require和require-dev支持穩定性標籤(@),允許在minimun_stability設定的範圍外做進一步的限制和擴展。

    {
        "require": {
            "monolog/monolog": "1.0.*@beta",
            "acme/foo": "@dev"
        }
    }
    
  • suggest:建議安裝的包,它們增強或能夠與當前包良好的工作。這些只是信息,並顯示在依賴包安裝完成之後,給你的用戶一個建議,他們可以添加更多的包。

    {
        "suggest": {
            "monolog/monolog": "Allows more advanced logging of the application flow"
        }
    }
    

autoload

  • 自動加載支持方式:PSR-0 autoloading,PSR-4 autoloading(推薦),classmap generation and files includes

  • PSR-4:定義了命名空間到實際路徑的映射。映射關係最終會存儲在vendor/composer/autoload_psr4.php

    {
        "autoload": {
            "psr-4": {
                "Foo\\": "src/",	 //比如Foo\\Bar\\Baz就去查找/src/Bar/Baz.php文件
                "Vendor\\Namespace\\": ""  //namespace 必須以\\結尾,避免被當做轉移字符處理
                "psr-4": { "Monolog\\": ["src/", "lib/"] } //多個文件夾的映射
            }
        }
    }
    
  • PSR-0:已廢棄,與PSR-4基本相同。映射關係最終會存儲在vendor/composer/autoload_namespaces.php中

    {
        "autoload": {
            "psr-0": {
                "Monolog\\": "src/",
                "Vendor\\Namespace\\": "src/",
                "Vendor_Namespace_": "src/"   //支持下劃線分隔
                 "UniqueGlobalClass": ""     //不限定於命名空間,可精確到類級別的指定
            }
        }
    }
    
  • classmap:這個 map 是經過掃描指定目錄(同樣支持直接精確到文件)中所有的 .php 和 .inc 文件裏內置的類而得到的。存儲到vendor/composer/autoload_classmap.php 文件中。

    {
        "autoload": {
            "classmap": ["src/", "lib/", "Something.php"]
        }
    }
    
  • Files:你想要明確的指定,在每次請求時都要載入某些文件,那麼你可以使用 ‘files’ autoloading。通常作爲函數庫的載入方式(而非類庫)

    {
        "autoload": {
            "files": ["src/MyLibrary/functions.php"]
        }
    }
    

版本範圍

參考鏈接

  • 比較運算符:>,>=,<,<=,!=,可以定義多個範圍,用空格或逗號被視爲邏輯AND,雙管||被視爲邏輯OR;
  • 帶連字符的版本範圍-:1.0 - 2.0 等價於 >=1.0.0 <2.1
  • 帶通配符*:1.0.* 等價於 >=1.0 <1.1
  • 下一重要版本:
    • 波浪符:~1.2 等價於 >=1.2 <2.0.0,而 ~1.2.3 等價於 >=1.2.3 <1.3.0
    • 脫字符版本範圍 ():1.2.3 等效於 >=1.2.3 <2.0.0
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章