vendor里没链接是因为未执行composer install/update,Composer只在安装时解析repositories并创建符号链接;需确认是否运行install、检查链接类型、启用symlinks、清理缓存并验证PSR-4映射。

path仓库配置后为什么vendor里没链接
因为Composer默认只在composer install或composer update时解析repositories并建立符号链接,如果只是改了composer.json但没运行安装命令,vendor里就不会出现对应包。
常见错误现象:改完配置后直接跑项目,报Class not found或require(): failed to open stream。
- 确认是否执行过
composer install(不是dump-autoload) - 检查
vendor/下对应包目录是否为软链接(Linux/macOS)或junction(Windows),不是普通文件夹 - 运行
composer config --list | grep symlinks,确保没被设为false - Windows用户若看到“Operation not permitted”,需以管理员身份运行终端再试一次
install
本地包改了代码却不生效
path仓库本质是符号链接,改源码本该立刻生效——但自动加载缓存或PSR-4映射没更新,就会卡在旧逻辑里。
典型场景:修改了类方法、新增了一个类、调整了命名空间结构。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 必须运行
composer dump-autoload -o,否则新类不会进autoload_classmap.php - 如果删了某个类,但没重跑
dump-autoload,旧映射仍存在,可能触发“找不到已删除类”的静默失败 - 检查
vendor/composer/autoload_psr4.php,确认你配的命名空间前缀(如"App\")和路径是否正确写入 - 不要依赖IDE自动刷新,PHP运行时只认
vendor/autoload.php读取的生成文件
团队协作时怎么避免路径硬编码
用../my-package这种相对路径在CI或别人机器上大概率失效,尤其当项目目录层级不一致时。
更可靠的做法是把路径抽象成环境变量或条件化配置。
- 在
composer.json中用${COMPOSER_PATH_MY_PACKAGE}占位(Composer 2.2+ 支持环境变量展开) - CI流程中用
export COMPOSER_PATH_MY_PACKAGE=/home/ci/my-package注入 - 开发机统一用
composer config --global repositories.my-package '{"type":"path","url":"/Users/me/dev/my-package"}'做全局注册 - 严禁提交含
path仓库的composer.json到主干分支;建议CI脚本在构建前用sed或jq临时移除repositories块
Docker里vendor链接丢失的根源
容器内vendor/目录被宿主机卷覆盖,导致Composer生成的符号链接被清空或变成普通文件夹——这是Docker + path仓库最隐蔽的坑。
根本不是权限或路径问题,而是生命周期错位。
-
docker-compose.yml中挂载./vendor:/var/www/html/vendor会直接覆盖容器内已生成的软链 - 必须让
composer install在容器内执行,且vendor/不能被外部卷强制覆盖 - 推荐方案:只挂载源码(
./:/var/www/html),不挂载vendor;构建阶段用docker build或docker-compose run --rm composer install - 若必须共享
vendor,改用named volume,并在entrypoint里加判断:若vendor/myorg/mypackage不是链接,则重新install
vendor/里是不是真链接,再查autoload_psr4.php有没有你配的映射——这两处不对,其他都白搭。

















