composer install 本身不会、也不能安装操作系统级的二进制(比如 ffmpeg、node、git 或 protoc),它只管理 PHP 包及其 autoload 和 scripts;vendor/bin 中的软链接仅指向包内 PHP 脚本,不下载或安装系统命令。

Composer install 不负责安装系统二进制依赖
直接说结论:composer install 本身不会、也不能安装操作系统级的二进制(比如 ffmpeg、node、git 或 protoc)。它只管理 PHP 包及其 autoload 和 scripts。如果你在 composer.json 里写了 "bin" 字段,那只是把包自带的 PHP 脚本软链接到 vendor/bin/,不是下载或安装系统命令。
常见误判场景:composer require 后命令仍不可用
现象是:执行了 composer require phpunit/phpunit,然后想直接运行 phpunit,却提示 command not found。原因有二:
-
vendor/bin/没加进$PATH,导致 shell 找不到可执行文件 - 你实际需要的是系统级
phpunit(比如用于 IDE 集成或 pre-commit hook),而 Composer 安装的只是项目内可用的版本 - 某些包(如
symfony/cli)虽提供bin/symfony,但它仍是 PHP 脚本,不等价于官方发布的二进制symfonyCLI
真正安装系统二进制的可行路径
要让 ffmpeg、node、jq 这类命令全局可用,必须绕过 Composer,走系统包管理器或官方分发渠道:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- Linux(Debian/Ubuntu):
apt install ffmpeg或curl -fsSL https://deb.nodesource.com/setup-lts.x | sudo -E bash && apt install -y nodejs - macOS:
brew install ffmpeg或brew install node - CI 环境(GitHub Actions):用
actions/setup-node@v4、webfactory/ssh-agent等专用 action,而非靠composer install - Docker:在
Dockerfile中显式RUN apt-get update && apt-get install -y ffmpeg
注意:composer install 可以触发 post-install-cmd 脚本,但脚本里调用 sudo apt install 通常失败(无权限、非交互、CI 环境限制),不推荐依赖这种方式。
兼容性与路径陷阱
即使你手动装好了系统二进制,PHP 进程也不一定自动能找到它:
-
exec('ffmpeg -version')失败?先检查getenv('PATH')是否包含/usr/local/bin或/opt/homebrew/bin - Web 服务器(如 Apache)的
PATH常比 shell 短,需在httpd.conf或.htaccess中显式设置SetEnv PATH "/usr/local/bin:/usr/bin:/bin" - Docker 内运行 PHP 时,
which ffmpeg成功不代表宿主机有——镜像必须自己装,不能指望 host 传导
系统二进制和 Composer 包是两条平行线,强行混用只会增加调试成本。该用 apt 的地方别硬塞进 composer.json。

















