composer run-script执行失败主因有三:脚本名拼错、未定义或大小写不一致导致“script not found”;脚本值错误如"test": "phpunit"但vendor/bin/phpunit缺失或path未包含;php类方法调用时未显式加载autoload.php引发class not found。

composer run-script 为什么执行失败
脚本名拼错、没定义、大小写不一致,都会直接报 Script not found;更隐蔽的是脚本值本身出问题:比如写成 "test": "phpunit",但项目里没装 vendor/bin/phpunit,或 PATH 没包含 vendor/bin,就会提示 Command "phpunit" is not defined。
常见陷阱:
- 脚本名含短横线(如
ci:lint)时,composer ci:lint会报错,必须用composer run-script "ci:lint"并加双引号(Windows CMD 尤其需要) -
composer run-script默认不加载autoload.php,所以 PHP 类方法调用(如"deploy": "App\Scripts\Deploy::run")会抛Class not found,得显式加php -d auto_prepend_file=vendor/autoload.php - 脚本中用
exec('git rev-parse --abbrev-ref HEAD')可能返回空——Composer 的子进程对信号敏感,建议改用shell_exec()并检查返回值
怎么传参给自定义脚本
参数不会自动透传。想让 phpunit --filter=MyTest 真正收到 --filter,必须用双横线 -- 显式分隔:
composer run-script test -- --filter=MyTest
漏掉中间那个 --,phpunit 根本收不到参数,只会跑全部用例。
其他要点:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 脚本值里含空格或特殊字符(如
php script.php --env=prod),必须用单引号包裹:"test": "php 'tests/run.php' --group=unit" - PHP 脚本内获取参数,别依赖
$argv(索引可能偏移),优先用$_SERVER['COMPOSER_ARGS'](Composer 4.0+)或getenv('COMPOSER_ARGS') - Windows 下 CMD 里双引号若不转义或用全角,
composer run-script "test -- --filter="会解析失败;PowerShell 更稳妥
composer xxx 和 composer run-script 有什么区别
日常推荐直接用 composer test 这类简写,它本质是 composer run-script test 的语法糖,且自动触发 pre-test/post-test 钩子。
只有两种情况才必须用 composer run-script:
- 脚本名含冒号、点号等非标准字符(如
ci:lint),composer ci:lint会报错 - 想绕过钩子,只执行原始脚本逻辑,就得加
--no-hooks(不是--no-dev)
注意:composer run-script test --no-hooks 和 composer test 行为不同——后者默认启用钩子,前者禁用。
脚本里怎么安全引用路径和环境变量
别硬写 vendor/bin/phpcs,改用 ./vendor/bin/phpcs 或 php ./vendor/bin/phpcs,避免当前 shell 目录影响执行路径。
环境变量方面:
- Linux/macOS 下
$PATH可展开,但 Windows CMD 不认$PATH,只认%PATH%,混用会导致行为不一致 - 跨平台安全写法是
php -r "echo $_ENV['APP_ENV'] ?? 'dev';",而不是echo $APP_ENV - 所有脚本默认在
composer.json所在目录执行,不是你当前 shell 路径;vendor/bin/会被 Composer 自动加到PATH前置位,所以"cs": "php-cs-fixer"能直接调用
调试时加 -v 看详细输出,尤其留意 Script … handling the … event returned with error code … 这类提示——它比静默失败更有诊断价值。










