“Could not find package”主因是repositories未置根级、path路径错误或name不匹配;需确保其与require同级、指向含composer.json的目录、name逐字一致,并运行dump-autoload验证autoload配置。

require 报 “Could not find package” 怎么快速定位
这几乎从来不是网络或缓存问题,而是 Composer 根本没“看到”你的本地包目录。最常见三处硬性断裂点:
• repositories 没写在主项目 composer.json 的根级(必须和 require 同级),塞进 config 或 autoload 里完全无效
• url 指向的不是含 composer.json 的目录,而是文件本身,或末尾多了一个 /(如 "../my-pkg/")
• 本地包的 composer.json 里 name 字段(如 "acme/utils")和主项目 require 中写的字符串**逐字节不一致**:大小写、斜杠方向、连字符/下划线混用全算错
path 仓库必须显式启用 symlink 才能热更新
默认行为在 Linux/macOS 是尝试链接,在 Windows 是直接复制——改本地代码永远不生效。要真正热更新,必须同时满足:
• 在主项目 composer.json 的对应 repositories 条目里加 "options": {"symlink": true}
• 本地包目录已执行 git init && git add . && git commit -m "init"(Composer 拒绝为无 Git 提交的目录建 symlink)
• Windows 用户必须以管理员身份运行终端,否则 symlink 创建失败且无任何提示
• 验证是否成功:Linux/macOS 运行 ls -la vendor/acme/utils,输出中应含 ->;Windows 运行 dir vendor\acme\utils,应显示 <symlinkd></symlinkd>
装上了但 Class not found?autoload 没刷新
符号链接建对了,类还是找不到,90% 是 autoload 映射没更新。Composer 不会自动感知本地包 composer.json 中 autoload 字段的变更。
• 确保本地包的 composer.json 正确声明了 PSR-4,例如:"psr-4": {"Acme\Utils\": "src/"}(注意双反斜杠和路径结尾无多余斜杠)
• 修改后必须手动执行:composer dump-autoload -o(加 -o 生成优化版映射,开发期可省略)
• 如果新增了 autoload-dev 映射(比如 "tests/),也要一并刷新,否则测试类无法加载
为什么 composer install 不触发 symlink 更新
composer install 只读 composer.lock,不会重新解析仓库类型或重建链接。哪怕你刚改完 repositories 并删了 vendor/,它也只会按 lock 文件里的旧快照恢复——静默复制,不走 path 源。
• 首次引入或修改配置后,必须用:composer update acme/utils(精确到包名,不是 update 全局)
• 别信 "*" 或 "@dev":它们会让 Composer 绕过 path 仓库直连 Packagist。稳妥写法是 "acme/utils": "dev-main",且本地包 composer.json 中明确设 "version": "dev-main"
• 删除本地包目录后,Composer 不报错也不警告,install 会安静跳过该包——这是最易被忽略的“假成功”状态
真正难的不是配对字段,而是所有条件必须同时成立:name 严丝合缝、路径相对有效、Git 已提交、symlink 选项开启、权限到位、autoload 手动刷新。漏掉任意一环,Composer 都不会报错,只会在背后默默 fallback 到 copy 或 Packagist。


















