<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ## composer **last update: 2022-05-26 10:23:11** ---- [TOC=3,8] ---- ### 前言 ![](https://getcomposer.org/img/logo-composer-transparent3.png) [composer](https://getcomposer.org/) 之如 php,正如 npm 之如 nodejs,composer 是一個項目[依賴包](https://packagist.org/)管理工具。本文旨在全面介紹它的用法,學習目標是從此不會再懼怕任何php項目的包依賴管理問題,并且能夠自己維護開源包。 --- ### 架構 ~~~shell $ composer -v ______ / ____/___ ____ ___ ____ ____ ________ _____ / / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/ / /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ / \____/\____/_/ /_/ /_/ .___/\____/____/\___/_/ /_/ Composer version 2.2.13 2022-05-25 21:37:25 ~~~ ~~~ app ├─vendor │ ├─composer │ │ ├─autoload_classmap.php │ │ ├─autoload_namespaces.php │ │ ├─autoload_psr4.php │ │ ├─autoload_real.php │ │ ├─autoload_static.php │ │ ├─ClassLoader.php │ │ ├─installed.json │ │ ├─installed.php │ │ ├─InstalledVersions.php │ │ ├─LICENSE │ │ └─platform_check.php │ │ │ ├─monolog │ │ └─monolog │ │ ├─src │ │ ├─LICENSE │ │ ├─composer.json │ │ └─... │ │ │ ├─autoload.php │ │ │ └─... │ ├─composer.json └─composer.lock ~~~ ---- ### 常用命令 **命令原型:** ~~~shell composer command [options] [arguments] 命令 選項 參數 ~~~ **基礎命令選項:** 以下命令選項可以在每條命令中使用: ~~~shell -h, --help 查看幫助信息 -q, --quiet 不輸出任何信息 -V, --version 查看版本號 --ansi 強制ANSI編碼格式輸出 --no-ansi 取消ANSI編碼格式輸出 -n, --no-interaction 不詢問何互動問題 --profile 顯示耗時和內存使用信息 --no-plugins 不使用插件 --no-scripts 不執行 composer.json 文件中定義的所有腳本 -d, --working-dir=WORKING-DIR 如果指定,使用給定目錄作為工作目錄 --no-cache 不使用緩存 -v|vv|vvv, --verbose 顯示提示信息:-v正常輸出,-vv更多的粗略輸出,-vvv調試 ~~~ **查看某個命令的使用幫助信息:** ~~~shell composer require -h ~~~ ---- **全部命令:** ~~~shell about 顯示關于Composer的簡短信息。 archive 創建這個作曲家軟件包的存檔。 browse 在你的瀏覽器中打開軟件包的存儲庫URL或主頁。 cc 清除 composer 的內部軟件包緩存。 check-platform-reqs 檢查平臺要求是否得到滿足。 clear-cache 清除 composer 的內部軟件包緩存。 clearcache 清除 composer 的內部軟件包緩存。 config 設置配置選項。 create-project 從軟件包中創建新的項目到指定的目錄。 depends 顯示包的被依賴信息 diagnose 診斷系統以識別常見錯誤。 dump-autoload 轉儲自動加載器。 dumpautoload 轉儲自動加載器。 exec 執行一個出售的二進制文件/腳本。 fund 發現如何為維護你的依賴關系提供資金。 global 允許在全局 composer 目錄($COMPOSER_HOME)中運行命令。 help 顯示一個命令的幫助 home 在瀏覽器中打開軟件包的存儲庫 URL 或主頁。 i 從 composer.lock 文件中安裝項目的依賴關系(如果有的話),或者回到 composer.json 文件中。 info 顯示軟件包的信息。 init 在當前目錄下創建一個基本的 composer.json 文件。 install 如果存在的話,從 composer.lock 文件中安裝項目的依賴性,或者回到 composer.json 文件中。 licenses 顯示依賴項的許可信息。 list 列舉命令 outdated 顯示有更新的已安裝軟件包的列表,包括其最新版本。 prohibits 顯示哪些軟件包阻止了給定的軟件包被安裝(檢查已安裝的包是否會與給定目標沖突,以驗證是否可以升級) reinstall 卸載和重新安裝給定的軟件包名稱 remove 從 require 或 require-dev 中刪除一個軟件包。 require 將需要的軟件包添加到你的 composer.json 中并安裝它們。 run 運行 composer.json 中定義的腳本。 run-script 運行 composer.json 中定義的腳本。 search 搜索軟件包。 self-update 將 composer.phar 更新到最新版本。 self-update 將 composer.phar 更新到最新的版本。 show 顯示軟件包的信息。 status 顯示本地修改的軟件包的列表。 suggests 顯示軟件包的建議。 u 根據 composer.json 將你的依賴項升級到最新版本,并更新 composer.lock 文件。 update 根據 composer.json 將你的依賴關系升級到最新版本,并更新 composer.lock 文件。 upgrade 根據 composer.json 將你的依賴關系升級到最新的版本,并更新 composer.lock 文件。 validate 驗證 composer.json 和 composer.lock。 why 顯示哪些軟件包會導致給定的軟件包被安裝。 why-not 顯示哪些軟件包阻止給定的軟件包被安裝。 ~~~ ---- **返回結果碼** ~~~ 0: OK 正確碼 1: 通常/未知錯誤碼 2: 需要解決的錯誤碼 ~~~ ---- #### 命令使用詳解 ##### init ---- ##### require ~~~shell composer require [options] [--] [<packages>]... ~~~ ~~~shell composer require --prefer-dist foo/bar ~~~ |選項|說明| |--|--| | --dev |添加需求到require-dev。| | --dry-run |輸出操作,但不會執行任何東西(隱含地啟用 --verbose)。| | --prefer-source |在可能的情況下,強制從軟件包源頭安裝,包括VCS信息。| | --prefer-dist |強制從軟件包dist安裝(默認行為)。| | --prefer-install=PREFER-INSTALL |強制從軟件包dist|source|auto中安裝(開發版本自動選擇source,其他版本選擇dist)。| | --fixed |將固定版本寫入 composer.json。| | --no-suggest |DEPRECATED: 這個標志已經不存在了。| | --no-progress |不輸出下載進度。| | --no-update |禁用自動更新依賴項(意味著--不安裝)。| | --no-install |在更新composer.lock文件后跳過安裝步驟。| | --update-no-dev |使用 --no-dev 選項運行依賴性更新。| |-w, --update-with-dependencies |準許繼承的依賴關系被更新,但那些屬于根需求的除外。| |-W, --update-with-all-dependencies |允許更新所有繼承的依賴,包括那些屬于根需求的依賴。| | --with-dependencies |--update with-dependencies的別名| | --with-all-dependencies |--update with-all-dependencies的別名。| | --ignore-platform-req=IGNORE-PLATFORM-REQ |忽略一個特定的平臺需求(php和ext-包)。(允許多個值)| | --ignore-platform-reqs |忽略所有的平臺要求(php & ext- packages)。| | --prefer-stable |優先選擇穩定版本的依賴項。| | --prefer-lowest |優先選擇最低版本的依賴關系。| | --sort-packages |在添加/更新新的依賴關系時對軟件包進行排序| |-o, --optimize-autoloader |在自動加載器轉儲時優化自動加載器| |-a, --classmap-authoritative |只從classmap上自動加載類。隱含地啟用 `--優化自動加載器 `。| | --apcu-autoloader |使用APCu來緩存找到/未找到的類。| | --apcu-autoloader-prefix=APCU-AUTOLOADER-PREFIX |為APCu自動加載器緩存使用一個自定義前綴。隱式啟用 --apcu-autoloader| |-h, --help |顯示此幫助信息| |-q, --quiet |不輸出任何信息| |-V, --version |顯示此應用程序版本| | --ansi |強制ANSI輸出| | --no-ansi |禁用ANSI輸出| |-n, --no-interaction |不提出任何互動問題| | --profile |顯示時間和內存使用信息| | --no-plugins |是否禁用插件。| | --no-scripts |跳過composer.json文件中定義的所有腳本的執行。| |-d, --working-dir=WORKING-DIR |如果指定,使用給定的目錄作為工作目錄。| | --no-cache |防止使用緩存| |-v|vv|vvv, --verbose |增加信息的粗略程度。1表示正常輸出,2表示更多的粗略輸出,3表示調試。| ---- ##### serach ~~~ composer search monolog ~~~ ---- ##### show ~~~ composer show topthink/* -a composer show topthink/think 5.0.* -a composer show overtrue/wechat ~5.0 -a ~~~ ---- ##### install ---- ##### prohibits ~~~ composer prohibits symfony/symfony 3.1 composer prohibits php 5.2 ~~~ ---- ##### update ~~~ # 會有網絡檢查最新的版本 $: composer update Loading composer repositories with package information Updating dependencies Nothing to modify in lock file Installing dependencies from lock file (including require-dev) Nothing to install, update or remove Generating autoload files # 很快有本地安裝緩存的話不需要網絡請求 $: composer install Installing dependencies from lock file (including require-dev) Verifying lock file contents can be installed on current platform. Nothing to install, update or remove Generating autoload files ~~~ ---- ##### remove ---- ##### dump-autoload ~~~ composer dump-autoload -o -a --no-dev --apcu ~~~ ---- ##### status `status` 命令可以檢查你本地代碼中的修改內容: ~~~ composer status -v ~~~ ---- ##### list ---- ~~~shell composer --version composer self-update composer diagnose composer show --platform composer check-platform-reqs composer config -g -l composer global config bin-dir --absolute composer clear composer install composer require xxx/xxx --dry-run composer remove xxx/xxx composer update composer dump-autoload composer status composer search xxx ~~~ ---- ### 加載器 你也可以查閱 optimizing the autoloader 了解關于自動加載器的優化. > 注意:Composer 提供自己的加載器,但如果你不想使用那個而想自己配置加載器的話,你可以試試 include vendor/composer/autoload_*.php 這些文件所返回的關聯數組來實現。 ---- #### 依賴管理 [Versions and constraints - Composer](https://getcomposer.org/doc/articles/versions.md#versions-and-constraints) [Package Semver Checker - madewithlove](https://semver.madewithlove.com/?package=overtrue%2Fwechat&constraint=~5.0.0&stability=stable)(`包:"約束@穩定性"`) ~~~ composer require overtrue/wechat:"~5.0.0@dev" ~~~ ![](http://cdn.aipin100.cn/54a73640c30ac99da8de85ccb9fcabc2) ---- ### 使用技巧 ---- ### 相關工具鏈 [Packagist / Composer 中國全量鏡像](https://pkg.xyz/#tip2) > 如果你的 package 源碼托管在 Github 或 Bitbucket 上,可以通過設置 service hook 讓 packagist.org 在你每次 commit 后抓取更新。 ---- ### 語義化版本 [語義化版本 2.0.0 | Semantic Versioning](https://semver.org/lang/zh-CN/) x.y.z 大版本.次版本.修訂版 版本格式:主版本號.次版本號.修訂號,版本號遞增規則如下: 主版本號:當你做了不兼容的 API 修改。 次版本號:當你做了向下兼容的功能性新增。 修訂號:當你做了向下兼容的問題修正。 先行版本號及版本編譯信息可以加到“主版本號.次版本號.修訂號”的后面,作為延伸。 `*` 等價于 0 或無限增長的版本號 `1` 等價于 `1.*.*` `1.0` 等價于 `1.0.*` `1.0.*` 等價于 `>=1.0.0 <1.1.0` `>1.0` 等價于 `>1.0.0` ---- #### 申明所需版本范圍:最新的和穩定的 ##### 波形符 ~: 保守的使用最新版,但對于非穩定版階段可能會破壞兼容性 `~1.2` 等價于 `>=1.2.0 and <2.0.0` `~1.2.0` 等價于 `>=1.2.0 and <1.3.0` `~1.2.3` 等價于 `>=1.2.3 and <1.3.0` `~0.3` 等價于 `>=0.3.0 and <1.0.0` (非穩定版本時可能會破壞兼容性) > 用 ~ 指定一個最小版本,但允許指定的最后一個數字無限增長。 >[tip] 注意: `~1` 與 `~1.0` 是相同的,因為它不會允許主版本號增加以試圖保持向后兼容性。 ---- ##### 脫字符 ^: 保證兼容性的前提下積極使用最新版 `^1.2` 等價于 `>=1.2.0 and <2.0.0` `^1.2.0` 等價于 `>=1.2.0 and <2.0.0` `^1.2.3` 等價于 `>=1.2.3 and <2.0.0` `^0.3` 等價于 `>=0.3.0 and <0.4.0` (而不是 `>=0.3.0 and <1.0.0 `) > `^` 盡量使用最新版本,但保證不產生兼容問題。只限定不會超過下一個主版本就行(對于非 `0.*` 的穩定版)。 在 `x.y` 的情況下 `^` 、 `~` 是一樣的,都代表 `>=x.y and <(x+1).0.0`。(`x > 0` 時) **要重點注意的一點是,主版本號為 `0` 表示這是一個非穩定版本(unstable),如果處于非穩定狀態,次版本號是允許不向下兼容的!,即不同的次版本可能是不保證兼容性的,所以 `^` 要保證兼容性就要固定次版本號了**,這點需要注意。所以 `^0.3.0` 等價于 `>=0.3.0 and <0.4.0`,而不是 `<1.0.0`。 https://blog.csdn.net/youcijibi/article/details/81939418 https://blog.csdn.net/u013866352/article/details/105412462 https://blog.csdn.net/eebaicai/article/details/88047833 ---- ### 優化 #### 類映射加載優化 ~~~ composer dump-autoload -a --apcu --no-dev # 優化級別1:類映射生成 composer dump-autoload --optimize --no-dev # 優化級別 2/A :權威類映射 composer dump-autoload --classmap-authoritative --no-dev # 優化級別 2/B: APCu 緩存 composer dump-autoload --apcu --no-dev ~~~ ~~~ "optimize-autoloader": true "classmap-authoritative": true "apcu-autoloader": true ~~~ ~~~ Administrator@PC-201908081131 MINGW64 /d/web/composer-yf $ composer dump-autoload --optimize --no-dev Generating optimized autoload files Generated optimized autoload files containing 23388 classes Administrator@PC-201908081131 MINGW64 /d/web/composer-yf $ composer dump-autoload --classmap-authoritative --no-dev Generating optimized autoload files (authoritative) Generated optimized autoload files (authoritative) containing 23388 classes Administrator@PC-201908081131 MINGW64 /d/web/composer-yf $ composer dump-autoload --apcu --no-dev Generating autoload files Generated autoload files ~~~ 類映射生成實質上是將 PSR-4/PSR-0 規則轉換為類映射規則。這使得一切都快很多,因為已知的類映射會立即返回路徑,而 Composer 可以保證類在那里,因此不需要文件系統檢查。 在 PHP 5.6+ 中,類映射也緩存在 opcache 中,這大大改善了初始化時間。如果確保啟用了 opcache ,那么類映射應該會立即加載,類加載也會很快。 [3.2. 自動加載器優化 - Composer 中文文檔 - 文江博客](https://www.wenjiangs.com/doc/s5h0aqva#2b8a101b03db9ddb90d951b1355f9d7d) [cachetool | Deployer](https://deployer.org/docs/7.x/contrib/cachetool#usage) 由于 APCu 和 OPcache 處理編譯和緩存文件,它們應該在為新版本創建符號鏈接后立即執行 https://learnku.com/articles/10985/deployer-real-experience-sharing ~~~ apcu_clear_cache(); apc.enabled opcache_reset(); ~~~ ~~~ 即使立即執行可能還會有問題,應該這樣: 發布前,關閉op緩存,清除op緩存 發布后,開啟op緩存 ~~~ #### 權威類映射加載優化 #### APCu 緩存加載優化 #### 鏡像加速 恢復 ~~~ composer config -g --unset repos.packagist ~~~ 項目中配置: ``` { "repositories": [ { "type": "composer", "url": "https://mirrors.cloud.tencent.com/composer/", "canonical": false }, { "type": "composer", "url": "https://mirrors.aliyun.com/composer/", "canonical": false } ], "require": { "monolog/monolog": "1.0.*" } } ``` 全局配置: ~~~ composer clear composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ ~~~ [阿里云Composer鏡像站-阿里云開發者社區](https://developer.aliyun.com/composer) > 騰訊云鏡像 `https://mirrors.cloud.tencent.com/composer/` ---- ### 開發自己的包 ---- ### 分析社區的趨勢 使用 統計功能 可以很方便的幫助我們分析 [社區](https://packagist.org) 主流php版本,以及包版本使用的情況,幫助我們預測社區走向,及時調整方向。 ![](http://cdn.aipin100.cn/87accd08b2d3f13a8a299157050e1543) https://packagist.org/packages/guzzlehttp/guzzle/stats#dev-master ![](http://cdn.aipin100.cn/3c2230a4bc1c0db822150cbb1f6e81f3) https://packagist.org/packages/guzzlehttp/guzzle/php-stats ---- ### 常見問題 #### 如果管理和使用非標準的庫? #### 如果使用自定義儲存庫的包? https://stackoverflow.com/questions/21314381/how-to-correctly-require-a-specific-commit-in-composer-so-that-it-would-be-avail ```json "repositories": [ { "type": "composer", "url": "https://mirrors.cloud.tencent.com/composer/", "canonical": false }, { "type": "composer", "url": "https://mirrors.aliyun.com/composer/", "canonical": false }, { "type": "vcs", "url": "https://github.com/walkor/workerman" } ], "require": { "workerman/workerman": "dev-master#84b7cb514003aee563ee4c13fad5895b67173707" }, ``` #### 包之間出現版本依賴沖突怎么辦? 1. 取舍 2. 提 request pull 3. 有能力自己 fock一個版本單獨維護 #### 三方包的安全性如何保證? 1. 使用知名的包 2. 引入項目前做必要的代碼安全審查 3. 鎖定使用版本 #### 三方包倉庫作者刪庫跑路了怎么辦? 1. fock github 倉庫 2. 定期備份完整代碼庫 #### 如何審查開源協許可證,避免授權風險? ![](https://img-blog.csdnimg.cn/20190619094018567.jpeg) [GPL、MIT、Apache...開發者如何選擇開源協議?一文講清根本區別!_走神的阿圓的博客-CSDN博客](https://blog.csdn.net/yhan_shen/article/details/122505465) #### root 安全 [How do I install untrusted packages safely? Is it safe to run Composer as superuser or root? - Composer](https://getcomposer.org/doc/faqs/how-to-install-untrusted-packages-safely.md) ~~~ vi /etc/profile COMPOSER_ALLOW_SUPERUSER=1 export COMPOSER_ALLOW_SUPERUSER source /etc/profile ~~~ ---- ~~~ composer status 怎么知道文件變化了,它是如何工作的,文件 md5 只跟內容變化有關嗎,復制文件,內容一樣修改日期不一樣,文件MD5一樣嗎。 https://www.zhihu.com/question/295147561/answer/496545059 1. 根據安裝緩存中記錄每個文件的MD5?經測試刪除緩存,依然能檢測到文件內容修改了。 2. 猜測是在其它地方有相關的緩存,暫時沒有找到,可能要去看源碼才行 3. 難道它用了網絡去檢查?能把你刪除的 .md 文件都能檢查出來,即使你不是在當前機器上安裝的,如果不是網絡,那就說明 還是 vendor 中記錄了什么 ~~~ ---- ~~~ https://developer.aliyun.com/composer composer config repo.packagist composer https://mirrors.aliyun.com/composer/ composer config --unset repos.packagist composer self-update composer clear composer update --lock ~~~ ~~~ https://mirrors.tencent.com/composer/ ~~~ ---- ### 擴展 [Composer Documentation](https://getcomposer.org/doc/) [2.1. 簡介 - Composer 中文文檔 - 文江博客](https://www.wenjiangs.com/doc/k5u5ciqg) [PHP-FIG — PHP Framework Interop Group - PHP-FIG](https://www.php-fig.org/) [PHP 開發者該知道的 5 個 Composer 小技巧 - SegmentFault 思否](https://segmentfault.com/a/1190000000355928) [Fast, disk space efficient package manager | pnpm](https://pnpm.io/zh/) > 一個老牌的 node.js 包管理器,支持 npm 的所有功能,用來替代 npm。它的模塊是全局存儲,每個項目內部使用硬鏈接,所以很省空間,而且安裝速度快。 [【Linux】硬鏈接、軟鏈接及inode詳解_長著胡蘿卜須的栗子的博客-CSDN博客](https://blog.csdn.net/lixungogogo/article/details/52176571) > 3 打開一個文件以后,系統就以inode號碼來識別這個文件,不再考慮文件名。因此,通常來說,系統無法從inode號碼得知文件名。 > 第3點使得軟件更新變得簡單,可以在不關閉軟件的情況下進行更新,不需要重啟。因為系統通過inode號碼,識別運行中的文件,不通過文件名。更新的時候,新版文件以同樣的文件名,生成一個新的inode,不會影響到運行中的文件。等到下一次運行這個軟件的時候,文件名就自動指向新版文件,舊版文件的inode則被回收。 [1.1. 翻譯說明 | 基礎信息 |《Composer 中文文檔 2018》| PHP 技術論壇](https://learnku.com/docs/composer/2018/about/2080) ---- ~~~shell $: composer diagnose Checking platform settings: PHP was compiled with --with-curlwrappers which will cause issues with HTTP authentication and GitHub. Recompile it without this flag if possible Checking git settings: OK Checking http connectivity to packagist: OK Checking https connectivity to packagist: OK Checking github.com rate limit: OK Checking disk free space: OK Checking pubkeys: Tags Public Key Fingerprint: 57815BA2 7E54DC31 7ECC7CC5 573090D0 87719BA6 8F3BB723 4E5D42D0 84A14642 Dev Public Key Fingerprint: 4AC45767 E5EC2265 2F0C1167 CBBB8A2B 0C708369 153E328C AD90147D AFE50952 OK Checking composer version: OK Composer version: 2.3.5 PHP version: 7.2.16 PHP binary path: /usr/local/php/bin/php OpenSSL version: OpenSSL 1.0.2k 26 Jan 2017 cURL version: 7.37.0 libz 1.2.8 ssl OpenSSL/1.0.2k zip: extension present, unzip present, 7-Zip not available ~~~ [NixOS 的包管理設計(英文) ](https://blog.wesleyac.com/posts/the-curse-of-nixos) > NixOS 是一個 Linux 發行版,具有獨一無二的包管理機制,**徹底解決了版本沖突問題,不同版本的軟件可以同時運行,新版本也可以無痛回滾到任意老版本。**
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看