作者
novlan1
2025.12.8
PMD NPM 梳理
1. 依赖关系
当前的依赖关系(2025.12.5)。
上面有两个反向依赖。

去掉上面的反向依赖后,相对清晰一点(至少上下级关系明确了,vue 在最上层,types/tools 在下层)。
但还是不够清晰。更重要的是易变的和不变的还是没有分开。
目标依赖关系:
模板内部的依赖关系:
types去掉,移动到对应的子包内widget去掉,业务无关放到press-plus,业务相关放到businessreport和ageis合并app-info去掉use放业务无关的钩子,业务相关的放到business
物理存储
config/network拿走,放到plugin-light参考模块变更频率,将tools中稳定的放到plugin-light,易变的继续放到pmd-npmlocation/business等不动
2. 核心思想
- 依赖分层,避免蜘蛛网,更不允许反向依赖。维护者自己都搞不清楚,新人、使用者怎么能搞清楚?
- 分层,将底层的、稳定的、复用率高的拿走,中间层该合并的合并,该去掉的去掉。
- 用数据说话,将不变的和变化的分开
- 以下几种数据统计,需综合来看
- 依赖关系
- 变更频率
- 引用次数
3. 参考资料
2025.12.11 更新
4. 独立发布
每个包独立版本,也不影响任何东西。因为业务从来都是 pnpm i pmd-a@latest pmd-b@latest,没真正关心过具体的版本号。
另外 pmd 包的 dependencies 也没声明过其他 pmd 子包,说明子包内部不关心其他包的版本,只关心其他包的内容。所以升级一个内容没改变的包的版本号并没有什么好处。
本质上,不管是我们自己的业务还是其他业务,pmd 提供的都是一个整体服务,尽管为了方便维护将他们分成了多包。
这一点和 Press UI、Press Plus、Plugin Light 中的子包是不一样的,这些是真正意义的独立子包,pmd 为了方便业务使用,做了权衡。
5. pnpm
yarn 改 pnpm,发布流水线改造
- 每个包独立发布
- 支持审核人
- 支持发布
alpha/beta/patch版本 - 发布成功消息提醒,
alpha/beta同样支持
之前的发布就只能指定一个分支:

现在可以指定:
- 分支
- 版本类型
- 发布子包
- 发布原因

6. pmd-widget 改造
业务无关的组件放到 press-plus 中,业务相关的放到 business 中。
Press Plus 有完善的文档、示例,为啥要放到 pmd 中?
6.1. 总览
| 序号 | 包 | 变更 | 类型 | 说明 |
|---|---|---|---|---|
| 1 | toast | 放到 press-plus 中 | TS | pmd 已做转发 |
| 2 | dialog | 放到 press-plus 中 | TS | pmd 已做转发 |
| 3 | copy | 放到 press-plus 中 | TS | pmd 已做转发 |
| 4 | clipboard | 放到 press-plus 中 | Vue | 只有match-igame-admin一个业务引用;新业务建议直接使用copy方法,而不是组件; pmd 不处理,不再维护 |
| 5 | marquee | 放到 press-plus 中 | Vue | 新业务直接使用 press-plus 中的组件;pmd 不处理,不再维护 |
| 6 | image-generator | 放到 press-plus 中 | Vue | 同 marquee |
| 7 | pag-animator | 放到 press-plus 中 | Vue | 同 marquee |
| 8 | qrcode | 放到 press-plus 中 | Vue | 新业务直接使用 press-ui 中的组件;pmd 不处理,不再维护 |
| 9 | video-player | 放到 press-plus 中 | Vue | 同 marquee |
| 10 | not-found | 废弃 | Vue | 没一个业务使用;写的也很差 |
| 11 | login | 放到 business 中 | Vue | - |
| 12 | share | 放到 business 中 | TS | - |
| 13 | share-v2 | 放到 business 中 | TS | - |
| 14 | test-whitelist | 放到 business 中 | Vue | - |
6.2. Toast
之前的 Toast 放到了 press-plus 中,并在 press-next 放置了一个转发。你可以这样使用:
js
import { Toast } from 'press-plus/common/toast';
// 或者
// import { Toast } from 'press-next/common/toast';
Toast.show('hello novlan1');同时,增加了类型提示和注释,对比如下。
之前的文档提示(零提示):

现在的文档提示:

之前的类型提示:

现在的类型提示:

7. 附录
7.1. 版本更新策略
预发布即 versionType 为 alpha/beta/rc
下图 type 即为 versionType
7.2. 版本发布流程
7.3. 版本说明
| 版本 | 发布分支 | 是否可以发布现网 | 用途 |
|---|---|---|---|
| alpha | 非 master | ❌ | 新功能、缺陷修复 |
| beta | 非 master | ✅ | 验证新功能、缺陷修复,以及大改动在某一项目上试跑一段时间 |
| patch | master | ✅ | 长期稳定版本 |