composer执行scripts时默认工作路径是项目根目录(即composer.json所在目录),所有shell命令路径均以此为基准,php脚本须用__dir__定位文件,禁用cd切换目录。

composer scripts 默认工作路径是项目根目录
Composer 执行任何 scripts 时,当前工作目录(getcwd())始终是项目根目录,也就是 composer.json 所在的位置。你不需要、也不应该用 cd 命令切换路径——它不仅多余,还可能因相对路径解析错误导致后续命令失败(比如 php artisan 找不到配置文件)。
PHP 脚本里怎么安全访问项目内文件
如果你在 scripts 中调用的是 PHP 文件(如 "@php scripts/deploy.php"),脚本内部不能依赖运行时的当前目录,因为 Composer 的执行上下文虽是项目根目录,但某些环境(如 Windows 下通过 .bat 包装器触发)可能改变 getcwd()。必须用 __DIR__ 或 dirname(__FILE__) 定位自身位置,再向上或向下拼路径:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
require __DIR__ . '/../../vendor/autoload.php';—— 确保自动加载可用 -
$config = require __DIR__ . '/../config/app.php';—— 读取配置不靠chdir() - 避免
file_get_contents('config/app.php'),它会按当前工作目录找,不可靠
shell 命令中路径写法要严格相对项目根
所有写在 scripts 字段里的 shell 命令(包括 php、chmod、cp 等),其路径都是相对于项目根目录解释的。例如:
-
"php artisan migrate"✅ ——artisan在项目根下,直接可执行 -
"php src/MyTool.php"✅ ——src/是项目根下的子目录 -
"php ./src/MyTool.php"⚠️ ——./多余,且在某些 shell 下可能干扰解析 -
"cd src && php MyTool.php"❌ ——cd后续命令脱离项目根,autoload.php和配置路径全乱
跨平台路径兼容要注意中文和空格
如果项目路径含中文或空格(如 /Users/张三/my-project),Linux/macOS 上的 shebang 脚本(如 #!/usr/bin/env php)可能因解释器无法正确解析路径而失败;Windows 上生成的 .bat 文件若调用 php 时路径含中文,也常报“不是内部或外部命令”。此时最稳做法是:
- 所有 PHP 脚本开头强制
chdir(__DIR__ . '/..');回到项目根(仅限脚本内,非scripts字段) - 避免在
scripts中直接写含空格路径的命令,改用封装好的 PHP 脚本处理 - CI/CD 中优先用容器或干净路径(如
/tmp/build)拉代码,绕过本地中文用户名问题
composer.json 在根目录,所有路径就天然可靠”——但 PHP 脚本一旦脱离 require 链或没重置工作目录,__DIR__ 就成了唯一可信的锚点。










