新闻中心
如何在composer.json中定义项目的二进制(bin)文件?(创建命令行工具)
在 composer.json 中通过 "bin" 字段声明可执行脚本路径,Composer 会将其软链接至 vendor/bin/;该脚本须为项目根目录下的 PHP 文件,具备可执行权限且以 #!/usr/bin/env php 开头。

在 composer.json 中定义二进制文件,核心是通过 "bin" 字段声明可执行脚本路径,Composer 会自动将其软链接到 vendor/bin/ 下,供命令行直接调用。
配置 "bin" 字段指向入口脚本
"bin" 的值必须是项目根目录下某个 PHP 文件的相对路径(通常为 bin/your-command 或 src/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是一款免费开源的AI浏览器扩展,提供YouTube视频总结、网页摘要、写作工具等功能,支持免费的镜像翻译,电子邮件写作辅助,AI问答等功能。
131
查看详情
- 没有执行权限会导致
vendor/bin/mytool链接存在但无法运行 - 建议在
git中保留可执行位:git update-index --chmod=+x bin/mytool
发布后让其他项目能全局使用
若你开发的是可复用的 CLI 工具(如 phpunit、larastan),还需设置 "type": "project" 或更常见的是 "type": "library" 并在 "autoload" 中注册命名空间——但关键仍是 "bin" 字段被下游项目识别。
- 其他项目
composer require your/package后,your-package的bin就会出现在其vendor/bin/中 - 如想支持全局安装(
composer global require),无需额外配置,Composer 默认处理
验证是否生效
运行 composer install 或 composer 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第四参数作用解析
钉钉视频会议画面卡顿如何解决 钉钉会议画面优化方法


2025-12-14
浏览次数:次
返回列表
vendor/autoload.php';
// 你的命令行逻辑
echo "Hello from mytool!\n";