Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
如何在composer脚本中获取当前项目的根目录_创想鸟

如何在composer脚本中获取当前项目的根目录

最推荐通过事件对象获取项目根目录:利用 Event 对象的 $event->getComposer() 获取实例,结合 vendor-dir 配置反推根路径,如 $composer->getConfig()->get(‘vendor-dir’) . ‘/..’ 并用 realpath 解析,确保稳定可靠且无需外部依赖。

如何在composer脚本中获取当前项目的根目录

在 Composer 脚本中获取当前项目的根目录,最可靠的方式是通过 $composer->getInstallationManager()->getInstallPath() 或直接利用 Composer 提供的事件对象来访问项目路径。但更常见和推荐的做法是使用 Composer 的 event 对象中的相关属性。

使用 Composer 脚本事件对象

当你定义一个自定义脚本(如 post-install-cmd),Composer 会传入一个 ScriptEvent 对象。你可以从这个对象中获取 Composer 实例,并进一步获取项目根目录。

示例:自定义脚本类

use ComposerScriptEvent;use ComposerUtilFilesystem;class BuildScript{    public static function postInstall(Event $event)    {        $composer = $event->getComposer();        // 获取项目根目录(即 composer.json 所在的目录)        $projectDir = $composer->getConfig()->get('vendor-dir') . '/..';        $projectDir = realpath($projectDir);        echo "项目根目录: " . $projectDir . PHP_EOL;        // 或者使用 Filesystem 工具规范化路径        $fs = new Filesystem();        $projectDir = $fs->normalizePath($projectDir);        // 开始你的操作,比如复制文件、生成配置等    }}

在 composer.json 中注册脚本

确保你在 composer.json 中正确引用了该脚本:

{    "scripts": {        "post-install-cmd": "BuildScript::postInstall"    }}

直接使用 vendor 目录反推根目录

Composer 默认将依赖安装在 vendor 目录下。因此,你也可以通过 __DIR__ 回退一级来获取项目根目录,尤其是在脚本位于 vendor/bin 或自定义命令中时:

笔目鱼英文论文写作器 笔目鱼英文论文写作器

写高质量英文论文,就用笔目鱼

笔目鱼英文论文写作器 87 查看详情 笔目鱼英文论文写作器

$rootDir = dirname(__DIR__, 2); // 从 vendor/bin/your-script.php 出发,回退两级// 或者更明确地:$rootDir = __DIR__ . '/../../'; // 相对 vendor/bin$rootDir = realpath($rootDir);

这种方法简单,但只适用于特定位置的脚本(如 bin 目录下的命令行工具)。

使用 Composer 的 Process 类执行外部命令

如果脚本环境复杂,也可以借助 Git 或 pwd 命令获取当前工作目录:

use SymfonyComponentProcessProcess;$process = Process::fromShellCommandline('pwd');$process->run();$rootDir = rtrim($process->getOutput(), "n");

注意:这依赖于执行脚本时的工作目录是否为项目根目录,适合 CLI 工具场景。

基本上就这些方法。最推荐的是通过 event->getComposer() 配合 vendor 目录反推,既稳定又无需外部依赖。

以上就是如何在composer脚本中获取当前项目的根目录的详细内容,更多请关注php中文网其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/244875.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
正确地将泛型数据成员赋值给另一个泛型数据成员
上一篇 2026年10月6日 21:52:50
postgresql锁机制有哪些特点_postgresql锁类型与等待策略
下一篇 2025年12月2日 09:08:08

相关推荐

  • 哔哩哔哩在线视频入口-哔哩哔哩B站免费流媒体地址

    哔哩哔哩在线视频入口-哔哩哔哩B站免费流媒体地址哔哩哔哩在线视频入口-哔哩哔哩B站免费流媒体地址哔哩哔哩在线视频入口-哔哩哔哩B站免费流媒体地址哔哩哔哩在线视频入口-哔哩哔哩B站免费流媒体地址

    哔哩哔哩在线视频入口是bilibili.com/,该平台汇聚原创短视频、动画、音乐演出和纪录片等内容,支持弹幕互动、兴趣小组交流及创作者互动,提供多端适配与跨设备同步功能。 直接观看“☞☞☞☞☞点击哔哩哔哩在线视频入口☜☜☜☜☜”; 直接观看“☞☞☞☞☞点击哔哩哔哩B站免费流媒体地址☜☜☜☜☜”; …

    2026年10月6日 • 用户投稿
    000
  • win11无法弹出U盘或移动硬盘怎么办_解决Win11设备正在使用无法弹出

    win11无法弹出U盘或移动硬盘怎么办_解决Win11设备正在使用无法弹出win11无法弹出U盘或移动硬盘怎么办_解决Win11设备正在使用无法弹出win11无法弹出U盘或移动硬盘怎么办_解决Win11设备正在使用无法弹出win11无法弹出U盘或移动硬盘怎么办_解决Win11设备正在使用无法弹出

    1、重启Windows资源管理器可释放U盘占用;2、使用资源监视器查找并结束访问设备的进程;3、通过事件查看器定位阻止弹出的PID并结束对应进程;4、更新USB驱动确保硬件通信正常;5、禁用快速启动避免系统未完全释放设备;6、用DiskPart命令移除盘符强制解除逻辑映射,从而安全移除U盘或移动硬盘…

    2026年10月6日 • 用户投稿
    000
  • Composer的依赖解析算法(SAT Solver)是如何工作的?

    Composer的依赖解析算法(SAT Solver)是如何工作的?Composer的依赖解析算法(SAT Solver)是如何工作的?Composer的依赖解析算法(SAT Solver)是如何工作的?Composer的依赖解析算法(SAT Solver)是如何工作的?

    SAT求解是判断布尔公式可满足性的逻辑问题,Composer将其用于依赖解析:将包版本视为布尔变量,依赖冲突等规则转为逻辑子句,最终求解一组版本组合使所有条件成立。 Composer 使用一种基于 SAT(可满足性问题)求解的算法来解析项目依赖关系。它的核心目标是:在众多包版本及其复杂的依赖约束中,…

    2026年10月6日 • 用户投稿
    100
  • google浏览器手机版 google浏览器手机版最新入口

    google浏览器手机版 google浏览器手机版最新入口google浏览器手机版 google浏览器手机版最新入口google浏览器手机版 google浏览器手机版最新入口google浏览器手机版 google浏览器手机版最新入口

    google浏览器手机版最新入口在哪里?这是不少网友都关注的,接下来由PHP小编为大家带来google浏览器手机版最新入口,感兴趣的网友一起随小编来瞧瞧吧! https://www.google.com/chrome/ 界面简洁直观 1、启动浏览器后可以看到干净的主屏幕,没有过多复杂的元素堆砌,搜索…

    2026年10月6日 • 用户投稿
    000
  • Composer在Mac上通过Homebrew如何安装?

    Composer在Mac上通过Homebrew如何安装?Composer在Mac上通过Homebrew如何安装?Composer在Mac上通过Homebrew如何安装?Composer在Mac上通过Homebrew如何安装?

    确认Homebrew已安装,若未安装需先执行官方命令;2. 使用brew install php安装PHP并验证版本;3. 运行brew install composer安装工具;4. 执行composer –version确认安装成功,Homebrew自动处理依赖与路径配置。 在Mac…

    2026年10月6日 • 用户投稿
    300
  • 近20人假冒国安闯入公园挖地寻宝是怎么回事?详情介绍

    近20人假冒国安闯入公园挖地寻宝是怎么回事?详情介绍近20人假冒国安闯入公园挖地寻宝是怎么回事?详情介绍近20人假冒国安闯入公园挖地寻宝是怎么回事?详情介绍近20人假冒国安闯入公园挖地寻宝是怎么回事?详情介绍

    今天,国家安全部曝光一起不法分子假冒国安的荒诞闹剧:在某南方小城,一公园大门被一群不速之客急促叩响,几名身着迷彩服、衣后印着“执勤”字样的人员闯入保安室。他们自称是国家安全局工作人员,正在执行一项重要任务,需“接管”公园至次日上午。值班保安还没来得及反应,就被集中控制,并被没收手机,失去了与外界的联…

    2026年10月6日 • 用户投稿
    200
  • 如何用SELECT语句精确查询特定列?星号(*)通配符的使用场景与风险有哪些?

    如何用SELECT语句精确查询特定列?星号(*)通配符的使用场景与风险有哪些?如何用SELECT语句精确查询特定列?星号(*)通配符的使用场景与风险有哪些?如何用SELECT语句精确查询特定列?星号(*)通配符的使用场景与风险有哪些?如何用SELECT语句精确查询特定列?星号(*)通配符的使用场景与风险有哪些?

    明确指定select语句中的列名能提升查询效率,减少数据传输。1.避免使用select *,列出必要列以增强可读性和安全性;2.结合where和join优化查询逻辑,减少全表扫描;3.合理创建索引以加速检索但需权衡写入性能;4.使用explain分析执行计划定位性能瓶颈;5.用coalesce处理n…

    2026年10月6日 • 用户投稿
    100
  • win8系统日志在哪里查看_win8查看系统事件日志方法

    win8系统日志在哪里查看_win8查看系统事件日志方法win8系统日志在哪里查看_win8查看系统事件日志方法win8系统日志在哪里查看_win8查看系统事件日志方法win8系统日志在哪里查看_win8查看系统事件日志方法

    1、通过控制面板进入事件查看器可系统化查找日志,适合图形界面用户;2、通过计算机管理快速访问系统工具,适用于熟悉管理功能者;3、使用Win+R输入eventvwr.msc最快捷,直接启动事件查看器查看系统日志。 如果您需要排查Windows 8系统中的错误或异常行为,查看系统日志是关键步骤之一。系统…

    2026年10月6日 • 用户投稿
    200
  • Java中实现数字敏感的自然排序

    Java中实现数字敏感的自然排序Java中实现数字敏感的自然排序Java中实现数字敏感的自然排序Java中实现数字敏感的自然排序

    本文探讨了Java中字符串(特别是包含数字的字符串,如文件名或版本号)默认排序行为的局限性,即“Test11”会排在“Test2”之前。针对Java标准库Collator缺乏内置数字敏感排序选项的问题,文章介绍了如何利用第三方库alphanumeric-comparator实现人类友好的自然排序,并…

    2026年10月6日 • 用户投稿
    000
  • 如何让composer忽略特定的PHP版本或扩展限制

    如何让composer忽略特定的PHP版本或扩展限制如何让composer忽略特定的PHP版本或扩展限制如何让composer忽略特定的PHP版本或扩展限制如何让composer忽略特定的PHP版本或扩展限制

    Composer可通过config.platform设置虚拟PHP版本或使用–ignore-platform-reqs跳过依赖检查,支持开发环境灵活解析依赖,但需注意运行时兼容性风险。 Composer 默认会根据系统当前的 PHP 版本和已安装的扩展来解析依赖,如果项目 compose…

    2026年10月6日 • 用户投稿
    100
  • win10自动更新怎么彻底关闭_永久禁用Win10自动更新的多种方法

    win10自动更新怎么彻底关闭_永久禁用Win10自动更新的多种方法win10自动更新怎么彻底关闭_永久禁用Win10自动更新的多种方法win10自动更新怎么彻底关闭_永久禁用Win10自动更新的多种方法win10自动更新怎么彻底关闭_永久禁用Win10自动更新的多种方法

    关闭Win10自动更新的方法包括:通过设置暂停更新最长35天;禁用Windows Update服务并修改其恢复策略;使用组策略编辑器彻底禁用更新功能;修改注册表实现永久关闭;在任务计划程序中禁用相关更新任务;或使用“Windows Update Blocker”等工具一键禁用并锁定设置。 如果您发现…

    2026年10月6日 • 用户投稿
    100
  • 360搜索记录如何加密_360搜索加密搜索记录设置

    360搜索记录如何加密_360搜索加密搜索记录设置360搜索记录如何加密_360搜索加密搜索记录设置360搜索记录如何加密_360搜索加密搜索记录设置360搜索记录如何加密_360搜索加密搜索记录设置

    1、启用无痕搜索模式:打开360搜索App,点击菜单选择“无痕浏览”,在该模式下搜索不会保存记录,关闭后自动清除数据。2、设置搜索记录自动清除:进入“设置”-“隐私设置”,开启“退出时清除浏览记录”及相关数据清除选项。3、手动加密或删除历史记录:通过“历史记录”管理功能清除已有记录,并利用手机保险箱…

    2026年10月6日 • 用户投稿
    200
  • windows10无法识别sd卡怎么办_windows10SD卡识别故障解决方法

    windows10无法识别sd卡怎么办_windows10SD卡识别故障解决方法windows10无法识别sd卡怎么办_windows10SD卡识别故障解决方法windows10无法识别sd卡怎么办_windows10SD卡识别故障解决方法windows10无法识别sd卡怎么办_windows10SD卡识别故障解决方法

    Windows 10无法识别SD卡时,应先检查硬件连接、清洁触点并更换读卡器;确认设备无物理损坏后,通过设备管理器更新驱动;若系统识别但无盘符,需在磁盘管理中手动分配;使用chkdsk命令修复文件系统错误;最后通过数据恢复软件备份文件并格式化SD卡以恢复正常。 如果您将SD卡插入电脑后,Window…

    2026年10月6日 • 用户投稿
    000
  • 共创共享 “MagicOS创享家”打造用户交流新范本

    共创共享  “MagicOS创享家”打造用户交流新范本共创共享  “MagicOS创享家”打造用户交流新范本共创共享  “MagicOS创享家”打造用户交流新范本共创共享  “MagicOS创享家”打造用户交流新范本

    摘要: 唯有以“听劝”为驱动持续进化,才能真正锚定产品迭代的核心价值方向。 正文: 8月底,成都宽窄巷子再度成为焦点。 这里不仅有年轻人热衷的Live演出,亲子家庭可以共赏动画影片,游戏发烧友能线下组队开黑,AI科技也变得触手可及——边逛边玩、打卡互动、与热门IP零距离接触……一向以潮流文化聚集地著…

    2026年10月6日 • 用户投稿
    200
  • 如何在不联网的离线环境中使用composer

    如何在不联网的离线环境中使用composer如何在不联网的离线环境中使用composer如何在不联网的离线环境中使用composer如何在不联网的离线环境中使用composer

    在联网机器执行 composer install 下载依赖并缓存;2. 打包项目 vendor 目录、composer.lock 和缓存文件;3. 将包复制到离线机并配置本地缓存路径;4. 运行 composer install –no-scripts –no-plugins…

    2026年10月6日 • 用户投稿
    900
  • 值得买科技自研AI购物管家“张大妈”正式版全面上线 新一代消费智能体引领消费应用新形态

    值得买科技自研AI购物管家“张大妈”正式版全面上线  新一代消费智能体引领消费应用新形态值得买科技自研AI购物管家“张大妈”正式版全面上线  新一代消费智能体引领消费应用新形态值得买科技自研AI购物管家“张大妈”正式版全面上线  新一代消费智能体引领消费应用新形态值得买科技自研AI购物管家“张大妈”正式版全面上线  新一代消费智能体引领消费应用新形态

    9月4日,值得买科技自主研发的ai购物助手“张大妈”app正式发布全量版本,全面开启公测。作为新一代消费智能体,“张大妈”具备更强的感知、推理与执行能力,能够在纷繁复杂的消费场景中实现任务调度与自动化操作,显著提升用户的决策效率与购物体验,真正推动ai技术融入日常消费生活。此次正式版上线,不仅标志着…

    2026年10月6日 • 用户投稿
    200
  • Java中实现自然数字字符串排序的解决方案

    Java中实现自然数字字符串排序的解决方案Java中实现自然数字字符串排序的解决方案Java中实现自然数字字符串排序的解决方案Java中实现自然数字字符串排序的解决方案

    本文探讨了Java中字符串自然数字排序的问题,即如何实现“Test1.txt”在“Test11.txt”之前的人性化排序,而非默认的字典序。尽管Java标准库的String::compareTo和Collator::compare无法直接满足此需求,但通过引入第三方库alphanumeric-com…

    2026年10月6日 • 用户投稿
    100
  • Vid2World— 清华联合重庆大学推出视频模型转为世界模型的框架

    Vid2World— 清华联合重庆大学推出视频模型转为世界模型的框架Vid2World— 清华联合重庆大学推出视频模型转为世界模型的框架Vid2World— 清华联合重庆大学推出视频模型转为世界模型的框架Vid2World— 清华联合重庆大学推出视频模型转为世界模型的框架

    vid2world 是由清华大学携手重庆大学共同研发的一项创新框架,其核心在于能够将全序列、非因果的被动视频扩散模型(vdm)转化为自回归、交互式且动作条件化的世界模型。该模型依托视频扩散因果化以及因果动作引导两大关键技术,有效弥补了传统vdm在因果生成及动作条件化上的缺陷。在机器人操控和游戏仿真等…

    2026年10月6日 • 用户投稿
    100
  • google浏览器下载链接 google浏览器入口链接

    google浏览器下载链接 google浏览器入口链接google浏览器下载链接 google浏览器入口链接google浏览器下载链接 google浏览器入口链接google浏览器下载链接 google浏览器入口链接

    Google浏览器下载入口链接是https://www.google.cn/chrome/,该页面提供Chrome浏览器的官方下载,同时介绍其页面加载快、支持扩展程序、内置翻译、跨设备同步及隐私安全等功能。 Google浏览器下载入口链接在哪里?这是不少网友都关注的,接下来由PHP小编为大家带来Go…

    2026年10月6日 • 用户投稿
    100
  • Composer的self-update命令的–rollback选项如何使用?

    Composer的self-update命令的–rollback选项如何使用?Composer的self-update命令的–rollback选项如何使用?Composer的self-update命令的–rollback选项如何使用?Composer的self-update命令的–rollback选项如何使用?

    使用 composer self-update –rollback 可回退到上一版本,适用于更新后出现兼容性问题的场景,该命令仅能回退一次,回滚后需执行 composer –version 确认版本恢复。 当你使用 Composer 的 self-update 命令时,&#8…

    2026年10月6日 • 用户投稿
    200

发表回复

登录后才能评论
关注微信