composer.lock 必须提交到 git,它是生产环境依赖版本的唯一事实来源;composer 2.5+ 缺失或不匹配时 install 直接失败;ci/cd 和 docker 构建必须包含该文件并使用 --no-dev --no-scripts --no-autoloader 参数;镜像源需全局配置并验证;minimum-stability 与 prefer-stable 必须同时设于 composer.json 根级。

composer.lock 文件必须提交到 Git
不提交 composer.lock,生产环境就不可能稳定——它不是“可选缓存”,而是版本事实的唯一来源。Composer 2.5+ 已强化校验:如果 composer.lock 缺失或内容不匹配 composer.json 中声明的依赖,composer install 会直接失败,而不是降级尝试。
- 每次
composer update或首次composer install后,必须执行git add composer.lock并提交 - CI/CD 构建脚本中禁止使用
composer update;只允许composer install,且必须确保构建上下文里存在该文件 - Docker 构建时常见错误:COPY 只复制了
composer.json,漏掉composer.lock—— 检查ls -l输出确认两者都在
生产部署必须用 --no-dev --no-scripts --no-autoloader
这些参数不是“优化选项”,而是隔离风险的硬边界。框架(如 ThinkPHP、Laravel)的 post-install 脚本可能清缓存、写 runtime、甚至连 DB 建表,在只读文件系统或无权限容器里必然失败,但默认会中断整个安装流程。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
--no-dev:跳过所有require-dev里的包,避免测试工具污染线上环境 -
--no-scripts:禁用所有scripts钩子,防止意外执行 -
--no-autoloader:延迟 autoload 生成,让后续dump-autoload -o单独可控 - 正确顺序:
composer install --no-dev --no-scripts --no-autoloader→composer dump-autoload -o→ 手动触发必要脚本(如php think clear)
镜像源必须全局配置,且验证是否生效
靠改单个项目 composer.json 的 repositories 或 CI 环境变量临时覆盖,极易被缓存、覆盖或忽略。国内直连 packagist.org 在 2026 年仍频繁 TLS 握手失败、DNS 污染、CDN 不可达。
- 执行
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 验证命令:
composer config -g repo.packagist,输出必须是{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"},而非空或packagist.org - CI 构建脚本开头应显式重置一次,避免继承旧镜像预装的 Composer 配置
minimum-stability 和 prefer-stable 必须配对设置
prefer-stable 单独存在几乎无效——它只在 minimum-stability 过滤后的候选版本里“挑更稳的”,没候选就无事可做。而 minimum-stability 写在 config 或 extra 里完全被忽略。
- 两者都必须放在
composer.json根层级,与require并列 - 设为
"minimum-stability": "stable"+"prefer-stable": true才真正锁定稳定版优先 - 改完后必须运行
composer update --lock,否则composer.lock仍锁着旧规则下的 dev-main - 验证是否真生效:删掉
vendor和composer.lock,再跑一次composer install
composer.lock 是否真实反映约束、是否被严格执行、是否被所有人信任。任何跳过它的操作,都是在赌网络和运气。










