新闻中心

如何在composer.json中定义项目的二进制(bin)文件?(创建命令行工具)

2025-12-14
浏览次数:
返回列表
在 composer.json 中通过 "bin" 字段声明可执行脚本路径,Composer 会将其软链接至 vendor/bin/;该脚本须为项目根目录下的 PHP 文件,具备可执行权限且以 #!/usr/bin/env php 开头。

如何在composer.json中定义项目的二进制(bin)文件?(创建命令行工具)

composer.json 中定义二进制文件,核心是通过 "bin" 字段声明可执行脚本路径,Composer 会自动将其软链接到 vendor/bin/ 下,供命令行直接调用。

配置 "bin" 字段指向入口脚本

"bin" 的值必须是项目根目录下某个 PHP 文件的相对路径(通常为 bin/your-commandsrc/YourCommand.php),该文件需具备可执行权限且以 #!/usr/bin/env php 开头(或由 Composer 自动处理 shebang)。

  • composer.json 中添加字段,例如:
"bin": ["bin/mytool"]

确保 bin/mytool 存在,内容类似:

#!/usr/bin/env php
<?php
require __DIR__ . '/../vendor/autoload.php';
// 你的命令行逻辑
echo "Hello from mytool!\n";

确保脚本有执行权限

Linux/macOS 下需运行 chmod +x bin/mytool;Windows 用户可跳过,Composer 会适配。

Glarity Glarity

Glarity是一款免费开源的AI浏览器扩展,提供YouTube视频总结、网页摘要、写作工具等功能,支持免费的镜像翻译,电子邮件写作辅助,AI问答等功能。

Glarity 131 查看详情 Glarity
  • 没有执行权限会导致 vendor/bin/mytool 链接存在但无法运行
  • 建议在 git 中保留可执行位:git update-index --chmod=+x bin/mytool

发布后让其他项目能全局使用

若你开发的是可复用的 CLI 工具(如 phpunitlarastan),还需设置 "type": "project" 或更常见的是 "type": "library" 并在 "autoload" 中注册命名空间——但关键仍是 "bin" 字段被下游项目识别。

  • 其他项目 composer require your/package 后,your-packagebin 就会出现在其 vendor/bin/
  • 如想支持全局安装(composer global require),无需额外配置,Composer 默认处理

验证是否生效

运行 composer installcomposer update 后,检查 vendor/bin/ 是否生成对应符号链接:

  • ls -l vendor/bin/mytool 应显示指向 ../your-vendor/your-package/bin/mytool
  • 直接执行 vendor/bin/mytool 看输出是否符合预期
  • 加到 $PATH 后(如 export PATH="./vendor/bin:$PATH"),可直接输入 mytool 调用

基本上就这些。不复杂但容易忽略执行权限和路径准确性。

以上就是如何在composer.json中定义项目的二进制(bin)文件?(创建命令行工具)的详细内容,更多请关注php中文网其它相关文章!


# 如何解决  # 湖南网站优化hunanseo  # 3个传统行业优化seo  # 塑料模具推广网站有哪些  # 满山红seo培训  # 扬州百万关键词排名  # 伊犁网络营销推广公司  # 冠县网站建设多少钱  # 下城企业网站建设方案  # seo优化最佳方法  # 郑州网站推广建设  # 器上  # 回调  # php  # 等功能  # 将其  # 的是  # 并在  # 可执行  # 如何在  # 命令行  # 工具  # composer  # json  # js 


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


相关推荐: 天猫2025双十一0点秒杀攻略 天猫爆款抢购时间  CSS Flexbox如何实现多行排列_flex-wrap wrap自动换行显示  学习通网页版快速入口 学习通官网网页版直接打开  火锅吃太多会怎样 火锅吃太多会上火吗  魅族17怎样用浏览器译外语网页_iPhone魅族17浏览器译外语网页【即时翻译】  TikTok网页版直接登录 TikTok网页端官方平台入口  c++如何使用TBB库进行任务并行_c++ Intel线程构建模块  J*a递归快速排序中静态变量导致数据累积的陷阱与解决方案  J*a中实现Go语言select通道多路复用机制  Win10如何清理注册表垃圾 Win10注册表维护与优化指南【慎用】  c++中为什么推荐使用using替代typedef_c++现代化类型别名  C++ vector二维数组定义_C++ vector of vector用法  steam官方网页快速访问 steam账号注册全流程  Composer如何在生产环境安全地执行composer update  快手网页版在线登录 快手网页版官网入口快速访问  c++如何使用Catch2编写单元测试_c++简洁易用的BDD风格测试框架  C++ string find函数返回值npos详解_C++字符串查找失败的判断条件  微信网页版扫码登录入口 微信网页版二维码登录入口  Surface怎么安装系统 微软Surface Pro U盘重装win11教程  优化Log4j2控制台输出性能:解决异步日志瓶颈  如何在更新Composer依赖后自动运行测试_使用post-update-cmd钩子触发PHPUnit  如何创建没有密码的Windows本地账户_跳过微软账户登录的技巧【教程】  windows10怎么查看硬盘序列号_windows10硬盘id查询命令  Go语言JSON解析深度指南:动态访问与结构体映射实践  必由学官方登录入口 必由学教师学生账号快速访问  蛙漫安全无毒 官方认证的绿色入口  Eclipse怎么运行工程_Eclipse工程运行配置说明  如何高效处理PHP中的Excel数据导入导出?PortPHP/Spreadsheet助你轻松搞定!  poki免费入口快捷访问 poki人气小游戏直接玩站点  在J*a中如何开发简易博客标签推荐系统_博客标签推荐项目实战解析  铁路12306卧铺选择攻略 铁路12306下铺座位预定技巧  UC浏览器官网入口2025最新 UC浏览器网页版正式地址  Excel组合图表怎么做 Excel创建柱状图与折线组合图教程【图表】  126邮箱网页版官方入口 126邮箱账号在线登录平台  Mac终端命令大全_Mac常用Terminal指令速查  Yandex官网搜索引擎免登录_俄罗斯Yandex一键直达入口  Lar*el头像管理:图片缩放与旧文件删除的最佳实践  Win10怎么制作U盘启动盘 Win10系统安装U盘制作教程【详解】  win11 arm版怎么安装 M1/M2 Mac虚拟机安装ARM win11的方法  漫蛙网页登录入口 漫蛙漫画官方授权网址  Descript怎样用AI剪辑自动去噪_Descript用AI剪辑自动去噪【自动降噪】  在J*a中如何隐藏复杂性_使用门面模式组织对象交互  Spring Boot内嵌服务器与J*a EE全栈特性:选择与部署策略  J*a递归快速排序中静态变量导致数据累积问题的解决方案  优化大型XML文件解析:基于Python流式处理的内存高效方案  4399体育竞技小游戏_4399小游戏赛事入口  押井守高度称赞《辐射4》:玩了八年都停不下来!  ArrayList与LinkedList核心操作的Big-O复杂度分析  Excel中VLOOKUP的第四个参数是干什么用的_Excel VLOOKUP第四参数作用解析  钉钉视频会议画面卡顿如何解决 钉钉会议画面优化方法 

搜索