答案是name字段必须与require逐字一致、路径须指向含composer.json的目录且不带尾部斜杠、本地包需git init并有commit;symlink需在本地包composer.json中声明,autoload修改后须执行composer dump-autoload -o。

composer.json 的 name 和 require 必须严格对齐主项目
本地扩展包装不上,90% 是因为 name 字段不一致。主项目执行 composer require vendor/name:dev-main 时,Composer 只会去 repositories 列表里找匹配 vendor/name 的源——它根本不管你的包目录叫什么,只认 composer.json 里的 name 值。
常见错误:
-
name写成acme/utils,但require里写的是Acme/utils(大小写敏感) - 本地包
composer.json缺失,或name字段漏写、拼错 -
repositories错误地写在了本地包自己的composer.json里,而不是主项目的
path 类型仓库必须用相对路径 + 显式 symlink 配置
Windows 下用绝对路径(如 C:/work/my-pkg)基本等于白配:Composer 会静默跳过该目录,既不报错也不链接。Linux/macOS 虽能容忍,但跨机器协作时绝对路径必然失效。
正确做法是:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 在主项目
composer.json的repositories中写相对路径:"url": "./packages/my-pkg"或"url": "../my-pkg" - 显式启用符号链接:
"options": {"symlink": true}(Windows 必须加,且需以管理员权限运行命令行或开启开发者模式) - 本地包目录下必须有 git 仓库(
git init && git add . && git commit -m "init"),否则 Composer 直接忽略
改完本地包代码后,必须 composer update 才生效
很多人以为改完 src 就自动热更,其实不是。Composer 默认只在 install 时创建链接,update 才会刷新 symlink 目标指向的最新 commit。如果用的是 copy 模式(比如 CI 环境),那改代码完全没用——除非你手动 composer update vendor/name。
验证是否成功:
- Linux/macOS:
ls -la vendor/vendor/name,应看到->指向源目录 - Windows:
dir vendorendor ame,类型应为“快捷方式” - 如果看到一堆复制出来的文件,说明没走 symlink,检查
options.symlink是否遗漏
autoload 和 version 写法直接影响可维护性
autoload 不只是让类能加载,更是包对外暴露的契约。PSR-4 是底线:"psr-4": {"MyVendor\MyPackage\": "src/"}。别用 files 或 classmap 做主 autoload 方式——它们破坏命名空间语义,别人无法预测类在哪。
版本字段也容易被忽视:
- 本地开发阶段必须用
dev-main、dev-develop这类分支名,不能写1.0.0——否则 Composer 会尝试从 Packagist 拉取,而不是走本地 path - 如果你的本地包
composer.json里写了"version": "1.0.0",反而会让 Composer 认为这是个 dist 包,跳过 symlink 逻辑 - CI 构建时若需强制复制而非链接,可通过
"preferred-install": {"vendor/name": "dist"}控制










