Skip to content
This repository has been archived by the owner on Mar 28, 2023. It is now read-only.

father 4 TODOs #5

Closed
51 of 71 tasks
PeachScript opened this issue Jun 12, 2022 · 14 comments
Closed
51 of 71 tasks

father 4 TODOs #5

PeachScript opened this issue Jun 12, 2022 · 14 comments
Assignees
Labels
help wanted Extra attention is needed

Comments

@PeachScript
Copy link
Member

PeachScript commented Jun 12, 2022

为了和 Umi 主版本保持一致 + 此前做过一版纯 esbuild 的 father 3 alpha,所以计划直接发 father 4 了
father 4 介绍 + 任务集合,欢迎评论参与共建,做之前先认领(编辑主贴,加 @自己 ),避免冲突。

介绍

核心升级

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

结构图

overview

任务集合

First-time Tasks(⭐️ 代表预估难度)

  • ⭐️ 完善 scheme.ts,father 自身属性都做细致校验,比如 esm: { overrides: { ... } } 下只能配什么,三方仍然用 object
  • ⭐️ dev 下最后一条日志输出时分秒,便于用户确认编译时间
  • -- ↓ 已完成 ↓ --
  • ⭐️ 参考 Umi 实现 defineConfig,用于 .fatherrc.ts 中补全配置类型 @cnyballk feat: add defineConfig #15
  • ⭐️ 完善 version 命令,分行追加输出 @vercel/nccbabelesbuildwebpacktypescript@microsoft/api-extractor 的版本号,并添加测试用例(mock console.log@xiaohuoni feat: commands version #14
  • ⭐️ father build 支持可选 --no-clean 参数,构建前不清空输出目录 @xiaohuoni feat: build noClean #12
  • ⭐️ src/types.ts 里完善 @todo 的类型,从 @umijs/utils/compiled@umijs/bundler-utils/compiled 里找 @zzcan feat: add types #17
  • ⭐️ bundless/index.ts 里对没匹配到配置的文件输出 debug 日志,使用 @umijs/utils 里的 debug,命名空间用 father:bundless @zzcan feat: bundless add debug log #18
  • ⭐️⭐️ umd 支持 name 配置项,配置模块挂载的全局变量名称 @xiaohuoni feat: umd name #61
  • ⭐️⭐️ prebundle 配置项添加顶层的 output 配置项 + 去掉 deps 内层的 output 配置项,并添加用例 @zzcan feat: change prebundle output config #30
  • ⭐️⭐️ builder/config.tsgetConfigForFile 支持自动获取 tsconfig.json 中的 compilerOptions.paths 并转换为 alias,并添加用例 @xierenyuan feat: convert alias from tsconfig paths #21

RC version related

Release related

  • 指南文档完善 docs: add more guide docs #68
    • 迁移文档
    • 同类工具比较
    • FAQ
  • umd 从 @umijs/bundler-webpack 开放 themelessLoader 配置项
  • 脚手架在 prepublishOnly 脚本里添加 father doctor 命令
  • 推广文章

Core Service

Builder Module

做组件库源码打包/编译

PreCompile Module

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

自动化测试

Doctor Module

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

#56

  • 调研/整理
    • father 2 过往 issue 高频问题整理
    • 组件研发场景的最佳实践整理
    • 梳理出前置检查的规则列表(例如无用依赖、package.json 的 sideEffects/main/module/exports 没配对等等) Collecting father doctor rules father#608
  • Rule API 准备
    • addRegularCheckup 添加标准检查(用户配置、最终配置、package.json、tsconfig.json 等)
    • addSourceCheckup 添加源码检查(源码目录的每一个文件)
    • addImportsCheckup 添加 imports 语句检查(import/await import/require
  • 研发建议/错误分析及序列化输出
    • 支持控制台输出
    • 支持 API 调用\供其他框架(例如 dumi)集成到 GUI 中提示开发者

Generate Module

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

Changelog

类似 ant-design 仓库的 changelog 生成能力,规划中...

  • WIP
@PeachScript
Copy link
Member Author

from https://github.com/umijs/umi-next/issues/187#issuecomment-1023363757
让我试试 bundless watch 模式 ?

@cnyballk 抱歉之前消息看漏了,最近还有时间参与吗

@cnyballk
Copy link

from umijs/umi-next#187 (comment)
让我试试 bundless watch 模式 ?

@cnyballk 抱歉之前消息看漏了,最近还有时间参与吗

可以,整起来

@PeachScript
Copy link
Member Author

@cnyballk 那 bundless watch 的你有空先看看方案?大致功能描述:

  1. 监听 input 目录的变更,处理文件新增、删除、修改,做增量编译,主要改 bundless/index.ts
  2. 监听用户配置文件变更,用新的配置对文件做全量编译,主要改 config.ts

先看下工作量,如果比较复杂可以再拆子任务我们分一下

@PeachScript
Copy link
Member Author

PeachScript commented Jun 21, 2022

  • GitHub CI Action + Coverage

@fz6m 现在加了点用例了,这个任务有时间参与吗

@zzcan
Copy link

zzcan commented Jun 24, 2022

有什么小任务能认领的么?

@PeachScript
Copy link
Member Author

PeachScript commented Jun 24, 2022

@zzcan 欢迎加入,正文里加了一类 First-time Tasks,可以选择看看

@cnyballk
Copy link

参考 Umi 实现 defineConfig,用于 .fatherrc.ts 中补全配置类型

我来

@xierenyuan
Copy link
Member

⭐️⭐️ builder/config.ts 里 getConfigForFile 支持自动获取 tsconfig.json 中的 compilerOptions.paths 并转换为 alias,并添加用例

这个我来

@PeachScript
Copy link
Member Author

⭐️⭐️ builder/config.ts 里 getConfigForFile 支持自动获取 tsconfig.json 中的 compilerOptions.paths 并转换为 alias,并添加用例

这个我来

👍
可以复用 bundless/dts/index.ts 里的 getTsconfig 方法

@zzcan
Copy link

zzcan commented Jun 25, 2022

⭐️ src/types.ts 里完善 @todo 的类型,从 @umijs/utils/compiled 和 @umijs/bundler-utils/compiled 里找
先认领下这个

@roc-an
Copy link

roc-an commented Jun 27, 2022

加了个油~!

@PeachScript PeachScript added the help wanted Extra attention is needed label Jul 7, 2022
@siyi98
Copy link

siyi98 commented Jul 8, 2022

预打包产物校验:是否包含动态 require 子路径模块的逻辑

这个我来

@PeachScript
Copy link
Member Author

预打包产物校验:是否包含动态 require 子路径模块的逻辑

这个我来

👍 有思路的时候先对一下再做?目前的主要参考就是 Umi 4 里打 patch 的 case,都是 ncc 默认没覆盖到的,比如这一段:https://github.com/umijs/umi/blob/master/scripts/bundleDeps.ts#L97-L163

@siyi98
Copy link

siyi98 commented Jul 12, 2022

预打包产物校验:是否包含动态 require 子路径模块的逻辑

这个我来

👍 有思路的时候先对一下再做?目前的主要参考就是 Umi 4 里打 patch 的 case,都是 ncc 默认没覆盖到的,比如这一段:https://github.com/umijs/umi/blob/master/scripts/bundleDeps.ts#L97-L163

等我梳理一下思路,找你对一下

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
help wanted Extra attention is needed
Projects
None yet
Development

No branches or pull requests

6 participants