新闻中心

如何在 Composer 中配置一个 artifact 类型的仓库来安装本地 zip 包?

2025-12-13
浏览次数:
返回列表
Composer 配置 artifact 仓库可从本地 ZIP 安装私有或离线包,要求 ZIP 根目录含 composer.json,通过 repositories 指定 ZIP 所在目录,安装时按 name 和 version 匹配并解压到 vendor。

如何在 composer 中配置一个 artifact 类型的仓库来安装本地 zip 包?

在 Composer 中配置 artifact 类型仓库,是为了让项目能从本地 ZIP 文件安装包(比如未发布到 Packagist 的私有包、离线环境下的预构建包,或临时测试用的打包版本)。它不依赖网络源,直接读取本地 ZIP 文件并解析其 composer.json 内容。

1. 准备符合要求的 ZIP 包

Composer 的 artifact 机制要求 ZIP 文件内部必须包含一个有效的 composer.json 文件,且该文件需位于 ZIP 根目录下(不能嵌套在子文件夹中)。例如:

  • my-package-1.0.0.zip 解压后结构应为:
    composer.json
    src/...
    tests/...
  • ZIP 文件名建议遵循 {vendor}/{package}-{version}.zip 格式(如 acme/utils-2.1.0.zip),Composer 会从中提取 vendor、package 和 version 信息;若命名不规范,可通过 ZIP 内部 composer.json"name""version" 字段补全。

2. 配置 artifact 仓库路径

在项目的 composer.json 中添加 repositories 配置,指定存放 ZIP 文件的本地目录(支持绝对路径或相对于 composer.json 的相对路径):

{
    "repositories": [
        {
            "type": "artifact",
            "url": "./packages/"
        }
    ],
    "require": {
        "acme/utils": "^2.1"
    }
}

上面例子中,Composer 会扫描 ./packages/ 目录下所有 ZIP 文件(包括子目录),匹配所需包和版本。注意:url 必须是目录路径,不是单个 ZIP 文件路径。

拾贝 拾贝

一键同步微信读书所有笔记和划线,并在新标签页回顾

拾贝 186 查看详情 拾贝

3. 安装时确保版本可匹配

Composer 不会自动解压或校验 ZIP 内容,但会检查:

  • ZIPcomposer.json"name" 是否与 require 中一致
  • "version" 是否满足所要求的版本约束(如 ^2.1 匹配 2.1.02.1.5 等)
  • 若 ZIP 名称含版本(如 utils-2.1.5.zip),而 composer.json 里写的是 "version": "2.1.0",以文件内声明为准

运行 composer installcomposer update acme/utils 即可安装——Composer 会复制 ZIP 到 vendor/ 并解压,行为与从 Packagist 安装一致。

4. 注意事项与常见问题

  • artifact 仓库只在当前项目生效,不会影响全局;多个 artifact 源可共存,Composer 按顺序查找首个匹配项
  • ZIP 文件修改后,需运行 composer update --lock 或删掉 composer.lock 重新生成,否则可能仍用旧缓存
  • 不支持 HTTP URL 作为 artifact url(那是 packagecomposer 类型的事);artifact 仅限本地文件系统
  • 如果 ZIP 解压失败(比如权限问题或损坏),Composer 会报错,提示类似 Failed to extract acme/utils: unable to create ...

基本上就这些。配置简单,适合离线集成、CI 构建产物复用或快速验证私有包,不复杂但容易忽略 ZIP 结构和命名细节。

以上就是如何在 Composer 中配置一个 artifact 类型的仓库来安装本地 zip 包?的详细内容,更多请关注其它相关文章!


# 加载  # 娄烦推广品牌营销  # 常德网站建设推广方案  # 浙江政府网站建设  # 耒阳seo整站优化  # 品质网站建设价格表格  # 黄浦营销推广公司招聘电话  # 黑龙江网站关键词优化  # 西餐原料推广营销论文  # 中国品牌营销推广公司  # 上海推广流量卡选购网站  # 多个  # 那是  # composer  # 的是  # 如何正确  # 旧版  # 有什么区别  # 拾贝  # 如何在  # 离线  # 常见问题  # 解压  # ai  # json  # js 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 深入理解J*a编译器的兼容性选项:从-source到--release  虫虫漫画精品漫画官网_虫虫漫画精品漫画官网进入精品漫画  Go调试环境为何无法启动_Go调试器启动失败原因与解决策略  荣耀Play7T运行卡顿解决_荣耀Play7T性能优化  铁路12306改签能改到更早的车次吗_铁路12306改签提前车次规则  邮编格式怎么匹配地址_根据邮编格式快速匹配详细地址的技巧  消息称三星明年 2 月正式发布 HBM4,与 SK 海力士同台竞技  漫蛙2漫画入口 漫蛙正版网页漫画直达网址  我的世界mc.js免费游戏直接能玩 我的世界mc.js小游戏免费秒玩入口  响应式CSS Grid布局:优化网格项在小屏幕下的堆叠与宽度适配  解决J*aScript中重复选择项的确认对话框显示问题  怎么去除衣服上的口红印_生活小妙招教你用酒精轻松擦除  必由学官方登录入口 必由学教师学生账号快速访问  照顾宝贝2小游戏免费秒玩入口  地铁跑酷免费秒玩入口链接 地铁跑酷小游戏免费秒玩网站  Python vgamepad库按键模拟:正确使用XUSB_BUTTON常量  如何优雅地扩展SprykerGlue后端API授权逻辑,使用spryker/glue-backend-api-application-authorization-connector-extension  Pygame教程:解决用户输入与游戏状态更新不同步问题  J*aScript:在map操作中高效处理空数组  如何使用J*aScript精确选择并批量修改特定父元素下子链接的样式  自定义Bag-of-Words实现:处理带负号的词汇权重  实现全屏滚动与导航点:专业教程  Win11怎么开启高性能模式_Windows 11电源计划优化设置  MinIO大规模对象列表性能瓶颈深度解析与外部元数据管理策略  内存疯狂猛猛涨价:主板销量直接腰斩!  马斯克:Optimus 人形机器人复数形式为 Optimi  漫画星球免费下拉式入口 漫画星球免费漫画在线阅读网站  12306选座怎么选到商务座_12306商务座选择与配置说明  处理Kafka消费者会话超时:深入理解消息处理语义与幂等性  qq邮箱日历功能怎么用_创建日程与会议邀请的技巧  React中useState与局部变量:理解组件状态管理与渲染机制  铁路12306卧铺选择攻略 铁路12306下铺座位预定技巧  一加Ace 6T实拍样张首次公布!李杰:主摄实力完全看齐4K档性能旗舰  Composer的 archive 命令怎么用_快速打包你的PHP项目及其Composer依赖  Web Components中自定义开关组件状态同步的常见陷阱与解决方案  2026年发布! 美少女养成动作RPG《神剑少女战记》发布实机演示  Lar*el Form Request中唯一性验证在更新操作中的正确实现  Sublime Text怎么设置垂直标尺_Sublime配置Rulers规范代码长度  谷歌浏览器浏览体验优化_谷歌浏览器新版直连永久可用提示  妖精漫画网页版登录入口免费_妖精漫画官网主页直接阅读漫画  纯CSS与HTML网格布局的HTML精简策略:SVG与JS方案解析  QQ邮箱在线登录平台 QQ邮箱个人邮箱网页版入口  QQ邮箱稳定登录入口_QQ邮箱官方网站网页版使用  如何在更新Composer依赖后自动运行测试_使用post-update-cmd钩子触发PHPUnit  怎样使用“本地安全策略”提升Windows安全性_Secpol.msc配置指南【高手】  Yandex免登录官网入口_俄罗斯Yandex搜索引擎直达链接  一加 14R 快充无反应_一加 14R 充电优化  Win10文件资源管理器“此电脑”分组怎么关 Win10恢复经典视图【技巧】  CSS Flexbox如何实现多行排列_flex-wrap wrap自动换行显示  AO3同人作品网入口 AO3搜索引擎官网永久地址 

搜索