path仓库让composer直接读取本地目录的composer.json,跳过网络与解压,需配置repositories、name严格匹配、require时加@dev;artifact仓库仅靠zip文件名匹配包信息,要求语义化版本且不校验内容。

path仓库只认本地目录,不走网络也不解压
path类型仓库本质是“让Composer把某个本地文件夹当包源”,它直接读取该目录下的composer.json,提取name、version、autoload等元数据,然后软链或复制整个目录到vendor/。它完全跳过HTTP请求和压缩包解析,适合开发联调。
- 目录必须包含有效的
composer.json,且name字段要与require时写的完全一致(包括大小写) - 执行
composer require vendor/name:@dev才生效;漏掉@dev会被忽略 - 若目录路径含空格或中文,Windows下可能出错,建议用纯英文路径
-
options: {"symlink": false}必须显式声明,否则离线环境软链失效导致Class not found
artifact仓库只认ZIP/TAR文件名,不校验内容结构
artifact类型仓库不是“解压后读取”,而是靠文件名反向推导包信息:看到acme/utils-1.2.0.zip,就认为这是name="acme/utils"、version="1.2.0"的包——它根本不会打开ZIP看里面有没有composer.json,更不会检查路径层级。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 文件名必须为
vendor-name/package-name-version.zip格式(注意斜杠,不是短横),例如monolog/monolog-2.13.0.zip -
url指向ZIP所在目录,不能带尾部斜杠:"url": "./packages"✅,"url": "./packages/"❌(某些Composer版本会静默跳过) - ZIP内必须根目录直出
composer.json,不能是monolog-monolog-2.13.0/composer.json - version字段必须是语义化版本(如
1.2.0),不支持dev-main或v1.2.0(v前缀会导致匹配失败)
require时行为完全不同:@dev vs 精确版本
path仓库依赖@dev后缀触发识别,artifact仓库则严格按语义化版本匹配——连小数点后零都不容错。
- 用path:执行
composer require myorg/mylib:@dev,Composer才去repositories里找对应path源 - 用artifact:必须写
composer require acme/utils:1.2.0,写^1.2或~1.2.0都找不到,因为artifact不提供版本索引,只响应字面匹配 - 新增ZIP后,
composer install不会感知;必须先composer update acme/utils或全量composer update刷新可用列表 -
composer install只按composer.lock安装,哪怕ZIP已更新也不会重新拉取
离线部署选哪个?看你是分发还是调试
artifact是唯一能保证composer install全程不发任何HTTP请求的方案;path则天然需要开发者机器上存在对应目录,不适合CI/CD分发。
- 要打包交付给客户内网机:用artifact,提前生成所有ZIP,配置
"packagist.org": false并删掉默认源 - 要本地改A包同时调试B包:用path,避免反复
composer update,但要注意symlink和@dev缺一不可 - 两者不能混用同一包名:如果
repositories里同时有path和artifact指向acme/utils,Composer优先用path(因path匹配更早),artifact被忽略 - 最易被忽略的一点:全局配置
repo.packagist没关,哪怕composer.json里写了"packagist.org": false,composer install -v仍会显示访问repo.packagist.org/packages.json










