Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

🏗️ TDesign Vue Mono Repo #4251

Open
zhangpaopao0609 opened this issue Jun 4, 2024 Discussed in #4247 · 1 comment
Open

🏗️ TDesign Vue Mono Repo #4251

zhangpaopao0609 opened this issue Jun 4, 2024 Discussed in #4247 · 1 comment
Assignees
Labels
💭 discussion we are discussing 🙏🏻 help wanted Extra attention is needed

Comments

@zhangpaopao0609
Copy link
Collaborator

Discussed in #4247

Originally posted by zhangpaopao0609 June 3, 2024

标题

将 tdesign-vue-next 改造成 monorepo

背景

我们为什么要改造成单仓呢?

  1. vue23 仓库整合,使用一套 UI 来实现。

    这就需要基于单仓来进行整合

    https://github.com/TDesignOteam/tdesign-vue-integrate
    至于为什么还要维护 vue2,这里便不赘述了。

这里有个问题?就是,整合 vue23 就一定要单仓吗?似乎非单仓也能实现?那为什么要采用单仓呢?

答:我们要改,确实用不用 workspace 都可以,但不用的话,结构同样需要重新安排,因为现在的结构下肯定是无法实现整合的。既然结构要改我们完全可以利用workspace的机制来帮助我们更好的管理和发包。
在不用单仓的情况下,管理会相对更麻烦一些,同时,发包也会变得非常麻烦

  1. 单仓非常契合我们的仓库

    • ui + submodule 的结构与单仓可谓一致
    • 多栈 + common
  2. 单仓其它的优势

    • 复用
    • 发包
    • 依赖管理

改造方案

分支:https://github.com/Tencent/tdesign-vue-next/tree/feature/monorepo

image

ps:vue3(@td/adapter-vue3)指:文件夹名为 vue3,括号里的内容为包名 @td/adapter-vue3

  • configs:仓库多处使用的配置

    • ts-config(@td/ts-config)
    • eslint-config(@td/eslint-config)
  • sites:官网

    • site-base(@td/site-base ):官网基础模板,主要抽离官网可复用逻辑
    • vue3(@td/site-vue3)
    • vue2.7(@td/site-vue2.7)
  • internal:供仓库各处使用的内部包

    • vue-babel-preset-jsx(@td/vue-babel-preset-jsx):增强的 vue2-jsx,用于编译 vue3 语法到 vue2.7 vnode
    • vite-base(@td/vite-base):vite 基础配置
    • build-utils(@td/build-uitls):构建相关的工具
  • packages:仓库主要包

    • tdesign-vue-next(tdesign-vue-next):td next 包,组件导出入口
    • tdesign-vue(tdesign-vue)
    • components:承载 UI
      • @td/components-common 公共 UI
      • @td/components-vue3 vue3 独有的 UI
      • @td/components-vue2.7
    • adapter:适配层
      • vue(@td/adapter-vue):适配 vue,组件所需要的 vue api 均从这个包导出
        • vue3(@td/adapter-vue3):底层包,使用者无需关心
        • vue2.7(@td/adapter-vue2.7)
      • hooks(@td/adapter-hooks):适配 hook,组件所需要的 hooks 均从这个包导出
        • common(@td/adapter-hooks-common):公共的 hooks,即不需要适配
        • vue3(@td/adapter-hooks-vue3)
        • vue2.7(@td/adapter-hooks-vue2.7)
    • utils(@td/utils) utils,与框架无关
    • locale(@td/locale) 多语言
    • types(@td/types) 公共类型
    • common(@td/common,即原 submodule)
    • test(@td/test) 测试

目前存在的问题

  1. 结构有些分离

    • 问题:types、props example 等文件在 tdesign-vue-next 目录下,而 UI 却在 components / common / vue3 / vue2.7 下,在 UI 结构上有些分离。

      至于为什么这么放置,是因为 vue3 和 vue2 的这些本身就不同,无法整合

    • 解决方案

      这里不讨论 types、props example 和 UI 文件放在一起是否合理,这里是与之前做对比

      利用文件结构引导开发者,减少开发者的开发感知

      image
  2. 文件结构冗余

    • 问题:tdesign-vue-next 下有 src 各组件,components 也有
    • 解决方案: 暂无解决方案,只能与问题 1 一样,减少开发者感知

注意事项

  1. 注意保留历史记录
    所有的改动都需要通过 Git 操作,这样才能保留历史记录。
  • 文件挪动,直接使用 git mv 可能丢掉历史记录,需要如下方可
    target=$1
    dest=$2
    
    mkdir temp
    git mv $target temp
    mkdir -p $dest
    git mv -k temp/* $dest
    rm -rf temp
Copy link
Contributor

github-actions bot commented Jun 4, 2024

👋 @zhangpaopao0609,感谢给 TDesign 提出了 issue。
请根据 issue 模版确保背景信息的完善,我们将调查并尽快回复你。

@zhangpaopao0609 zhangpaopao0609 added 💭 discussion we are discussing 🙏🏻 help wanted Extra attention is needed labels Jun 4, 2024
@zhangpaopao0609 zhangpaopao0609 pinned this issue Jun 4, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
💭 discussion we are discussing 🙏🏻 help wanted Extra attention is needed
Projects
None yet
Development

When branches are created from issues, their pull requests are automatically linked.

3 participants