如何让 Composer 在执行 require 或 update 后自动格式化 composer.json 文件?
发布时间 - 2025-12-27 00:00:00 点击率:次Composer 本身不提供自动格式化 composer.json 的功能,但可通过配置 scripts 钩子调用 jq 或 PHP 脚本实现自动美化:jq 方案需安装 jq 并在 scripts 中定义 format-json 及 post-update-cmd/post-require-cmd;PHP 方案则用纯脚本解析并重写 JSON,适配无 jq 环境。
Composer 本身不提供自动格式化 composer.json 的功能,但可以通过配置 scripts 钩子,在 require 或 update 后自动调用 JSON 格式化工具(如 jq 或 PHP 自带的 json_encode)来美化文件。
使用 jq 工具自动格式化(推荐)
jq 是轻量、可靠且跨平台的 JSON 处理命令行工具,适合做格式化。确保已安装:
Linux/macOS:可通过包管理器安装(如 brew install jq 或 apt install jq);
Windows:可用 官方二进制 或通过 WSL 安装。
在 composer.json 的 "scripts" 段中添加:
"scripts": {
"format-json": "jq '.' composer.json > composer.json.tmp && mv composer.json.tmp composer.json",
"post-update-cmd": "@format-json",
"post-require-cmd": "@format-json"
}
这样每次运行 composer update 或 composer require xxx 后,都会自动重写并缩进 composer.json。
用 PHP 脚本实现零依赖格式化
如果无法安装 jq(例如某些 CI 环境),可用纯 PHP 实现:
- 新建脚本
bin/format-composer-json.php:
- 在
composer.json中配置:
"scripts": {
"format-json": "php bin/format-composer-json.php",
"post-update-cmd": "@format-json",
"post-require-cmd": "@format-json"
}
注意事项与常见问题
格式化不会改变内容语义,但要注意:
- 确保
composer.json语法合法,否则格式化会失败(jq或json_decode会报错) - Git 提交时建议忽略格式化引起的空格/换行差异,可配置
.gitattributes统一换行符 - 若项目使用
composer.lock,格式化composer.json不会影响 lock 文件,但下次update会基于新格式重新生成 - 避免在
post-install-cmd中执行格式化——因为首次install时可能还没有vendor/autoload.php,而某些脚本依赖它
基本上就这些。用 jq 最简单,用 PHP 脚本最稳妥,两者都能让 composer.json 始终保持整洁易读。
# composer
# php
# linux
# js
# git
# json
# windows
# 工具
# mac
# macos
# format
# require
# 重写
# 可通过
# 还没有
# 首次
# 并在
# 可以通过
# 能让
# 管理器
# 自带
# 报错
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口
1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤
Laravel如何自定义错误页面(404, 500)?(代码示例)
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
JS去除重复并统计数量的实现方法
微信公众帐号开发教程之图文消息全攻略
Laravel Session怎么存储_Laravel Session驱动配置详解
实例解析Array和String方法
如何在Ubuntu系统下快速搭建WordPress个人网站?
如何快速搭建个人网站并优化SEO?
如何快速搭建高效香港服务器网站?
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
Laravel怎么为数据库表字段添加索引以优化查询
Python文本处理实践_日志清洗解析【指导】
Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】
Laravel DB事务怎么使用_Laravel数据库事务回滚操作
详解阿里云nginx服务器多站点的配置
Python面向对象测试方法_mock解析【教程】
微信小程序 HTTPS报错整理常见问题及解决方案
如何制作一个表白网站视频,关于勇敢表白的小标题?
Laravel如何创建自定义Artisan命令?(代码示例)
深入理解Android中的xmlns:tools属性
微信小程序 五星评分(包括半颗星评分)实例代码
Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权
Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】
html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】
Laravel怎么使用artisan命令缓存配置和视图
在线教育网站制作平台,山西立德教育官网?
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
php json中文编码为null的解决办法
Laravel Fortify是什么,和Jetstream有什么关系
什么是JavaScript解构赋值_解构赋值有哪些实用技巧
如何快速搭建虚拟主机网站?新手必看指南
千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】
Laravel如何生成和使用数据填充?(Seeder和Factory示例)
零基础网站服务器架设实战:轻量应用与域名解析配置指南
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
网站制作报价单模板图片,小松挖机官方网站报价?
如何在云指建站中生成FTP站点?
浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】
黑客如何通过漏洞一步步攻陷网站服务器?
Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境
HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】
Python图片处理进阶教程_Pillow滤镜与图像增强
Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程
西安专业网站制作公司有哪些,陕西省建行官方网站?
,南京靠谱的征婚网站?
Laravel如何发送系统通知?(Notification渠道示例)
如何在云服务器上快速搭建个人网站?
javascript中的try catch异常捕获机制用法分析


pts 钩子调用 jq 或 PHP 脚本实现自动美化:jq 方案需安装 jq 并在 scripts 中定义 format-json 及 post-update-cmd/post-require-cmd;PHP 方案则用纯脚本解析并重写 JSON,适配无 jq 环境。