Skip to content
This repository has been archived by the owner on Aug 9, 2022. It is now read-only.

father 3 TODOS #187

Closed
9 of 33 tasks
PeachScript opened this issue Nov 18, 2021 · 13 comments
Closed
9 of 33 tasks

father 3 TODOS #187

PeachScript opened this issue Nov 18, 2021 · 13 comments
Assignees

Comments

@PeachScript
Copy link
Member

PeachScript commented Nov 18, 2021

father 3 介绍 + 任务集合,欢迎评论参与共建,做之前先认领(编辑主贴,加 @自己 ),避免冲突。

介绍

核心升级

  • 📦 依赖预打包:类似 Umi 3.5/4 的依赖预打包,基于 ncc(打包文件)+ dts-packer(生成类型)
  • 🛰 产物面向未来:默认不再提供 cjs 产物类型,官方提供兼容模式插件,以便存量项目升级
  • ⚔️ 双模式构建
    • Bundle 模式:仅 UMD 产物走 bundle 模式,核心从 rollup 换成宽容度更高的 webpack
    • Bundless 模式:仅 ESM 产物走 bundless 模式 + 生成 TS 类型定义,默认提供 babel(browser)+ esbuild(node)双编译核心,可基于插件系统注册 swc/tsc 模式
  • 🏗 工程化能力生成:基于 Umi 4 的 generator,提供打包场景的原子工程化能力,例如 g eslint、g test、g commitlint 等
  • 🚨 自动诊断:功能类似 brew doctor,自动对打包场景的常见误区做诊断并给出最佳实践
  • 🚧 Friendly Error:统一处理双模式构建中的常见错误,并给出友好提示,提升使用体验 + 降低答疑成本
  • 🛫 去历史包袱
    • 去 umi-test 集成,改用微生成器
    • 去 storybook 集成,改和 dumi 集成
    • 去 monorepo 支持,改其他工具替代(pnpm?)
    • 去 rollup 核心,改用 webpack

结构图

overview

任务集合

Core Service

  • 初始化仓库,基于 Umi Core 实现配置读取、命令执行、插件注册 @sorrycc b318356
  • 用户配置类型定义
  • 用户配置 Schema 校验规则 @PeachScript

Builder Module

做组件库源码打包/编译

  • 用户配置转换成 Builder 配置 @PeachScript
  • 构建执行器 (Executor)
    • bundless 构建执行器 @PeachScript
    • bundless d.ts 文件生成 @STDSuperman
    • bundless watch 模式 @PeachScript
    • bundle 构建执行器 @PeachScript
    • 统一 Error 捕获及输出
    • bundless cjs 产物兼容层(便于迁移存量有 cjs 产物的项目)
  • 基于 webpack loader 的 loader 系统(Bundless)@PeachScript
  • 内置 js 转换器 (Bundless Transformer)
  • 内置打包器 (Bundler,基于 @umijs/bundler-webpack) @PeachScript

PreCompile Module

做框架/工具的依赖打包,类似 Umi 4

  • 用户配置转换
  • ncc bundler 打包依赖
  • dts-packer 生成类型定义

Doctor Module

做项目的前置检查,给出研发建议或者错误

  • 调研/整理
    • father 2 过往 issue 高频问题整理
    • 组件研发场景的最佳实践整理
    • 梳理出前置检查的规则列表(例如无用依赖、package.json 的 sideEffects/main/module/exports 没配对等等)
  • ModuleGraph
    • 依赖分析
    • 源代码分析
  • 研发建议/错误分析及序列化输出
    • 支持控制台输出
    • 支持 API 调用供其他框架(例如 dumi)集成到 GUI 中提示开发者

Generate Module

基于 umi g 做原子工程化能力的生成

  • 调研/整理
    • 组件研发场景的工程化能力收集(例如 jest/commitlint/changelog)
  • 各能力的 generate 模板编写
  • 集成 umi g 并串联
@PeachScript PeachScript self-assigned this Nov 18, 2021
@xiaohuoni xiaohuoni assigned PeachScript and unassigned PeachScript Nov 18, 2021
@xiaohuoni
Copy link
Member

xiaohuoni commented Nov 18, 2021

摇人 @wangxingkang

@wangxingkang
Copy link
Member

来了

@sorrycc
Copy link
Member

sorrycc commented Nov 18, 2021

临时想到的一些点,

  1. bundless cjs 兼容层怎么实现,用户怎么用?
  2. [优化项] bundless 的 dev 加缓存层,不用每次启动都全部 transform 一遍
  3. 如果用 dts-packer 的话,需要重构一遍,考虑换 api-extractor 的可行性

@xiaohuoni
Copy link
Member

api-extractor

@STDSuperman
Copy link

举手 -> bundless d.ts 文件生成

@PeachScript
Copy link
Member Author

@STDSuperman 欢迎❤️ 邀请你加入 org 了,编辑主贴任务后面艾特自己即可

@saltires
Copy link

为什么要从rollup转为webpack呢

@PeachScript
Copy link
Member Author

@saltires father 3 里只有 UMD 产物是 bundle 的,但从 father 2 的体验来看 Rollup 打 UMD 要处理的问题比较多,框架层也很难收敛

@STDSuperman
Copy link

@STDSuperman 欢迎❤️ 邀请你加入 org 了,编辑主贴任务后面艾特自己即可

@PeachScript bundless dts这 feature 我是直接基于你的 father-builder-module 分支做就可以了对吧,pr 的话是提给你的分支还是说直接提 master 呢。

@PeachScript
Copy link
Member Author

@STDSuperman 是的,提哪个分支取决于 dts PR 的时候 father-builder-module 有没有合并 master

@cnyballk
Copy link
Contributor

让我试试 bundless watch 模式 ?

@roc-an
Copy link

roc-an commented Apr 6, 2022

请问 father 3 预计多久发布正式版?很期待!

@PeachScript
Copy link
Member Author

转到 umijs/father-next#5 跟进,closed

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

8 participants