必须在 composer.json 的 autoload.classmap 中声明路径并执行 composer dump-autoload,否则 composer 不会扫描无 composer.json 的目录;classmap 仅映射类/接口/traits,全局函数需用 autoload.files。

本地目录没 composer.json,怎么让 Composer 认得它?
根本没法直接“引入”——Composer 不解析无 composer.json 的目录。你得用 classmap 手动告诉它:“这些 .php 文件里的类,我全要。”这不是加载包,是映射文件。
常见错误现象:把老 SDK(比如 vendor/legacy/sdk-v2.1/)直接扔进 vendor/,composer install 成功但运行时报 Class not found。不是路径错,是 Composer 压根没扫描它。
-
classmap是唯一稳的方案:它不看命名空间、不依赖文件名,只扫描 PHP 文件里实际声明的class、interface、trait - 在项目根目录
composer.json的autoload段加:"autoload": { "classmap": ["vendor/legacy/sdk-v2.1/"] } - 改完立刻执行
composer dump-autoload,否则映射表不更新 - 如果目录里有全局函数(非 class),
classmap不管用,得改用autoload.files列出具体文件
路径含中文或空格,配置会崩吗?
会,但不是 Composer 本身的问题,是 JSON 解析和系统路径处理双重踩坑。
使用场景:测试环境临时放包在 桌面/旧SDK/ 或 D:/我的项目/legacy-lib/,想快速接入。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- JSON 中路径必须用双引号包裹,且不能出现未转义的
"、\、换行 - Windows 下必须用正斜杠
/,例如:"D:/我的项目/legacy-lib/",写成D:\我的项目\legacy-lib\会触发反斜杠转义,变成非法 JSON - 路径中含中文时,确保编辑器保存为 UTF-8 编码;某些旧版 PHP CLI 在 Windows 上可能读取失败,建议优先挪到英文路径下验证
- 别用
file://前缀——Composer 会静默忽略整个仓库定义
为什么改了本地文件,新类还是找不到?
不是缓存没清,是 classmap 映射表根本没重生成。
性能影响:每次 dump-autoload 都要遍历目录下所有 .php 文件并解析 AST,目录越大越慢。别把它当开发时的热重载机制用。
-
composer dump-autoload必须手动触发,它不会监听文件变化 - 如果新增了文件但没重新 dump,新类永远不进自动加载器
- 删了旧文件也不自动剔除——映射表是静态快照,旧条目残留可能导致奇怪的
Cannot redeclare class - CI 环境务必确认该命令被执行,否则上线后报错
能用 repositories + package 类型绕过 classmap 吗?
能,但代价高,只适合一次性集成 ZIP 包或 FTP 资源,不适合持续开发的本地目录。
参数差异大:package 类型要求你手补全部元数据,而 classmap 只需声明路径。
- 必须在
repositories里写死dist.url,支持http(s)、ftp、本地绝对路径(如file:///D:/legacy.zip) -
autoload必须写对,且仅限于该 ZIP 解压后的结构;一旦源 ZIP 更新,就得改版本号再update - 无法响应本地代码实时修改——每次改都得重新打包、改 URL、再 update,不如直接
classmap+dump-autoload - 若本地目录没 Git 提交,
path类型会拒绝加载;但package类型完全不管 Git,只认 dist
classmap 把责任交给你:路径变了、文件增删了、函数升级成 class 了……全得你手动同步 dump-autoload。没人帮你盯。










