webman插件打包为composer拓展包

发布 Webman 插件到 Gitee 完整教程

第一步:更新 composer.json

当前 composer.json 缺少关键依赖声明。建议做以下修改:

composer.json

(修改)

第二步:创建独立 Git 仓库并推送到 Gitee

在命令行中依次执行以下命令:

cmd

复制

插入

新建文件

保存

插入到终端

应用

:: 1. 进入插件目录

cd d:\www\email-send\plugin\wecom-alarm

:: 2. 初始化独立的 Git 仓库

git init

:: 3. 添加所有文件

git add .

:: 4. 提交

git commit -m "feat: 初始提交 - Webman 企业微信告警插件"

:: 5. 在 Gitee 上手动创建一个仓库,名字建议为 wecom-alarm

:: 6. 关联远程仓库并推送(替换为你的实际仓库地址)

git remote add origin https://gitee.com/你的用户名/wecom-alarm.git

git branch -M master

git push -u origin master

注意:在 Gitee 创建仓库时,不要勾选"使用 README 初始化仓库",否则会冲突。

第三步:注册到 Packagist(让 composer require 能直接安装)

打开 https://packagist.org/

用 GitHub/GitLab 账号登录(如果没有,注册一个 Packagist 账号)

点击右上角 Submit 按钮

在 Repository URL 输入你的 Gitee 仓库地址,例如:

https://gitee.com/你的用户名/wecom-alarm.git

点击 Check,确认无误后点击 Submit

成功后,同部门同事就可以直接通过以下命令安装了:

composer require tencent/wemail-alarm

第四步:使用方式(写进 README)

给同事的安装步骤:

bash

复制

插入

新建文件

保存

插入到终端

应用

1. 进入 webman 项目根目录

cd your-webman-project

2. 安装插件

composer require tencent/wemail-alarm

3. 修改配置文件

编辑 plugin/wecom-alarm/config/app.php

将 webhook 替换为自己的企业微信机器人 Webhook 地址

将 project_name 改为自己的项目名称

配置说明:

配置项 说明

enable 插件总开关

webhook 企业微信群机器人 Webhook 地址

project_name 项目名称(告警消息中显示)

env 当前环境 dev/test/pro

alarm_env_list 哪些环境开启告警

limit_expire 防抖时间(秒),相同异常间隔内只发一次

ignore_exception 忽略的异常类列表

获取 Webhook 地址:

打开企业微信群聊

点击群设置 → 群机器人 → 添加机器人 → 复制 Webhook 地址

填入 config/app.php 的 webhook 配置项

第五步:后续更新流程

插件有更新时,按以下流程发布新版本:

cmd

复制

插入

新建文件

保存

插入到终端

应用

:: 1. 修改代码后进入插件目录

cd d:\www\email-send\plugin\wecom-alarm

:: 2. 提交变更

git add .

git commit -m "fix: 修复 xxx 问题"

:: 3. 打标签(版本号)

git tag -a v1.0.0 -m "v1.0.0"

:: 4. 推送代码和标签

git push origin master

git push origin --tags

:: 5. Packagist 会自动检测到新版本(通过 Webhook),无需手动操作

可选:不用 Packagist,直接通过 Gitee 安装

如果不想注册 Packagist,可以在项目的 composer.json 中添加自定义仓库:

json

复制

插入

新建文件

保存

应用

{

"repositories": [

{

"type": "vcs",

"url": "https://gitee.com/你的用户名/wecom-alarm.git"

}

],

"require": {

"tencent/wemail-alarm": "^1.0"

}

}

这样同事安装时需要先在 composer.json 中添加上面的 repositories 配置,然后执行 composer require tencent/wemail-alarm。

总结步骤

步骤 操作 位置

1 更新 composer.json(已完成) 本机

2 git init + push 推送到 Gitee 本机 → Gitee

3 在 Packagist 提交仓库地址 packagist.org

4 同事 composer require tencent/wemail-alarm 同事机器

插件文件我已经帮你更新了 composer.json(添加了 guzzlehttp/guzzle 依赖和 keywords),现在只需要执行第二步和第三步即可完成发布。

解决别的项目引用后 无法同步配置问题

PSR-4 映射不完整:composer.json 只映射了 app/ 目录,api/Install.php 的命名空间没被注册,导致 webman 找不到插件的安装入口

缺少配置发布逻辑:Install.php 没有把配置文件从 vendor/ 拷贝到 plugin/ 目录

webman 插件工作原理

code

复制

插入

新建文件

保存

应用

composer require xxx

post-package-install 触发 support\Plugin::install

扫描 PSR-4 命名空间,找 {namespace}Install 类

如果定义了 WEBMAN_PLUGIN 常量 → 调用 install(true/false)

我们的 install() 负责把配置从 vendor 拷贝到 plugin/

解决方案:修改两个文件

读取

composer.json

L1-End

深度思考

改动 1:composer.json --- 注册 api/ 命名空间,让 webman 能找到 Install 类

composer.json

(修改)

+2

-1

查看文件

深度思考

改动 2:api/Install.php --- 添加 WEBMAN_PLUGIN 常量 + 配置发布逻辑

Install.php

(修改)

+64

-2

查看文件

深度思考

验证最终文件:

读取

composer.json

L1-End

读取

Install.php

L1-End

深度思考

改动完成。总结一下做了什么以及为什么要这样做:

修改总结

问题根因

问题 原因 解决

配置在 vendor 里改不了 webman 的插件机制要求 Install 类主动把配置从 vendor/ 拷贝到 plugin/ publishConfig() 方法

装了插件但没生效 Install 类缺少 WEBMAN_PLUGIN 常量,webman 检测不到这是一个插件 加 const WEBMAN_PLUGIN = true

Install 类找不到 composer.json 的 PSR-4 只映射了 app/,没映射 api/ 加 api/ 映射

配置发布策略

code

复制

插入

新建文件

保存

应用

首次安装 (install(true)):

vendor/tencent/wemail-alarm/config/* → 全部拷贝到 plugin/wecom-alarm/config/*

更新安装 (install(false)):

autoload.php → 覆盖(内部配置,用户不应修改)

middleware.php → 覆盖(内部配置)

exception.php → 覆盖(内部配置)

app.php → 跳过(保留用户已修改的 Webhook、项目名等)

其他项目(如 Laravel)的做法

对比一下主流的配置发布方式:

框架 方式

Laravel php artisan vendor:publish --tag=config --- 发布到 config/ 目录

Symfony Flex recipes --- 配置文件在独立的 recipe 仓库

Webman support\Plugin::install 检测 WEBMAN_PLUGIN 常量,调用 Install::install()

每次修改后 需要打新版本号才会被更新到i

git add .

git commit -m "fix: 修复boot.php缺失问题,发布app目录源码到plugin下"

git tag -a v1.2.0 -m "v1.2.0"

git push origin master

git push origin --tags

//引用

composer require tencent/wemail-alarm --ignore-platform-req=ext-http