必须将repositories配置在composer.json根级,与require同级;不能写入require块,否则完全无效。路径需为相对路径(如"../my-local-package"),本地包必须含合法composer.json(name、version、autoload齐全),且修改代码后需执行composer update vendor/name刷新符号链接。

repositories 必须写在根级,不能塞进 require 或 config
Composer 只认 repositories 数组里声明的 type: "path" 条目,其他任何位置都无效。常见错误是把路径直接写进 require 块,比如:"vendor/my-pkg": "./local" —— 这行代码完全被忽略,composer install 仍会去 Packagist 找包,报 Could not find package。
正确结构必须是:
{
"repositories": [
{
"type": "path",
"url": "../my-local-package"
}
],
"require": {
"vendor/my-pkg": "*"
}
}
-
repositories和require是同级字段,都在 composer.json 根层级 -
url是相对于当前 composer.json 文件的路径,推荐用../或./packages/xxx,别用绝对路径(跨平台失效) - 严禁加
file://前缀——Composer 直接跳过该仓库
本地包的 composer.json 必须有 name、version(或 dev 分支)、autoload
没有合法的 composer.json,Composer 就不认为那是“包”。哪怕目录存在、代码能跑,也加载失败。
最小必要字段:
-
name:格式必须为vendor/name,且和主项目require中写的**完全一致**(大小写、斜杠、连字符都不能错) -
version:可写"dev-main"或"1.0.0";若留空,"*"会静默失败,除非你同时设了"minimum-stability": "dev" -
autoload:比如"psr-4": {"Vendor\MyPkg\": "src/"},否则类找不到,报Class not found
额外硬性要求:该目录必须是 Git 仓库(哪怕只执行 git init && git commit -m "init"),否则 Composer 拒绝识别。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
改了本地包代码,为什么新方法还是调不到
这不是自动加载缓存问题,而是符号链接没刷新。Composer 对 path 类型包默认走 symlink(Linux/macOS)或 copy(Windows),但链接/复制动作只在 composer install 或 composer update vendor/name 时触发。
- 首次引入后,运行
composer require vendor/name或composer update vendor/name - 后续修改本地包源码(如新增方法、改逻辑),**必须再运行
composer update vendor/name**(指定包名,避免全量更新) - 如果只是改了类文件内容,且已启用 symlink(默认开启),则无需
dump-autoload;但若改了autoload映射(如新增命名空间或路径),就必须补上composer dump-autoload
验证是否真链接成功:Linux/macOS 下执行 ls -la vendor/vendor/name,输出应含 -> ../my-local-package;Windows 下若看到完整复制的文件夹,说明 symlink 失败(需管理员权限或开发者模式)。
CI/CD 和上线前最容易忽略的三个点
path 类型仓库是开发专用机制,它在 CI 环境里基本不可用,也绝不能进生产环境。
- CI 环境通常设
COMPOSER_DISALLOW_PLUGINS=1或禁用 symlink,导致composer install直接报错Could not find package - 上线前必须手动删掉
repositories里的path条目,并把require改成真实发布版本(如"vendor/my-pkg": "^2.1") - 本地包若含
require.php等严格约束(如"^8.2"),而部署环境 PHP 版本较低,会引发兼容性报错——这问题只在构建阶段暴露,本地开发时可能一直没发现
真正容易被忽略的是:path 仓库优先级高于 Packagist,哪怕你 require 的是 "^1.2",只要本地路径存在,Composer 就装本地版,且不做语义化版本校验。调试时务必用 composer show vendor/name 确认 source: path 是否生效。










