Composer 常規操作說明與問題處理

目錄

  • 一、 Composer 簡介,安裝
  • 二、全局配置
  • 三、項目配置(composer.json)
    • 3.1 composer.json 文件
      • 1. 基礎字段信息
      • 2. **require(`生產環境依賴`)**
      • 3. **require-dev(`開發環境依賴`)**
    • 3.2 composer.lock 文件
      • 1. 文件作用
      • 2. 文件生成與更新
      • 3. 關鍵規則
  • 四、項目安裝依賴
    • 1.安裝所有依賴(開發+生產)
    • 2.僅安裝生產環境依賴(生產環境必備)
    • 3.驗證安裝結果
  • 五. 關鍵注意事項
    • 1.`composer.lock` 的作用
    • 2. 自動加載優化(`生產環境必備`)
    • 3. `composer install --ignore-platform-reqs` 在生產環境中禁止使用
    • 4. compose update,install,require 理解后使用
  • 六 常見問題
    • 1:依賴安裝失敗或版本沖突
    • 2:切換倉庫源或鏡像
    • 3. 依賴沖突(Dependency Resolution)
    • 4:檢查環境缺失項

一、 Composer 簡介,安裝

Composer 是 PHP 的一個依賴管理工具。它允許你申明項目所依賴的代碼庫,它會在你的項目中為你安裝他們。

Composer 將這樣為你解決問題:

  1. a) 你有一個項目依賴于若干個庫。
  2. b) 其中一些庫依賴于其他庫。
  3. c) 你聲明你所依賴的東西。
  4. d) Composer 會找出哪個版本的包需要安裝,并安裝它們(將它們下載到你的項目中)。

全局安裝,linux

curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

window安裝或局部安裝,暫不說明,自己去官網解決即可

二、全局配置

全局配置存儲在用戶目錄下的 ~/.config/composer/config.json(Linux/macOS)或 %APPDATA%\Composer\config.json(Windows)。

常用全局配置

# 查看當前全局配置
composer config -g --list# 編輯全局配置(手動修改文件)
composer config -g --editor# 清除緩存
composer clear-cache# 設置全局倉庫鏡像(如阿里云)
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/# 設置全局最低穩定性
composer config -g minimum-stability dev# 設置全局HTTP超時時間
composer config -g process-timeout 600

我經常使用的是就設置鏡像,其他基本上很少用到。

三、項目配置(composer.json)

3.1 composer.json 文件

composer.json 是 PHP 項目依賴管理的核心配置文件,用于:

  • 定義項目元數據(名稱、版本、作者等)

  • 聲明生產/開發環境依賴

  • 配置自動加載規則

  • 定義腳本鉤子(如安裝后操作)

  • 控制包安裝行為

其文件位置是在項目根目錄下面

{"name": "example/project","description": "A sample project","type": "project","license": "MIT","require": {"php": "^8.0","ext-json": "*","monolog/monolog": "^2.0"},"require-dev": {"phpunit/phpunit": "^9.0"},"autoload": {"psr-4": {"App\\": "app/","Database\\Factories\\": "database/factories/","Database\\Seeders\\": "database/seeders/"},"files": ["app/Helpers/functions.php"],"classmap": ["app/Legacy/",       // 直接指定目錄"lib/old-class.php"  // 直接指定單個文件]},"autoload-dev": {"psr-4": {"Tests\\": "tests/"}},//最小穩定性//可用的穩定性標識(按字母排序):dev、alpha、beta、RC、stable"minimum-stability": "stable","prefer-stable": true
}

1. 基礎字段信息

在這里插入圖片描述
在這里插入圖片描述

  • autoload / classmap
    • 是 Composer 提供的一種 后備自動加載機制,用于加載不符合 PSR-0/PSR-4 標準的類

    • 加載無命名空間的類:適用于傳統代碼或第三方庫中未使用命名空間的類。

    • 兼容非標準目錄結構:當文件路徑與類名/命名空間不匹配 PSR-4 規則時。

    • 性能優化:生成類路徑映射表,避免運行時文件掃描(適合生產環境)。

2. require(生產環境依賴

  1. 用途:項目必須依賴的包,無論是開發環境還是生產環境都需要

  2. 安裝方式:

    • composer install(默認安裝)
    • composer require 包名(默認加入 require)
  3. 典型場景:

    • 核心框架(如 laravel/framework)
    • 數據庫驅動(如 doctrine/dbal)
    • HTTP 客戶端(如 guzzlehttp/guzzle)
    • 項目運行所必需的庫

3. require-dev(開發環境依賴

  1. 用途:僅在開發、測試或調試時需要的包,生產環境不需要

  2. 安裝方式:

    • composer install --dev(默認安裝)

    • composer require --dev 包名(加入 require-dev)

  3. 典型場景:

    • 測試工具(如 phpunit/phpunit)

    • 代碼靜態分析(如 phpstan/phpstan)

    • 安全檢查(如 roave/security-advisories)

    • 本地開發輔助工具(如 barryvdh/laravel-debugbar)

3.2 composer.lock 文件

composer.lock 是 Composer 自動生成的核心文件,用于精確鎖定依賴版本,確保項目在不同環境中使用完全一致的依賴樹

1. 文件作用

  • 版本鎖定:記錄所有依賴包(包括間接依賴)的精確版本號(如 1.2.3),而非 composer.json 中的模糊約束(如 ^1.0)。

  • 哈希校驗:存儲包的哈希值(SHA-1),確保下載的包未被篡改。

  • 依賴樹固化:避免因依賴更新導致意外行為(如間接依賴升級引發兼容性問題)。

2. 文件生成與更新

  • 首次運行 composer install 時自動生成。

  • 運行 composer update 時更新。

3. 關鍵規則

(1) 必須提交到版本控制(如 Git)

  • 確保團隊其他成員和生產環境使用完全一致的依賴版本

  • 避免因 composer.json 的版本范圍(如 ^1.0)在不同時間安裝不同版本導致差異。

(2) 不要手動修改

  • 所有變更應通過 Composer 命令自動完成:
    • 更新依賴:composer update
    • 新增依賴:composer require vendor/package

(3) 安裝依賴時優先使用 lock 文件

  • 運行 composer install 時:
    • 如果存在 composer.lock,則嚴格安裝其中指定的版本。
    • 如果不存在 composer.lock,則根據 composer.json 安裝并生成新鎖文件。

四、項目安裝依賴

1.安裝所有依賴(開發+生產)

composer install

作用:

  • 讀取 composer.json 中的依賴聲明,安裝所有需要的包(生產環境 + 開發環境)。

  • 生成/更新 composer.lock 文件(鎖定具體版本)。

  • 執行 autoload 配置,生成類自動加載文件(如 vendor/autoload.php)。

2.僅安裝生產環境依賴(生產環境必備)

composer install --no-dev --optimize-autoloader
  • 生產環境部署時
    • –no-dev 跳過開發依賴(如測試工具、調試包)
    • –optimize-autoloader:生成類映射表,提升自動加載性能(適合生產環境)。
    • –classmap-authoritative:進一步優化,但禁用 PSR-0 自動發現(極端優化場景使用)。

3.驗證安裝結果

  • 檢查 vendor 目錄:確認依賴已下載。

  • 檢查 composer.lock:確認版本已鎖定。

  • 引入自動加載文件(在代碼中):

    require __DIR__ . '/vendor/autoload.php';
    

五. 關鍵注意事項

1.composer.lock 的作用

  • 必須提交到版本控制(如 Git):
    • 確保團隊其他成員和生產環境使用完全一致的依賴版本。
  • 不要手動修改它:該文件由 Composer 自動維護。

2. 自動加載優化(生產環境必備

	composer install --no-dev --optimize-autoloader

3. composer install --ignore-platform-reqs 在生產環境中禁止使用

  • –ignore-platform-reqs 會跳過以下檢查:

    • PHP版本要求(如包要求 PHP 8.1,但當前是 PHP 7.4)

    • PHP擴展依賴(如 ext-json、ext-mbstring 等)

    • 系統庫依賴(如 lib-curl)

  • 由于會忽略以上的檢查,導致應用在運行時,因缺少擴展版本不兼容導致運行時錯誤

  • 優先修復環境,而非忽略檢查!

4. compose update,install,require 理解后使用

  • composer install 根據 composer.lock 文件安裝精確版本的依賴(如果 lock 文件不存在,則根據 composer.json 生成它)

  • composer update 根據 composer.json 的版本約束,更新依賴到最新兼容版本,并更新 composer.lock。

    • composer update vendor/package # 僅更新指定包

    • composer update(無參數) 可能意外升級大量包,破壞穩定性,慎用全局更新

  • composer require 新增依賴包,并自動更新 composer.json 和 composer.lock。

六 常見問題

1:依賴安裝失敗或版本沖突

問題表現:執行 composer install 或 update 時出現奇怪錯誤(如找不到包、版本不匹配)。

原因:Composer 的本地緩存可能損壞或過期(緩存了錯誤的包元數據)。

解決:

composer clear-cache
composer install  # 重新安裝

2:切換倉庫源或鏡像

問題表現:更換了 Composer 鏡像源(如從官方源切換到阿里云),但安裝時仍從舊源拉取包。

原因:舊的倉庫元數據被緩存。

解決:

composer clear-cache
composer config repo.packagist composer https://mirrors.aliyun.com/composer/
composer install

3. 依賴沖突(Dependency Resolution)

問題表現: Your requirements could not be resolved to an installable set of packages.

查看沖突原因:

composer why vendor/package  # 查看某個包被引入的原因
composer depends guzzlehttp/guzzle  # 檢查包依賴關系

4:檢查環境缺失項

# 列出不滿足的環境要求
composer check-platform-reqs

參考文檔:
https://docs.phpcomposer.com/

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/82957.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/82957.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/82957.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spring Boot 3.0與Java 17:企業級應用開發的新范式

引言 隨著Spring Boot 3.0和Java 17的正式發布,企業級應用開發迎來了新的技術范式。這兩項技術的結合不僅帶來了性能提升,還引入了眾多現代化的編程特性,為開發者提供了更強大、更高效的開發體驗。本文將深入探討Spring Boot 3.0與Java 17的…

Vue 組件 - 指令

Vue 漸進式JavaScript 框架 基于Vue2的學習筆記 - Vue指令 目錄 指令寫法 自定義指令 簡單封裝指令 指令傳遞字符串 update事件 指令應用 指令實現輪播 指令函數簡寫 指令函數列表 bind inserted update componentUpdated unbind Vue3指令輪播 nextick 總結 指…

5.28 后端面經

為什么golang在并發環境下更有優勢 Go語言(Golang)在并發環境下的優勢主要源自其設計哲學和內置的并發機制,這些機制在語言層面提供了高效、簡潔且安全的并發編程工具。以下是其核心優勢的詳細分析: 1. Goroutine:輕量…

Linux線程入門

目錄 Linux線程概念 什么是線程 重新理解進程 線程的優點 線程的缺點 線程的異常 線程用途 Linux線程概念 什么是線程 在一個程序里的一個執行路線就叫做線程(thread)。更準確的定義是:線程是“一個進程內部的控制序列”。一切進程至…

通信應用高速模數轉換器ADC

在5G通信、醫療成像、航空航天及工業自動化等關鍵領域,高速ADC模數轉換器作為信號鏈的“心臟”,其性能直接決定了系統的精度與效率。然而,如何精確測試高速ADC的動態參數、優化設計驗證流程、應對復雜應用場景的挑戰,始終是工程師…

PostgreSQL 中 JSONB 數據類型的深度解析以及如何使用

一、JSONB 核心特性解析 1. 存儲結構與優勢 ??二進制存儲??:將 JSON 數據解析為二進制格式(分解鍵值對,去除空格和重復鍵)??高效查詢??:支持 GIN/GiST 索引,查詢速度比 JSON 類型快 10 倍??數據…

C++_核心編程_ 左移運算符重載 “<<” 左移運算符

作用&#xff1a;可以輸出自定義數據類型 */ //目標 調用p1,輸出Person 中的屬性 m_A ,m_B &#xff1a; /* #### 4.5.2 左移運算符重載 “<<” 左移運算符 作用&#xff1a;可以輸出自定義數據類型 *///目標 調用p1,輸出Person 中的屬性 m_A ,m_B &#xff1a; class…

thinkphp 5.1 部分知識記錄<一>

1、配置基礎 慣例配置->應用配置->模塊配置->動態配置 慣例配置:核心框架內置的配置文件,無需更改。應用配置:每個應用的全局配置文件(框架安裝后會生成初始的應用配置文件),有部分配置參數僅能在應用配置文件中設置。模塊配置:每個模塊的配置文件(相同的配置…

數據結構 -- 樹相關面試題

二、樹相關的填空題 1.對于一個具有 n 個結點的二叉樹&#xff0c;當它為一棵 ________ 二叉樹時&#xff0c;具有最小高度&#xff0c;即為 ________&#xff1b;當它為一棵單支樹時具有最大高度&#xff0c;即為 ________。 2.對于一個具有 n 個結點的二叉樹&#xff0c;當它…

2025河北CCPC 題解(部分)

簽到題&#xff1a;AC代碼如下 &#xff1a; // Problem: H - What is all you need? // Contest: Virtual Judge - sdccpc20250526 // URL: https://vjudge.net/contest/718568#problem/H // Memory Limit: 1024 MB // Time Limit: 1000 ms // // Powered by CP Editor (ht…

計算機視覺---YOLOv4

YOLOv4&#xff08;You Only Look Once v4&#xff09;于2020年由Alexey Bochkovskiy等人提出&#xff0c;是YOLO系列的重要里程碑。它在YOLOv3的基礎上整合了當時最先進的計算機視覺技術&#xff0c;實現了檢測速度與精度的顯著提升。以下從主干網絡、頸部網絡、頭部檢測、訓練…

OpenCV 第7課 圖像處理之平滑(一)

1. 圖像噪聲 在采集、處理和傳輸過程中,數字圖像可能會受到不同噪聲的干擾,從而導致圖像質量降低、圖像變得模糊、圖像特征被淹沒,而圖像平滑處理就是通過除去噪聲來達到圖像增強的目的。常見的圖像噪聲有椒鹽噪聲、高斯噪聲等。 1.1 椒鹽噪聲 椒鹽噪聲(Salt-and-pepper N…

Spring AI 系列3: Promt提示詞

一、Promt提示詞 Promt提示是引導 AI 模型生成特定輸出的輸入&#xff0c; 提示的設計和措辭會顯著影響模型的響應。 在 Spring AI 中與 AI 模型交互的最低層級&#xff0c;處理提示有點類似于在 Spring MVC 中管理”視圖”。 這涉及創建帶有動態內容占位符的大段文本。 這些占…

隨叫隨到的電力補給:移動充電服務如何重塑用戶體驗?

在快節奏的現代生活中&#xff0c;電力已成為維系日常運轉的隱形血脈。智能手機、電動汽車、便攜設備的普及&#xff0c;讓“電量焦慮”逐漸演變為一種時代癥候。而移動充電服務的興起&#xff0c;正悄然改變這一局面。它像一位隱形的能源管家&#xff0c;隨時響應需求&#xf…

LeetCode 75. 顏色分類 - 雙指針法高效解決(Java實現)

文章目錄 問題描述算法思路&#xff1a;三指針分區法核心思想指針定義 Java實現算法執行流程關鍵問題解析&#xff1a;為什么交換0后不需要重新檢查&#xff1f;交換0時的兩種情況分析詳細解釋&#xff1a; 復雜度分析示例演示&#xff08;輸入&#xff1a;[2,0,2,1,1,0]&#…

【MySQL】C語言連接

要使用C語言連接mysql&#xff0c;需要使用mysql官網提供的庫&#xff0c;大家可以去官網下載 我們使用C接口庫來進行連接 要正確使用&#xff0c;我們需要做一些準備工作: 保證mysql服務有效在官網上下載合適自己平臺的mysql connect庫&#xff0c;以備后用 下載開發庫 s…

NFS 掛載配置與優化最佳實踐指南

文章目錄 NFS 掛載配置與優化最佳實踐指南1. 服務器端配置1.1 安裝 NFS 服務1.2 配置共享目錄常用配置選項說明 1.3 啟動與檢查服務 2. 客戶端掛載2.1 安裝 NFS 客戶端2.2 掛載 NFS 共享2.3 自動掛載 3. 客戶端掛載選項4. 性能優化與故障排查4.1 性能優化建議4.2 常見問題排查 …

3D PDF如何制作?SOLIDWORKS MBD模板定制技巧

SOLIDWORKS制作3D PDF模版 SOLIDWORKS MBD能夠幫助工程師以清晰直觀的方式描述產品尺寸信息。在3D PDF文件中&#xff0c;用戶可以自由旋轉和移動視圖&#xff0c;方便查看模型的各個尺寸細節。 本文將帶您一步步學習如何使用SOLIDWORKS MBD制作專業的3D PDF模板&#xff0c;…

Unity-QFramework框架學習-MVC、Command、Event、Utility、System、BindableProperty

QFramework QFramework簡介 QFramework是一套漸進式、快速開發框架&#xff0c;適用于任何類型的游戲及應用項目&#xff0c;它包含一套開發架構和大量的工具集 QFramework的特性 簡潔性&#xff1a;QFramework 強調代碼的簡潔性和易用性&#xff0c;讓開發者能夠快速上手&a…

R3GAN訓練自己的數據集

簡介 簡介&#xff1a;這篇論文挑戰了"GANs難以訓練"的廣泛觀點&#xff0c;通過提出一個更穩定的損失函數和現代化的網絡架構&#xff0c;構建了一個簡潔而高效的GAN基線模型R3GAN。作者證明了通過合適的理論基礎和架構設計&#xff0c;GANs可以穩定訓練并達到優異…