本文根據 laravel/cpx 的 README.md 與 UPGRADE.md 整理。內容為 v2.0.0(2026 年 7 月 24 日發佈)當時的資訊。
什麼是 cpx
cpx 是一個可執行 Composer 套件內含指令、無需安裝的工具。可以想成 npm 的npx 的 Composer 版。
為何需要
以composer global require 逐一安裝工具的方式有以下問題:
- 全域相依彼此衝突(在使用
nikic/php-parser、symfony/console等共同相依的工具中很常見) - 想在各專案切換同一工具的不同版本
- 長期使用容易忘記更新全域套件
- 不想為一次性使用的工具做全域安裝
v2.0 的全面重寫
cpx 在 v2.0 全面改寫,現在是以自足式 PHAR形式發佈。基本用法(cpx <package-name> <command> [arguments])與 ~/.cpx 快取目錄維持不變。1.x 已停止開發,包含 bug fix 與安全性修正在內皆無後續發佈。
升級只需重新做一次全域安裝即可。
v2.0 的新功能
本地執行檔優先執行
與 npx 相同,若專案中已有安裝執行檔,會優先執行它,而不裝隔離副本。從目前目錄向上尋找最近的 Composer 專案,執行vendor/bin(預設 bin-dir)中相符的執行檔。
--skip-local。
直接執行本地套件目錄
可直接指定開發中的 Composer 套件目錄,執行其中的執行檔。composer.json,且相依必須事先安裝於 vendor/autoload.php。此情況下 cpx 不會執行 Composer 或複製、快取套件。
cpx exec 與 cpx tinker
準備了多種快速執行 PHP 程式碼的方法。
在 Laravel 專案中,
cpx exec 會啟動整個應用程式(含 config、facade、.env,$app 可用);cpx tinker 則會執行專案本身的 php artisan tinker(前提是已安裝 laravel/tinker)。其他地方則會啟動 PsySH shell。
腳本內可用 cpx_require('vendor/package')(自 1.x 的 composer_require() 更名)於當下 autoload 套件。
別名功能
可自訂快捷方式,就不必記住冗長的套件名稱。非互動模式與 JSON 輸出
cpx 會透過 laravel/agent-detector 偵測 AI Agent、標準輸入是否被重新導向、以及--no-interaction / -n flag,自動判斷是否為非互動環境。在非互動模式下,installed、aliases、alias、unalias、clean、update 等 cpx 管理指令會回傳單行 JSON 而非格式化文字。互動終端也可以加上 --json 得到相同輸出。
由 1.x 的主要變更(指令)
相關頁面
~/.cpx 目錄的快取與舊版本套件會自動遷移到新格式,但過去帶版本限制執行的套件會以新的目錄名稱管理,因此首次會重新安裝一次。1.x 時代不再需要的副本可用 cpx clean 移除。
laravel/cpx 儲存庫
原始碼與最新 README 請見此處。
cpx 2.0 升級指南
1.x 到 2.x 的詳細遷移步驟。