Skip to content

[RFC] Nested Lib Config 嵌套式构建库配置 #682

@XGHeaven

Description

@XGHeaven

现状

目前 @ice/pkg 中,配置主要通过 transformbundle 两个大类的构建来实现,又通过其内部的 formats 来区分不同的构建目标。
但随着社区的发展,和构建目标越来越多样,已经难以满足目前的构建需求。

  • 无法方便的为不同的 formats 定制不同的输出目录和插件体系
  • formats 绑定死了 module 和 target 形式,开发者无法灵活的独立配置
  • 无法方便的同时构建多个不同类型产物和目标,例如 mf、web、node

因此这里特地提出一种全新的构建体系配置,能够做到更加灵活的和简便的构建配置体系。

配置

为了不引入 Break Change,在新的配置体系下,所有的配置将放到新的 pkgs 配置目录下。

export default defineConfig({
  pkgs: [] // new keys
  transform: {}, // 依旧保持兼容可以继续使用,但与 pkgs 的配置完全独立
  bundle: {},
})

配置类型

预设字符串

例如可以直接通过 transform:esm bundle:umd 等直接使用和原先类似的预设方案

export default defineConfig({
  pkgs: ['transform:esm', 'transform:es2017', 'bundle:umd']
})

对象配置

可以传入一个对象进行配置,在传入对象的情况下,需要单独配置模块类型和语法目标。

export default defineConfig({
  pkgs: [{
    id: 'xxx', // 唯一标识某个构建,方便后续操作
    module: 'esm',
    target: '2017',
    bundle: false, // 默认就是 transform
    outDir: '/xxx', // 单独配置输出目录
    plugins: [], // 配置独立的插件
    pkgs: [{}, { entry: 'xxx' }], // 继承这个配置,通过创建出两个子配置来
  }, {
    module: 'umd',
    target: 'es5',
    bundle: true, // 启动 bundle 构建
  }, {
    preset: 'bundle:umd', // 基于默认配置进行修改
  }]
})

可以通过嵌套 pkgs 来实现继承和扩展,只有没有配置 pkgs 的配置会作为最终的构建目标,如果配置了 pkgs,则作为普通的配置项目用以继承。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions