新闻中心
如何在 Composer 中配置一个 artifact 类型的仓库来安装本地 zip 包?
Composer 配置 artifact 仓库可从本地 ZIP 安装私有或离线包,要求 ZIP 根目录含 composer.json,通过 repositories 指定 ZIP 所在目录,安装时按 name 和 version 匹配并解压到 vendor。

在 Composer 中配置 artifact 类型仓库,是为了让项目能从本地 ZIP 文件安装包(比如未发布到 Packagist 的私有包、离线环境下的预构建包,或临时测试用的打包版本)。它不依赖网络源,直接读取本地 ZIP 文件并解析其 composer.json 内容。
1. 准备符合要求的 ZIP 包
Composer 的 artifact 机制要求 ZIP 文件内部必须包含一个有效的 composer.json 文件,且该文件需位于 ZIP 根目录下(不能嵌套在子文件夹中)。例如:
-
my-package-1.0.0.zip解压后结构应为:composer.jsonsrc/...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 内容,但会检查:
- ZIP
中 composer.json的"name"是否与require中一致 -
"version"是否满足所要求的版本约束(如^2.1匹配2.1.0、2.1.5等) - 若 ZIP 名称含版本(如
utils-2.1.5.zip),而composer.json里写的是"version": "2.1.0",以文件内声明为准
运行 composer install 或 composer update acme/utils 即可安装——Composer 会复制 ZIP 到 vendor/ 并解压,行为与从 Packagist 安装一致。
4. 注意事项与常见问题
- artifact 仓库只在当前项目生效,不会影响全局;多个 artifact 源可共存,Composer 按顺序查找首个匹配项
- ZIP 文件修改后,需运行
composer update --lock或删掉composer.lock重新生成,否则可能仍用旧缓存 - 不支持 HTTP URL 作为 artifact
url(那是package或composer类型的事);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搜索引擎官网永久地址


2025-12-13
浏览次数:次
返回列表
中