新闻中心
如何在 PHP 代码中获取 composer.json 中定义的 extra 数据?
最直接可靠的方式是使用 Composer\InstalledVersions::getRawData() 获取当前项目根包的 extra 数据,因其由 Composer 自动注入且保证 packages[0] 为根包。

在 PHP 代码中获取 composer.json 中定义的 extra 数据,最直接可靠的方式是读取已生成的 vendor/composer/installed.json(Composer 2.x)或通过 Composer 的自动加载机制访问其内部数据结构。但更推荐、更稳定的做法是使用 Composer 提供的官方运行时 API —— 即通过 Composer\InstalledVersions 类(Composer 2.0+ 内置),或手动解析 composer.lock / installed.json。
使用 InstalledVersions::getRawData()(推荐,Composer 2.2+)
Composer 2.2 起内置了 Composer\InstalledVersions,它在安装/更新后会生成静态元数据,其中包含当前包的 extra 字段(仅限当前项目根包,即你的主项目,不是依赖包)。
- 确保你项目已执行过
composer install或composer update - 该类无需额外 require,Composer 自动注入(只要用了 Composer 自动加载)
- 调用
getRawData()可拿到所有已安装包的原始 JSON 数据数组
示例代码:
// 获取当前项目(root package)的 extra 数据
$rawData = Composer\InstalledVersions::getRawData();
$rootPackage = $rawData['packages'][0] ?? null;
if ($rootPackage && isset($rootPackage['extra'])) {
$extra = $rootPackage['extra'];
print_r($extra); // 如 ['my-key' => 'my-value', 'env' => 'prod']
}
⚠️ 注意:packages[0] 是约定——Composer 总把当前项目放在 installed.json 的第一个位置。这是 Composer 的行为保证,可安全依赖。
手动读取 vendor/composer/installed.json
如果环境受限(如低版本 Composer 或需兼容旧项目),可直接解析该文件:
- 路径固定为
vendor/composer/installed.json - 该文件由 Composer 维护,格式稳定,包含所有包的完整信息
- 需注意文件存在性与 JSON 解析错误处理
示例:
盛世企业网站管理系统1.1.2
免费 盛世企业网站管理系统(SnSee)系统完全免费使用,无任何功能模块使用限制,在使用过程中如遇到相关问题可以去官方论坛参与讨论。开源 系统Web代码完全开源,在您使用过程中可以根据自已实际情况加以调整或修改,完全可以满足您的需求。强大且灵活 独创的多语言功能,可以直接在后台自由设定语言版本,其语言版本不限数量,可根据自已需要进行任意设置;系统各模块可在后台自由设置及开启;强大且适用的后台管理支
0
查看详情
$installedPath = __DIR__ . '/vendor/composer/installed.json';
if (file_exists($installedPath)) {
$data = json_decode(file_get_contents($installedPath), true);
$root = $data['packages'][0] ?? [];
$extra = $root['extra'] ?? [];
}
不推荐:直接解析 composer.json
虽然 composer.json 是源文件,但它不是运行时保证存在的(例如线上部署可能只含 vendor/ 和 composer.lock,不含 composer.json)。
- 路径不确定(可能不在
__DIR__下) - 无法反映实际安装状态(比如
extra在开发时改了但没重装) - 缺少环境适配(如不同分支、CI 环境可能用不同配置)
所以除非明确用于开发工具类脚本,否则避免直接读 composer.json。
小技巧:给 extra 加类型提示或封装访问器
为提升可维护性,建议封装一个简单工具方法:
function getComposerExtra(string $key = null, $default = null) {
$raw = Composer\InstalledVersions::getRawData();
$extra = ($raw['packages'][0]['extra'] ?? []) + ['version' => Composer\InstalledVersions::getVersion('your-vendor/your-package')];
return $key ? ($extra[$key] ?? $default) : $extra;
}
// 使用
$env = getComposerExtra('env', 'dev');
$apiUrl = getComposerExtra('api_url');
基本上就这些。核心原则是:依赖 Composer 运行时生成的权威数据,而不是源码文件。
以上就是如何在 PHP 代码中获取 composer.json 中定
义的 extra 数据?的详细内容,更多请关注php中文网其它相关文章!
# composer
# js
# json
# 工具
# 管理系统
# 如何在
# 企业网站
# php
# 线上优化推广网站
# 浦江网站建设流程图
# 网站seo优化怎样
# 北京网站建设咨询薇
# 网络营销和网站建设
# 对seo有用的标签是
# 邓州seo
# 平谷区常规网站建设推广
# 太康网站优化报价
# 黄岩关键词排名如何拍
# 命令行
# 回调
# 该文件
# 如何解决
# 尼克
# 并在
# 数据结构
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
CSS自定义字体样式被系统字体替换怎么办_font-face方式指定font-display控制渲染策略
迅雷下载到U盘速度很慢怎么办_迅雷U盘下载慢优化方法
PPT平滑切换怎么做 PPT炫酷“平滑”切换动画制作教程【必学】
快手网页版在线登录 快手网页版官网入口快速访问
Angular中父组件异步更新子组件复选框状态的实践指南
钉钉视频会议画面卡顿如何解决 钉钉会议画面优化方法
4399网页游戏电脑版全新入口 4399电脑端在线玩指南
谷歌浏览器如何快速清除某个网站的数据_Chrome网站缓存清理方法
b站如何看历史记录_b站观看历史找回方法
小猿搜题在线学习页面在哪_小猿搜题在线学习中心入口
ArrayList与LinkedList核心操作的Big-O复杂度分析
C++的std::mdspan是什么_C++23中用于操作多维数组的非拥有视图
极速漫画官方主页网址 极速漫画漫画在线浏览官网链接
批改网学生版PC登录 批改网官网登录系统入口
Python类型检查:优化关联可选属性的Mypy推断策略
J*aScript类型检查_j*ascript代码规范
QQ邮箱在线使用入口 QQ邮箱个人账号网页版登录
韩剧圈正版入口页面_韩剧圈官网登录链接
最新韩小圈网页版登录入口_官网在线观看官方链接
Python vgamepad库按键模拟:正确使用XUSB_BUTTON常量
Node.js中HTML按钮与J*aScript函数交互的正确姿势
如何在CSS中使用visited与link控制链接颜色_visited link伪类配合
C++如何实现单例模式_C++设计模式之线程安全的单例写法
漫蛙manwa官网登录界面_漫蛙漫画网页版主站入口
css滚动动画效果怎么实现_使用Animate.css滚动触发动画类
CSS Flexbox与媒体查询:实现响应式布局中元素的并排与堆叠
Spyder启动失败:字体文件权限拒绝错误解决方案
J*a递归快速排序中静态变量导致数据累积问题的解决方案
Python:递归比较文件夹内容并找出特定类型文件的差异
如何在网页中实现特定地点的随机图片展示
Archive of Our Own官网直达 AO3最新可用地址一览
PDF怎么合并PDF并保持格式_PDF合并文件保持排版教程
在J*a中如何使用Exception包装底层异常_异常包装与信息传递方法说明
智慧团建扫码登录入口 智慧团建扫码登录入口官网版
如何在更新Composer依赖后自动运行测试_使用post-update-cmd钩子触发PHPUnit
Lar*el的路由模型绑定怎么用_Lar*el Route Model Binding简化控制器逻辑
Yandex搜索引擎一键访问入口_俄罗斯Yandex官网免登录
冬*霸灯泡不亮怎么办_浴霸取暖灯一盏不亮的灯座清洁修复法
菜鸟取件码是什么怎么查 最全查询渠道汇总
Go RPC HTTP服务正确实现与常见陷阱解析
Composer的 "check-platform-reqs" 命令有什么用_在部署前检查生产环境是否满足Composer依赖需求
怎么在html里运行vbs脚本_html中运行vbs脚本方法【教程】
steam官方网页快速访问 steam账号注册全流程
韩小圈电脑版在线入口_网页版免费登录地址
学习通在线学习平台 学习通网页版直接进入课程中心
火狐浏览器占用内存高卡顿怎么办 火狐浏览器性能优化设置技巧
AO3网页版合集入口 Archive of Our Own同人作品浏览指南
Golang如何优化内存分配与垃圾回收_Golang内存管理与GC优化实践
实现分段式页面滚动导航:CSS与J*aScript教程
整合Supabase认证与Django模型:跨模式迁移的解决方案


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