基于 Umi4 架构,提供基础库开发工作流的解决方案。
注意: 本项目主要参考 father@4
的代码实现,并在其中加入自己对基础库开发工作流的一些理解。
经过对目前主流的一些基础库(组件库/工具库等)和打包工具(webpack/rollup/esbuild等)的的研究,得出如何结论:
- 编译模式主要分为以下两种
- Bundle: 将所有文件打包进一个文件;
- Bundless: 目录对目录;
- 编译格式主要分为以下三种
esm
cjs
umd
以 React 技术栈有名的 antd 组件库为例,打包输出目录为 es
、lib
、dist
就分别用到了上述两种编译模式
es
和lib
采用的就是 Bundless 模式;dist
采用的就是 Bundle 模式;
以 father@3 为例,就提供了 babel
和 rollup
两种模式供用户选择。(babel就相当于Bundless模式;rolup就相当于Bundle模式)
基于多年开源开发经验,一个好的打包工具应具备如下特性:
- 能够同时支持
esm
、cjs
、umd
三种编译格式 esm
、cjs
使用Bundless
编译模式umd
使用Bundle
编译模式- 能够处理组件库和工具库的所有打包场景
- 📦 依赖预打包 基于 ncc(打包文件)+ dts-packer(生成类型)
- ⚔️ 双模式构建
- Bundle 模式:仅 UMD 产物走 bundle 模式,核心为 webpack
- Bundless 模式:仅 ESM 产物走 bundless 模式,默认提供 babel(browser)+ esbuild(node)双编译核心,可基于插件系统注册 swc/tsc 模式
# npm
$ npm install redbud --save -D
# yarn
$ yarn add redbud -D
# pnpm
$ pnpm i redbud -D
查看 redbud
的版本
$ redbud version