Composer install 不读取 .env 文件,也不自动加载环境变量;APP_ENV 等变量需在 shell 中显式导出(如 env APP_ENV=production composer install),或通过 CI/CD 显式传参,否则 scripts 中的 artisan 等命令才可能由 Dotenv 加载 .env。

Composer install 本身不读取 .env 文件,也不自动加载 shell 环境变量——它只继承你启动它的那一层 shell 的环境。所以“配置环境变量”不是 Composer 的功能,而是你得让 PHP 进程、或后续脚本(比如 artisan)能拿到这些变量。
composer install 时怎么让 APP_ENV 生效
常见错误是把 .env 放在项目根目录,然后以为 composer install 会自动读它、并传给 post-install-cmd 脚本。实际不会。
-
composer install只负责下载包、生成 autoload、执行 scripts;它不调用vlucas/phpdotenv,也不解析.env - 如果你的
scripts里写了"post-install-cmd": "php artisan optimize",那artisan启动时才会加载.env(前提是项目用了 Dotenv) - 想让
composer install阶段就看到APP_ENV,必须提前在 shell 中导出:APP_ENV=production composer install - CI/CD 中推荐显式传参:
env APP_ENV=staging composer install,避免依赖全局环境
COMPOSER_AUTH 和私有仓库认证怎么设才可靠
COMPOSER_AUTH 是 Composer 唯一原生支持的 JSON 格式认证环境变量,但它只在特定字段生效,且有严格格式要求。
- 必须是合法 JSON 字符串:
export COMPOSER_AUTH='{"http-basic":{"repo.example.com":{"username":"u","password":"p"}}}' - 仅对
config.http-basic和repositories[].url中含${VAR}占位符的 URL 生效(如"https://${TOKEN}@repo.example.com") - Windows CMD 下双引号易出错,建议改用 PowerShell:
$env:COMPOSER_AUTH='{"http-basic":{...}}' - 更稳妥的做法是用
composer config -g http-basic.repo.example.com user token写入全局配置,避免环境变量泄漏风险
为什么改了 ~/.bashrc 的 export 没生效
改完 ~/.bashrc 或 ~/.zshrc 后不重启终端,composer install 依然看不到新变量——因为 Composer 进程没继承到。
立即学习“PHP免费学习笔记(深入)”;
- 运行
source ~/.zshrc(macOS/Linux)或关闭重开终端(Windows)是必须步骤 - IDE 内置终端(如 VS Code、PhpStorm)往往不读 shell 配置文件,需在 IDE 设置里勾选 “Run in login shell” 或手动设置环境变量
- 用
php -r "var_dump(getenv('APP_ENV'));"在 script 中验证,比echo $APP_ENV更准确(后者只显示 shell 层变量) - 如果用
sudo composer install,环境变量默认被清空;加-E保留:sudo -E composer install
COMPOSER_HOME 设错会导致 autoload 失效
一旦设了 COMPOSER_HOME,Composer 就完全忽略默认路径(~/.composer 或 %APPDATA%\Composer),所有全局行为都基于这个路径。
- 必须是绝对路径:不能含
~、$HOME、%USERPROFILE%;Linux 上写成/home/user/.composer,Windows 上写成C:\Users\Name\AppData\Roaming\Composer - 设错后
composer global require laravel/installer会装到错误目录,导致laravel命令找不到 - 验证方式只有
composer config --list --global,看顶部 “Global configuration file” 路径是否正确 - PATH 添加也要同步更新:Linux/macOS 改
export PATH="$COMPOSER_HOME/vendor/bin:$PATH",Windows 改系统 PATH 项
最常被忽略的一点:环境变量是否生效,取决于「谁启动了 Composer」,而不是「你在哪执行命令」。IDE、Docker、systemd、sudo、甚至 Git Bash 和 Windows Terminal 的子 shell 行为都不一样——别假设 export 一次就处处有效。



















