公司的主要业务是混合云管,所以除了官网这种 ToC 的项目之外,其余均是 ToB 的管理后台项目;根据具体业务分为了:容器服务、镜像管理、服务商监控、应用管理等等。这些子项目有统一的 UI 风格、相近的交互逻辑、耦合的业务逻辑;所以非常适合 monorepo 的项目管理方式。
Lerna 是前端 monorepo 比较好的解决方案,搭配 yarn 可以非常好的管理项目外部与项目之间的依赖。每个项目都是一个独立的 package,每个 package 都有自己的 workspace,可以将自己的 APIs 通过 lib 暴露并 publish 到内部 npm 仓库,这样每个 package 既是独立的项目也是其他 package 的依赖。
|
|
Lerna 两种模式:
Lerna 常用命令:
对于需要多人维护的复杂项目,相同的代码样式和具体的提交信息是必要的;借助 husky 和 lint-staged(相似的工具还有 pretty-quick,不过只能调用 Prettier,不能调用 Lints),可以对待提交的文件进行校验、格式化,也可以对 commit message 进行约束。
|
|
|
|
|
|
|
|
|
|
.husky/commit-msg 钩子:
|
|
.husky/pre-commit 钩子:
|
|
commitlint.rules:
|
|
commitlint.config:
|
|
|
|
|
|
注意:git add . 相比 git add –all,不处理删除文件;仅提交当前目录或者后代目录下的文件。
私有仓库使用 Verdaccio 搭建并使用 pm2 守护(找运维小哥):
|
|
配置 .npmrc、.yarnrc:
|
|
配置 package.json:
|
|
安装依赖时,会向私服请求 package,如果找不到,服务器就会向 npmjs.org 请求并缓存。
后端数据会通过无渲染组件请求,组件通过 props 接受请求参数,再将返回数据通过作用域插槽暴露。
RlApiRequest 的 render 函数返回了 $scopedSlots.default(this.cSlotScopeProps);继承了 RlApiRequest 的组件通过传入不同的 props 和 aSlotScopeProps(会改写 cSlotScopeProps),达到不同的目的。
对于数据的处理都会交给管道层,组件通过 props 接受原始数据,处理过的数据通过默认的作用域插槽返回。
多个 pipe 共同组成了 pipes 总管道,通过传入 enablePipeFormat、enablePipeFilter 等 props 控制对应管道的开闭;本质上是作用域插槽的应用。