如何编写一个 Composer 脚本来监听文件变化并自动执行任务?


Composer 本身不提供文件监听功能,但可通过其脚本机制结合 watchexec 等外部工具实现自动执行任务;需先在 composer.json 中定义 scripts,再用 watchexec 监听文件变化并触发对应命令。

如何编写一个 composer 脚本来监听文件变化并自动执行任务?

Composer 本身不提供文件监听功能,它只是一个依赖管理工具。但你可以通过 Composer 的脚本机制,结合外部工具(如 inotifywaitwatchexecphp-watch)来实现“监听文件变化并自动执行任务”的效果。关键在于:用 Composer 定义可调用的命令,再用监听工具触发它。

1. 在 composer.json 中定义要自动执行的任务

先把你希望自动运行的逻辑封装成一个可执行的 PHP 脚本或 Artisan 命令(如果是 Lar*el),然后在 composer.jsonscripts 段注册为 Composer 脚本:

  • 例如,创建一个 scripts/build.php 文件,内容是编译前端资源或生成文档
  • 然后在 composer.json 中添加:
"scripts": {
  "build": "php scripts/build.php",
  "test:watch": "php vendor/bin/phpunit --colors=always"
}

这样你就可以用 composer buildcomposer test:watch 手动运行了。

2. 使用 watchexec 实现跨平台监听(推荐)

watchexec 是轻量、跨平台、无依赖的监听工具,支持 Windows/macOS/Linux。安装后直接绑定 Composer 脚本即可:

  • macOS / Linux:用 Homebrew 或 cargo 安装:brew install watchexec
  • Windows:用 Scoop:scoop install watchexec
  • 监听 src/tests/ 下的 PHP 文件,保存时自动跑测试:
watchexec -e php -w src/ -w tests/ --on-change "composer test:watch"

它会自动忽略 vendor/node_modules/,也支持自定义忽略规则(比如 --ignore "**/cache/**")。

3. 替代方案:用 inotifywait(Linux 专用)或 fswatch(macOS/Linux)

如果你偏好原生工具:

In3D In3D

把真人变成化身,创建逼真且可自定义的虚拟角色

In3D 99 查看详情 In3D
  • Linux 上可用 inotifywait(来自 inotify-tools 包):
inotifywait -m -e create,modify,move,delete -r src/ tests/ | while read line; do composer test:watch; done
  • macOS/Linux 可用 fswatchbrew install fswatch,然后:
fswatch -o src/ tests/ | xargs -n1 -I{} composer test:watch

注意这些命令需要额外处理并发触发(比如快速连存多次),建议加简单防抖(如 sleep 0.1)或用 watchexec 更省心。

4. 进阶:监听 + 自动重载开发服务(如 PHP 内置服务器)

如果你想改代码后自动重启内置服务器(类似 Lar*el 的 php artisan serve 热更新),可以组合使用:

  • 启动一个后台 PHP 服务(比如 php -S localhost:8000 router.php
  • watchexec 监听并 kill + restart:
watchexec -e php -w . --on-change "pkill -f 'php -S' 2>/dev/null; php -S localhost:8000 router.php &"

更健壮的做法是用 concurrentlynodemon --exec php(需全局安装 nodemon),但那已超出 Composer 脚本范畴。

基本上就这些。Composer 脚本只是入口,真正监听靠外部工具。选 watchexec 最省事,配置少、兼容好、行为稳。不需要写复杂逻辑,也不用引入一堆 Node.js 依赖。

以上就是如何编写一个 Composer 脚本来监听文件变化并自动执行任务?的详细内容,更多请关注php中文网其它相关文章!


# php  # linux  # 文件监听  # 是一个  # 海南seo顾问服务  # 进阶  # 加载  # 如果你  # 正阳网站推广公司哪家好  # 大学会议网站建设方案  # 名山营销短视频推广  # 东城asp网站建设报价  # 射阳网站建设公司报价  # 电功率教案网站建设文案  # 门窗seo怎么做  # 英语网站建设需要  # 专业的网站建设地址  # 可执行文件  # 如何使用  # 供应链  # 再用  # 自定义  # 的是  # w  # composer  # go  # node  # json  # node.js  # 前端  # js  # laravel 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 路由器DNS怎么设置最快 优化DNS提升上网速度教程  微信网页版在线登录 微信网页版在线使用入口  抖音如何解除|直播|权限绑定_抖音关闭并解绑|直播|功能的方法  漫蛙manwa2网页版书签同步链接_漫蛙manwa多设备登录入口  OPPO手机参数配置如何开启护眼模式_OPPO手机参数配置护眼模式开启指南  Win10怎么设置快速启动 Win10开启快速启动设置方法  键盘测试软件哪个好_键盘故障检测工具推荐  Python实时数据流中高效查找最大最小值  word表格如何按某一列内容进行排序_Word表格按列排序方法  steam缓存文件在哪儿_steam缓存文件的路径查找方法与结构说明  《七读免费小说》开通会员方法  处理含命名空间的XML文件 Power Query中的高级技巧  《我的恋爱逃生攻略》中文名字输入方法  《洛克王国:世界》国家队搭配攻略  Python实战:高效处理实时数据流中的最小/最大值  如何使用CSS Grid实现“大方块左侧,小方块右侧垂直堆叠”的水平布局  iPhone 13 mini如何清理Safari缓存_iPhone 13 mini浏览器缓存清理方法  学习通网页版课程打不开_课程无法访问时的解决方法  Python模块化编程:避免循环导入与共享函数的最佳实践  《豆瓣》私信用户方法  PySimpleGUI中实现键盘按键与按钮事件绑定教程  OTT月报 | 2025年9月智能电视大数据报告  菜鸟裹裹怎样获得取件码_菜鸟裹裹获得取件码步骤  oppo手机如何通过下拉通知栏截图_oppo手机通知栏快捷截图方法  CSS动画如何实现图标旋转并放大_transform rotate scale @keyframes实现  汽水音乐官方网站登录入口_汽水音乐网页版进入链接  抖音评论无法发送如何修复 抖音评论功能操作指南  包子漫画在线观看入口 包子漫画网正版全集链接  Lar*el 关联查询:同时筛选父表与子表数据的高效策略  windows server2019显卡驱动怎么安装_winserver2019显卡驱动安装与远程桌面优化  招商淘客入门指南  高效调试PHP大型嵌套数组:JSON序列化与可视化工具实践  画质怪兽120帧安卓和平精英免费版  荣耀 Magic10 Pro 系统更新提示失败_荣耀 Magic10 Pro 升级修复  使用Selenium在无头Chrome中交互动态菜单和复选框的策略  《顺丰同城骑士》查看我的技能方法  C++如何使用CMake构建项目_C++ CMakeLists.txt编写入门教程  如何高效地基于键列值映射DataFrame中的多个列  一加 Ace 6V 快充无法启用_一加 Ace 6V 充电优化  《虎扑》取消评分记录方法  Dash应用多值文本输入处理与类型转换教程  sublime如何自定义文件类型图标_AFileIcon插件的主题切换与个性化配置  B站怎么开|直播| B站|直播|申请需要什么条件【新手必看】  C++ static关键字作用_C++静态成员变量与静态函数  在VS Code中利用AI辅助进行代码迁移  HTML中多图片上传与预览:解决ID冲突的专业指南  J*aScript包管理器_Npm与Yarn对比  学习通网页版个人登录_学习通网页版个人账户登录入口  掌握产品代码正则表达式:避免常见陷阱与精确匹配  荣耀magicv5怎么上手测评 

 2025-12-17

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.