Skip to content

作者

novlan1

2025.12.8

PMD NPM 梳理

1. 依赖关系

当前的依赖关系(2025.12.5)。

上面有两个反向依赖。

去掉上面的反向依赖后,相对清晰一点(至少上下级关系明确了,vue 在最上层,types/tools 在下层)。

但还是不够清晰。更重要的是易变的和不变的还是没有分开

目标依赖关系:

模板内部的依赖关系:

  1. types 去掉,移动到对应的子包内
  2. widget 去掉,业务无关放到 press-plus,业务相关放到 business
  3. reportageis 合并
  4. app-info 去掉
  5. use 放业务无关的钩子,业务相关的放到 business

物理存储

  1. config/network 拿走,放到 plugin-light
  2. 参考模块变更频率,将 tools 中稳定的放到 plugin-light,易变的继续放到 pmd-npm
  3. location/business 等不动

2. 核心思想

  1. 依赖分层,避免蜘蛛网,更不允许反向依赖。维护者自己都搞不清楚,新人、使用者怎么能搞清楚?
  2. 分层,将底层的、稳定的、复用率高的拿走,中间层该合并的合并,该去掉的去掉。
  3. 用数据说话,将不变的和变化的分开
  4. 以下几种数据统计,需综合来看
    1. 依赖关系
    2. 变更频率
    3. 引用次数

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. 总览

序号变更类型说明
1toast放到 press-plusTSpmd 已做转发
2dialog放到 press-plusTSpmd 已做转发
3copy放到 press-plusTSpmd 已做转发
4clipboard放到 press-plusVue只有match-igame-admin一个业务引用;
新业务建议直接使用copy方法,而不是组件;
pmd 不处理,不再维护
5marquee放到 press-plusVue新业务直接使用 press-plus 中的组件;
pmd 不处理,不再维护
6image-generator放到 press-plusVuemarquee
7pag-animator放到 press-plusVuemarquee
8qrcode放到 press-plusVue新业务直接使用 press-ui 中的组件;
pmd 不处理,不再维护
9video-player放到 press-plusVuemarquee
10not-found废弃Vue没一个业务使用;写的也很差
11login放到 businessVue-
12share放到 businessTS-
13share-v2放到 businessTS-
14test-whitelist放到 businessVue-

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. 版本更新策略

预发布即 versionTypealpha/beta/rc

下图 type 即为 versionType

7.2. 版本发布流程

7.3. 版本说明

版本发布分支是否可以发布现网用途
alpha非 master新功能、缺陷修复
beta非 master验证新功能、缺陷修复,以及大改动在某一项目上试跑一段时间
patchmaster长期稳定版本