-
Notifications
You must be signed in to change notification settings - Fork 75
Open
Labels
Description
现状
目前 @ice/pkg 中,配置主要通过 transform
和 bundle
两个大类的构建来实现,又通过其内部的 formats
来区分不同的构建目标。
但随着社区的发展,和构建目标越来越多样,已经难以满足目前的构建需求。
- 无法方便的为不同的 formats 定制不同的输出目录和插件体系
- formats 绑定死了 module 和 target 形式,开发者无法灵活的独立配置
- 无法方便的同时构建多个不同类型产物和目标,例如 mf、web、node
因此这里特地提出一种全新的构建体系配置,能够做到更加灵活的和简便的构建配置体系。
非常感谢 rslib,参考了部分思路
配置
为了不引入 Break Change,在新的配置体系下,所有的配置将放到新的 pkgs
配置目录下。
export default defineConfig({
pkgs: [] // new keys
transform: {}, // 依旧保持兼容可以继续使用,但与 pkgs 的配置完全独立
bundle: {},
define: {}, // 原先的一些配置依旧可以用
})
配置类型
预设字符串
例如可以直接通过字符串配置和原先类似的预设方案:
- 直接使用格式,
esm
/cjs
,等价于在 transform 中直接配置 formats - 使用
!
开头等价于在 bundle 中配置 formats,!esm
/!cjs
/!umd
export default defineConfig({
pkgs: ['esm', 'es2017', '!umd']
})
对象配置
可以传入一个对象进行配置,在传入对象的情况下,需要单独配置模块类型和语法目标。
export default defineConfig({
pkgs: [{
id: 'xxx', // 唯一标识某个构建,方便后续选择操作
module: 'esm',
target: '2017',
bundle: false, // 默认就是 transform
outDir: '/xxx', // 单独配置输出目录
plugins: [], // 配置独立的插件,仅针对当前生效
}, {
module: 'umd',
target: 'es5',
bundle: true, // 启动 bundle 构建
extends: ['xxx'] // 可以选择从另一个配置中继承
}, {
preset: '!umd', // 基于默认配置进行修改
}]
})
可以通过嵌套 pkgs 来实现继承和扩展,只有没有配置 pkgs 的配置会作为最终的构建目标,如果配置了 pkgs,则作为普通的配置项目用以继承。
继承顺序
配置按照如下顺序进行继承,优先级由高到低
- 当前
pkg
配置 - 继承的 pkg 配置
- 根节点配置,(包括 transform 和 bundle 的配置)
- 预设的配置(
preset
字段),如果有
transform/bundle 的默认逻辑修改
在旧版本,transform 的 formats 默认有值,但是在新版本中,当配置了 pkgs 之后,transform 和 bundle 的 formats 会自动忽略,并且不在有默认值。避免和 pkgs 产生冲突