composer脚本总在项目根目录执行,无需cd切换;路径应以根目录为基准,用${pwd}锚定或直接写storage/等相对路径,避免权限和用户不一致问题。

Composer 脚本本身没有“执行路径配置”这个概念——它总是在项目根目录下运行,scripts 字段里写的命令默认工作目录就是 composer.json 所在位置。所谓“路径问题”,几乎全是因误判当前目录、硬写相对路径或权限错乱导致的。
脚本里写 cd vendor 为什么总失败
因为没必要,而且危险。Composer 执行所有 scripts 时,当前工作目录(getcwd())一定是项目根目录。你手动 cd vendor 后,后续命令如 php ../artisan migrate 就容易错位;更糟的是,如果脚本被 CI 工具以非交互式 shell 启动,cd 可能完全不生效。
- 删掉所有
cd xxx行,直接用项目根目录为基准写路径 - 需要访问
storage/或bootstrap/app.php?直接写chmod -R 755 storage/或php artisan config:clear - 必须动态拼路径?用
${PWD}显式锚定,比如php ${PWD}/artisan key:generate
post-install-cmd 里调用 php artisan 权限报错怎么办
常见现象是脚本卡住或报 Permission denied,不是 PHP 权限问题,而是执行用户和 Web 服务器用户不一致,或者 storage/ 目录属主不对。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 别在脚本里用
sudo chmod—— CI 环境通常禁止 sudo,且不安全 - 改用
chown -R $USER:www-data storage/(Linux)或chmod -R u+rwX,g+rwX storage/(更细粒度) - 确认
php命令调用的是 CLI 版本:加-v检查,比如php -v输出应含cli,而非cgi - 如果
artisan是软链接,确保它指向真实文件(某些部署会删掉vendor/bin链接)
想让脚本在子目录里运行?别绕弯,用 composer exec
如果你真有需求在 packages/my-package 下执行某命令(比如跑单元测试),不要改 scripts 或切目录,直接用 Composer 自带的转发机制:
composer exec --working-dir=packages/my-package phpunit
这比手写 cd packages/my-package && phpunit 更可靠,因为:
-
--working-dir由 Composer 主进程控制,不会受 shell 限制影响 - 自动识别
vendor/bin/phpunit,不用管 PATH 是否包含vendor/bin - 支持跨平台,Windows 下也能用(不用改
&&为&)
真正容易被忽略的是:脚本是否执行,90% 取决于触发事件是否满足条件,而不是路径写得对不对。比如 post-install-cmd 在 composer install --no-scripts 下压根不跑,CI 流水线里若默认加了这个 flag,再完美的路径配置也白搭。










