bin字段仅声明项目根目录下真实存在的可执行脚本路径,不自动创建文件或校验合法性;需显式配置如"bin": ["bin/deploy"],并确保chmod +x(unix)或shebang(跨平台兼容)。

bin字段只声明脚本路径,不自动创建或执行
项目自身的 CLI 工具要进 bin 目录,必须在 composer.json 根对象里显式写 "bin" 字段,例如:"bin": ["bin/deploy", "bin/watch"]。这个数组里的每个路径都必须是相对于项目根目录的真实文件,且已存在——Composer 不会帮你新建文件,也不会校验内容是否合法。
常见错误是写了 "bin": ["scripts/*"] 或 "bin": ["./bin/mytool"]:前者不支持 glob,后者路径含 ./ 会被忽略;正确写法只有 "bin": ["bin/mytool"]。
Unix/Linux/macOS 下还必须确保文件有可执行权限:chmod +x bin/mytool;Windows 则依赖扩展名(如 .bat、.phar)或包装脚本识别,但推荐统一加 shebang 行(如 #!/usr/bin/env php)提升跨平台兼容性。
bin-dir 控制链接位置,但只对新安装生效
config.bin-dir 的作用非常具体:它只决定依赖包(如 phpunit/phpunit)和你项目自身 bin 字段声明的脚本,被符号链接或复制到哪个目录。它不迁移旧文件,也不清理 vendor/bin。
改了 "bin-dir": "tools" 后仍看到 vendor/bin/ 里有文件,这是正常现象——vendor/bin 是硬编码默认目标,始终存在;新链接只会出现在 tools/ 下。
要让新配置真正落地,必须:
- 运行
composer clear-cache - 删掉整个
vendor/目录(不能只删vendor/bin) - 再执行
composer install或composer update
否则 Composer 会复用旧缓存结构,tools/ 保持为空。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
Windows 下生成 .bat 而非软链,PATH 和防病毒软件都得管
Windows 没有可靠的符号链接支持,Composer 会自动生成 .bat 包装脚本(如 tools/phpunit.bat),内容是调用 PHP 执行原始脚本。这意味着:
- 直接敲
phpunit不行,得敲phpunit.bat,除非你把.bat加进PATHEXT - 某些防病毒软件会拦截
.bat文件生成,导致命令缺失;临时禁用杀软再重装可验证 - 路径中不能含空格或中文,斜杠必须用正斜杠(
tools✅,my tools❌,tools\❌)
Git Bash 或 WSL 下尤其敏感:哪怕路径存在,反斜杠或波浪号(~)开头都会让生成的 wrapper 脚本第一行解析失败。
PATH 不自动更新,终端和 IDE 都不会感知
Composer 从不修改你的环境变量。改了 bin-dir 后,phpunit 命令依然找不到,99% 是因为 $PATH 没包含新目录。
开发时最轻量的做法是临时加路径:
- Linux/macOS:
export PATH="./tools:$PATH"(当前 shell 生效) - Windows CMD:
set PATH=%cd% ools;%PATH%
但注意:
- IDE(如 VS Code、PHPStorm)启动时不会读取当前终端的
PATH,需重启或手动配置其终端环境变量 - CI/CD 脚本中不建议依赖
PATH,直接用完整路径更可靠,如./tools/phpunit --testdox - 协作项目中避免把绝对路径写进 shell 配置(如
~/.zshrc),别人 clone 后路径就断了
最容易被忽略的一点:项目级 bin-dir 必须是相对路径,写成 "./bin" 或绝对路径会导致 composer install 报错 Invalid bin-dir path。










