你生產環境的 Composer 是這樣嗎?

悲劇不上演發表於2019-03-30

如果大家比較急,請直接看到最後一條命令即可

composer 配置項

具體的每個配置項細節請參考 Composer 官網

配置列表

ID 配置項 說明
1 name 包的名稱,它包括供應商名稱和專案名稱,使用 / 分隔。
2 description 包描述
3 version 版本
4 type 安裝型別
5 keywords 關鍵字
6 homepage 專案主頁
7 time 版本釋出時間
8 license 許可協議
9 authors 作者
10 support 支援,獲取專案支援的向相關資訊物件。
11 require 自動載入的包
12 require-dev 在DEV下自動載入的包
13 conflict 此列表中的包與當前包的這個版本衝突。它們將不允許同時被安裝
14 suggest 建議安裝的包,它們增強或能夠與當前包良好的工作。這些只是資訊,並顯示在依賴包安裝完成之後,給你的使用者一個建議,他們可以新增更多的包。
15 autoload 自動載入,分別有四種載入機制 psr-4 psr-0 classmap file
16 include-path 保留傳統,不建議使用
17 target-dir 定義當前包安裝的目標資料夾
18 minimum-stability 安裝包的時候通過穩定性過濾包的預設行為, dev alpha beta RC stable 可選
19 prefer-stable 安裝包的時候優先使用更穩定的包版本, "prefer-stable": true
20 repositories 使用自定義的包資源庫。預設情況下 composer 只使用 packagist 作為包的資源庫。通過指定資源庫,你可以從其他地方獲取資源包。
21 config 配置引數,eg:process-timeout vendor-dir
22 scripts Composer 允許你在安裝過程中的各個階段掛接指令碼。
23 extra 任意的,供 scripts 使用的額外資料。
24 bin 該屬性用於標註一組應被視為二進位制指令碼的檔案,他們會被軟連結到(config 物件中的)bin-dir 屬性所標註的目錄,以供其他依賴包呼叫。
25 archive 這些選項在建立包存檔時使用。

開發種配置詳細說明

11. require

識別符號 含義 例項
^ 安裝的最新版本 "barryvdh/laravel-cors": "^0.10.0" 安裝laravel-cors最新版本
~ 標識安裝的最後一位區間版本 "barryvdh/laravel-cors": "~0.10.0", 安裝laravel-cors 0.10.0-0.10.9

12. require-dev

  1. composer install 會安裝require-dev中的包,require中的包
  2. composer install --no-dev 只會安裝require中的包

22. scripts

"scripts": {
    "post-root-package-install": [
        "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
    ],
    "post-create-project-cmd": [
        "@php artisan key:generate"
    ],
    "post-autoload-dump": [
        "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
        "@php artisan package:discover"
    ]
}

scripts 是自定義執行SHELL命令,如上程式碼中,執行post-root-package-install 執行復制檔案。

15 autoload

PHP 自動載入檔案,分別有四種載入機制 psr-4 psr-0 classmap file

修改完 autoload 的內容之後要記得執行composer dump-autoload 來重新生成載入檔案

prs-4
  1. 該目錄下的 PHP 檔案 採用 PSR-4 自動載入標準
  2. Composer會將該結構下的檔案對映關係寫入 autoload_classmap.php
"autoload": {
    "psr-4": {
        "App\\": "app/"
    }

}
prs-0
  1. 該目錄下的 PHP 檔案 採用 PSR-0 自動載入標準
  2. Composer會將該結構下的檔案對映關係寫入 autoload_namespaces.php
"autoload": {
    "psr-4": {
        "Cx\\": "prs0/"
    }

}
classmap
  1. Composer 載入 lib/ 目錄下的所有檔案,放入到 autoload_classmap.php
{
    "classmap":["lib/"]
}
file
  1. Composer 載入 src/test.php 該檔案,放入到 autoload_files.php
{
    "files":["src/test.php"]
}

命令篇

詳細命名請參考 Composer 命令列

composer install

先安裝composer.lock 檔案中packages中的版本;即使composer.jsoncomposer.lock 中版本不一致

安裝流程圖

安裝流程圖

composer update

先安裝composer.json的版本,並且更新composer.lockpackages 中的版本

安裝流程圖

你生產環境的 composer 是這樣嗎?

composer dump-autoload

CMD 說明 應用場景
composer dump-autoload 列印自動載入索引,就是將 autoload 中的各項載入到本該指定的目錄。 開發環境 你更新了 autoload 中的各項,
composer dump-autoload -o 轉換 PSR-0/4 autoloading 到 classmap 獲得更快的載入速度 適用於生產環境
composer dump-autoload -o --no-dev 禁用 autoload-dev 規則 適用於生產環境
composer dump-autoload --classmap-authoritative 只載入 ClassMap中的檔案,必到磁碟檔案系統進行任何檢查 適用於生產環境

因此生產請使用 composer dump-autoload -o --no-dev --classmap-authoritative

相關文章