多框架组件库开发实践(一)

256 阅读2分钟

工作中,我们可能会同时维护多个项目的情况,有时候,多个项目又会存在一些跟业务逻辑无关的公共逻辑。当然,我们又不想把代码复制多次的话,往往会考虑 lib 的开发。如果有时,又会遇到多框架的情况,我们当然不希望相同的逻辑在不同的框架重复实现,又会涉及跨框架的逻辑共享。

下面,我们以一个具体的实例来实现一个简单的多框架的 lib 开发。首先,我们来创造一个需求:

  • 实现一个页面,输入框的 first name, last name, 显示 full name 的页面。
  • 需要实现多框架,angular, react, vue
  • 需要尽可能复用代码,纯逻辑部分,不希望重复实现
  • 能够利用 github 自动发布

需要实现不同的框架,肯定是不同的 package, vue, react, angular。这里我们考虑 mono-repo 来进行管理。考虑到对于 mono-repo 的支持,我们使用 pnpm 来管理 package(yarn2 也是一个比较好的选择)。

目录结构

我们要考虑的就是文件的目录形式。考虑到需要按照不同的框架来排列,每一种框架又可能会存在多个 package 的情况。可以考虑以下目录结构:

- angular
  - ngx-name-maker
- react
  - react-name-maker
- vue
  - vue-name-maker
- vanilla
  - vanilla-name-maker
package.json
pnpm-workspace.yaml

接下来,我们分别用 angular-cli 和 vite 创建这几个空的 project。当然,为了方便测试,我们往往会创建一个 demo project 来做本地的页面测试。你可以选择 demo 跟 lib 分开,也可以选择放在相同的文件夹下面。

- angular
  - ngx-name-maker
- react
  - react-name-maker
- vue
  - vue-name-maker
- vanilla
  - vanilla-name-maker
- demos
  - ngx-demo
  - react-demo
  - vue-demo
  - vanilla-demo
package.json
pnpm-workspace.yaml

commitizen commit

作为 lib, 规范的 commit 记录可以方便我们维护和生成 change log, 这里我们选择 commitize。这里,我们安装在根目录 pnpm install commitizen -D --filter=name-maker