生产服务器上必须显式使用composer install --no-dev,禁用composer_no_dev=1等环境变量;需绝对路径配置composer_home和composer_cache_dir,所有插值变量(如git_username)须由ci/cd或docker显式注入,部署后验证vendor/中无phpunit等目录。

生产服务器上 composer install 必须跳过 require-dev,且不能依赖 .env 文件或 shell 交互式环境变量——所有变量需显式注入、路径需绝对可控、行为必须可复现。
如何确保 composer install 不装 dev 依赖
生产部署最常踩的坑是漏加 --no-dev,导致 phpunit、laravel-debugbar 等被意外安装并启用,引发安全告警或性能抖动。
-
composer install --no-dev是唯一可靠方式;它只跳过安装,不修改composer.json或autoload-dev定义 - 搭配
--optimize-autoloader可减少类加载开销,尤其在 APCu 或 OPcache 启用时效果明显 - CI/CD 脚本中务必写死该参数,不要靠
COMPOSER_DEV_MODE=0这类隐式开关——它不生效于大多数 Composer 版本 - 验证是否生效:部署后检查
vendor/目录下是否存在phpunit/phpunit或friendsofphp/php-cs-fixer子目录
哪些环境变量必须由外部显式传入
composer.json 中的 ${VAR} 插值只在运行时调用 getenv(),而 vendor/autoload.php 根本不加载 .env ——所以所有插值字段依赖的变量,都得在 composer install 命令启动前就存在。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 支持插值的字段仅限:
config.http-basic、repositories[].url、config.process-timeout等明确文档标注的项;config.repos和scripts字符串本身不解析${VAR} - 私仓认证示例:
config.http-basic写成{"gitlab.example.com": {"username": "${GIT_USERNAME}", "password": "${GIT_TOKEN}"}},则必须提前设好这两个变量 - Linux/macOS:直接
GIT_USERNAME=deploy GIT_TOKEN=xxx composer install --no-dev - Docker 部署时,
docker-compose.yml中用environment:显式列出,别依赖.env文件自动加载(.env是 Compose 解析的,不是 Composer)
为什么不能依赖 ~/.bashrc 或 export 设置全局变量
生产服务器常用非交互式 shell(如 systemd、supervisord、cron)启动部署脚本,它们不读 ~/.bashrc,export 的变量也不会透传到子进程的 PHP 环境里。
-
COMPOSER_HOME必须是绝对路径,不能含~或$HOME;设错会导致auth.json找不到、缓存失效、全局 bin 命令不可用 - 验证方式:
composer config --list --global输出的 “Global configuration file” 路径必须与你预期一致 - CI/CD(如 GitHub Actions)必须用
env:块注入,例如:env: { COMPOSER_NO_INTERACTION: '1', APP_ENV: 'prod' },否则composer install可能卡在交互提示 - PHP 进程内执行的脚本(如
post-install-cmd)读不到 shell 层的export变量,除非命令行显式传入,比如"post-install-cmd": "APP_ENV=${APP_ENV} php artisan config:clear"是错的,应靠外部传APP_ENV=prod,再让脚本直接读$_ENV['APP_ENV']
COMPOSER_HOME 和缓存路径的权限与隔离要点
生产环境多个项目共用同一台服务器时,COMPOSER_HOME 若未隔离,会导致 auth 凭据泄露、缓存污染、甚至全局 bin 冲突。
- 推荐为每个部署用户单独设
COMPOSER_HOME,例如/var/www/.composer,而非复用~/.composer - 设完后手动迁移旧数据:
cp -r ~/.composer/auth.json /var/www/.composer/,并确保auth.json权限为600(Linux/macOS) -
COMPOSER_CACHE_DIR也建议设为项目级路径,如/var/www/myapp/composer-cache,避免不同项目缓存互相干扰 - 验证缓存是否生效:
composer install --no-dev后看COMPOSER_CACHE_DIR下是否有新生成的packages/和repo/目录










