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

[RFC] Mako 接入 father #813

Closed
PeachScript opened this issue Dec 22, 2023 · 1 comment
Closed

[RFC] Mako 接入 father #813

PeachScript opened this issue Dec 22, 2023 · 1 comment
Assignees

Comments

@PeachScript
Copy link
Member

背景

father 目前的 UMD 产物构建使用的是 @umijs/bundler-webpack,面对大型组件库的时候构建仍然是吃力的,倘若可以接入 Mako,构建耗时应当可以大幅缩短

方案

由于 bundler-okam 原本对标的就是 @umijs/bundler-webpack,所以从 father 的视角来看,Mako 可作为 bundle 模式下一种新的 bundler 类型

配置变化

.fatherrc.ts 新增 umd: { bundler: 'webpack' | 'mako' } 的配置项做切换

代码位置:https://github.com/umijs/father/blob/8f106062ed4e84e53a9c117fb4b6b43e21dfde36/src/types.ts#L164

源码结构变化

原有 bundle 中与 @umijs/bundler-webpack 有关的调用逻辑都挪到 bundlers/webpack.ts 中,另外新增 bundlers/mako.ts 来调用 bundler-okam

代码位置:https://github.com/umijs/father/blob/4e35218d3ca5735f221bc2d28abb17c537e0f986/src/builder/bundle/index.ts#L57

配置的兼容

bundler-okam 中已对能兼容的配置做了转换(比如 extraBabelPlugins 中的 babel-plugin-import),对不兼容的配置做了警告,详见 #611

所以 father 层在文档中对不支持的配置做说明即可,列表如下:

  1. autoprefixer
  2. chainWebpack
  3. extractCSS
  4. postcssOptions

文档的更新需要和 bundler-okam 的对外闭源版本节奏一致

可预料的兼容问题

虽然从配置层面上 bundler-okam 已经做了抹平,但能力上目前是无法完全覆盖 @umijs/bundler-webpack 的,这些能力现阶段将不可用:

  1. SASS/SCSS 文件的编译
  2. ANALYZE=1
  3. 持久缓存

推广方式

我们主推 esm 所以 father 脚手架和对内的 Bigfish 脚手架默认都是没有开启 umd 产物构建的,无法和 Bigfish 一样通过修改脚手架实现新增应用使用 Mako,更改 umd.bundler 的默认值又可能会影响存量项目的产物,所以目前想到的方案是对开启 UMD 构建的项目做 CLI 推广

由于 bundler-okam 尚无对外的版本,所以内部可以和 Umi + Bigfish 的思路一样,通过 Bigfish 组件库向 father 提供 bundler-okam 模块,先让 Mako 构建可用,未来再内置到 father 中

@xiaohuoni xiaohuoni self-assigned this Feb 29, 2024
@xiaohuoni
Copy link
Member

umijs/father#750

@sorrycc sorrycc closed this as completed Sep 30, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants