答案:Composer腳本不直接支持命令行傳參,推薦使用環(huán)境變量傳遞參數(shù)。通過MY_ARG=value composer run my-script設置環(huán)境變量,在PHP腳本中用getenv()讀取;或結合shell腳本封裝并導出變量,再在腳本中接收$event->getArguments()獲取有限上下文信息,但最穩(wěn)定方式仍是環(huán)境變量。
在 Composer 中,scripts 是定義在 composer.json
中的自定義命令鉤子,比如在安裝、更新或 dump 自動加載時觸發(fā)。但這些腳本本身不直接支持通過命令行傳參,需要一些技巧來實現(xiàn)參數(shù)傳遞。
最常用的方式是通過設置環(huán)境變量,在腳本執(zhí)行時讀取這些變量。
例如,在命令行中運行:
composer run my-script -- --some-option=value上面這樣寫并不會自動把參數(shù)傳進 PHP 腳本,你需要換一種方式:
改用環(huán)境變量:
MY_ARG=value composer run my-script然后在你的 PHP 腳本中獲?。?/p>
$arg = getenv('MY_ARG') ?: 'default'; echo "Received: $arg";
對應的 composer.json
配置:
"scripts": { "my-script": "MyNamespace\Script::run" }
Composer 的 run-script
命令允許附加參數(shù),但這些參數(shù)會作為全局選項處理,并不會自動傳給腳本方法。
你可以這樣嘗試:
composer run my-script -- --verbose但注意:這些參數(shù)是傳給 Composer 自身的,不是直接傳給腳本函數(shù)的。除非你在腳本中解析 $_SERVER['argv']
,否則無法獲取。
如果你一定要從 argv
解析,可以在腳本中這么做:
// 注意:這種方式只在以 bin 形式調(diào)用或特殊配置下有效 global $argv; foreach ($argv as $arg) { if (strpos($arg, '--key=') === 0) { $value = substr($arg, 6); } }
但這通常不可靠,因為 Composer 并不保證將參數(shù)透傳到靜態(tài)方法中。
更清晰的方式是寫一個小型包裝腳本,通過 shell 設置變量再調(diào)用 Composer:
#!/bin/bashPHP 腳本中讀?。?/p>
class Script { public static function customCommand($event) { $mode = getenv('SCRIPT_MODE') ?: 'prod'; $debug = getenv('DEBUG') === 'true'; <pre class="brush:php;toolbar:false;"><pre class="brush:php;toolbar:false;"> echo "Running in $mode mode, debug: " . ($debug ? 'on' : 'off'); }
}
雖然不能直接傳參數(shù),但腳本可以接收 ComposerScriptEvent
對象,從中獲取一些上下文:
public static function myScript($event) { $args = $event->getArguments(); // 獲取命令行參數(shù)(如果有的話) $io = $event->getIO(); }
但注意:getArguments()
只有在通過某些特定命令(如 create-project
)觸發(fā)腳本時才有值,普通 run-script
不會填充它。
基本上就這些。Composer 腳本本身設計上不是為了接收復雜參數(shù),所以最穩(wěn)定的方式還是用環(huán)境變量控制行為。不復雜但容易忽略。
以上就是composer中的scripts如何傳遞參數(shù)的詳細內(nèi)容,更多請關注php中文網(wǎng)其它相關文章!
每個人都需要一臺速度更快、更穩(wěn)定的 PC。隨著時間的推移,垃圾文件、舊注冊表數(shù)據(jù)和不必要的后臺進程會占用資源并降低性能。幸運的是,許多工具可以讓 Windows 保持平穩(wěn)運行。
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號