Skip to main content
本文根據 laravel/cpx 的 README.md 與 UPGRADE.md 整理。內容為 v2.0.0(2026 年 7 月 24 日發佈)當時的資訊。

什麼是 cpx

cpx 是一個可執行 Composer 套件內含指令、無需安裝的工具。可以想成 npm 的 npx 的 Composer 版。
它在內部會把套件安裝到隔離目錄後執行,因此不會與專案或全域 Composer 相依衝突。第二次以後的執行會重複使用已安裝套件,所以速度很快。

為何需要

composer global require 逐一安裝工具的方式有以下問題:
  • 全域相依彼此衝突(在使用 nikic/php-parsersymfony/console 等共同相依的工具中很常見)
  • 想在各專案切換同一工具的不同版本
  • 長期使用容易忘記更新全域套件
  • 不想為一次性使用的工具做全域安裝
cpx 本身以 PHAR 自足發佈,執行時不帶 Composer 相依,因此全域安裝也不會造成衝突。

v2.0 的全面重寫

cpx 在 v2.0 全面改寫,現在是以自足式 PHAR形式發佈。基本用法(cpx <package-name> <command> [arguments])與 ~/.cpx 快取目錄維持不變。1.x 已停止開發,包含 bug fix 與安全性修正在內皆無後續發佈。 升級只需重新做一次全域安裝即可。
v2.0 需要 PHP 8.3 以上。

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 套件。

別名功能

可自訂快捷方式,就不必記住冗長的套件名稱。
1.x 內建的熱門套件別名一覽已被廢除,若需要請自行定義。

非互動模式與 JSON 輸出

cpx 會透過 laravel/agent-detector 偵測 AI Agent、標準輸入是否被重新導向、以及 --no-interaction / -n flag,自動判斷是否為非互動環境。在非互動模式下,installedaliasesaliasunaliascleanupdate 等 cpx 管理指令會回傳單行 JSON 而非格式化文字。互動終端也可以加上 --json 得到相同輸出。

由 1.x 的主要變更(指令)

相關頁面

~/.cpx 目錄的快取與舊版本套件會自動遷移到新格式,但過去帶版本限制執行的套件會以新的目錄名稱管理,因此首次會重新安裝一次。1.x 時代不再需要的副本可用 cpx clean 移除。

laravel/cpx 儲存庫

原始碼與最新 README 請見此處。

cpx 2.0 升級指南

1.x 到 2.x 的詳細遷移步驟。
最後修改於 2026年8月2日