Composer 的 bin 字段须写在包根目录 composer.json 中,值为含可执行权限的相对路径字符串数组,安装后链接至 vendor/bin/;全局命令需通过 composer global install 并配置 PATH 实现。

bin 字段写在哪、怎么写才生效
Composer 的 bin 字段必须写在包根目录的 composer.json 里,且只对当前包本身有效。它不是给项目用的配置,而是告诉 Composer:“这个包提供哪些可执行脚本,安装后应该软链接到 vendor/bin/”。
- 值必须是字符串数组,每个元素是相对于包根目录的可执行文件路径(如
"bin/my-cli") - 文件本身得有可执行权限(Linux/macOS 下
chmod +x),Windows 下则需是.bat或.cmd,或靠 PHP 解释器识别的.php文件(首行带#!/usr/bin/env php) - 如果路径写错(比如文件不存在、拼写错误),
composer install不报错,但vendor/bin/下不会生成对应软链接
全局可用 ≠ 放到 PATH,得靠 composer global install
想让命令像 laravel 或 phpunit 那样全局敲就运行,不能只靠 bin 字段 —— 它只影响本地 vendor/bin/。真正实现全局,得走 composer global install 流程。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
composer global install vendor/package会把包装进~/.composer/vendor/,并把它的bin脚本链接到~/.composer/vendor/bin/ - 你得手动把
~/.composer/vendor/bin加进系统PATH(否则敲命令找不到) - 注意:全局安装的包,其
bin脚本依赖的 autoloader 是全局 vendor 目录下的,不是项目里的 —— 所以脚本里别硬写require 'vendor/autoload.php',要用__DIR__.'/../vendor/autoload.php'这种相对路径,或更稳妥地用 Composer 自动注入的autoload.php
脚本文件第一行和入口逻辑怎么写才不翻车
很多脚本跑不起来,问题出在解释器声明或加载方式上。尤其跨平台时,Windows 和类 Unix 行为差异明显。
- PHP 脚本必须以
#!/usr/bin/env php开头(Linux/macOS 必须;Windows 可省略但建议保留,不影响) - 不要用
#!/usr/bin/php—— 路径可能不一致,env更可靠 - 脚本里加载 autoloader 时,优先用
require __DIR__.'/../vendor/autoload.php';,而不是假设项目根目录结构;如果是全局安装的包,../vendor指向的是全局 vendor 目录 - 常见错误:
PHP Fatal error: Class 'SomeClass' not found—— 基本就是 autoloader 没加载对,或者类没按 PSR-4 声明命名空间和路径
为什么 vendor/bin/ 下的命令有时“找不到”,有时“报错找不到扩展”
这不是 bin 字段的问题,而是环境隔离导致的。vendor/bin/ 里的脚本本质是 shell 软链接,执行时仍走当前 shell 环境的 PHP 和扩展。
- 如果你用
php@8.2全局安装了包,但项目里用php@8.1运行vendor/bin/my-cli,脚本实际由 8.1 执行 —— 如果它依赖 8.2 特性,就崩 - 扩展缺失(如
curl、mbstring)也是同理:检查当前 CLI PHP 的php -m,不是 Web Server 的 - 调试技巧:在脚本开头加
echo `which php`; php --version; exit;,确认执行的是哪个 PHP

















