post-autoload-dump是唯一可靠的清理入口,因其在vendor/autoload.php生成完毕后触发,确保类可加载、命令安全执行,覆盖install/update/dump-autoload全场景且不受--no-scripts影响。

post-autoload-dump 是唯一靠谱的清理入口
别再往 post-install-cmd 或 post-update-cmd 里塞清理命令——这些钩子在 vendor/autoload.php 写完前就触发,php artisan 或 rm -rf 极易因类未加载或权限不足失败。真正稳定、覆盖 install/update/dump-autoload 全场景、且不受 --no-scripts 干扰的,只有 post-autoload-dump。
它确保所有 autoload 文件已落盘、类可实例化,此时执行框架命令或文件操作才安全。CI/CD 中若跳过此事件,基本等于放弃自动化清理。
- 配置示例:
"post-autoload-dump": ["@php artisan config:clear --no-interaction", "php bin/clean-vendor.php"] - 必须加
--no-interaction,否则 Laravel/Symfony 命令可能卡住 - 避免用
&&链式调用,Composer 对 shell 语法支持不稳,分多行更可靠
清理 vendor 冗余文件不能只靠 rm -rf
直接 rm -rf vendor/*/tests 看似快,但会误删某些包运行必需的路径(比如 laravel/framework/src/Illuminate/Foundation/Testing/TestCase.php 是测试基类,但被生产代码继承;doctrine/orm/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php 的 tests/ 目录里可能含 schema 示例文件,被注解解析器读取)。
真正安全的做法是:先重建 vendor,再用插件精准剔除。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 部署脚本中必须包含:
rm -rf vendor/ composer.lock→composer install --no-dev --optimize-autoloader --classmap-authoritative→composer cleaner -
composer cleaner依赖extra.cleaner.exclude配置,匹配的是包内相对路径(如/Tests/),不是vendor/foo/bar/Tests/ - 别漏掉
.git和.github—— 它们不占 autoload,但常被忽略,且存在安全风险
PHP 脚本比 shell 命令更适合跨平台清理
rm -rf 在 Windows 下默认失败,del /q 又难写对路径和转义。CI 环境(如 GitHub Actions 的 windows-latest)根本不会识别 rm,导致脚本中断。
把逻辑抽成 bin/clean.php,用原生 PHP 函数控制行为,才是生产级做法。
- 开头加
chdir(dirname(__DIR__));确保工作目录正确 - 用
is_writable()检查目标目录权限,避免静默失败 - 删除前用
filemtime()判断日志/缓存是否超期,不硬删当天文件 - 对
storage/logs/这类可能按日期分目录的路径,用RecursiveDirectoryIterator替代glob()
中文项目最容易被忽略的三类残留
中文生态常用 Laravel/ThinkPHP/自研框架,其配置驱动和服务发现机制隐蔽,composer-unused 扫不出来,人工 review 容易漏。
-
config/*.php中硬编码的类名字符串(如'monolog/handler/stream'),删了包但没删配置,运行时报Class not found -
app/Providers/里注册的服务提供者(如TelescopeServiceProvider),删了laravel/telescope却忘了注释掉$this->app->register() - 注解驱动的类(如
@ORM\Entity引用的实体类路径、@phpstan-ignore-next-line所在文件),这些不走 autoload,但影响运行时行为
这些点没法靠脚本全自动识别,必须结合 grep -r 和人工确认——自动清理能减负,但不能替代代码审计。










