ice-lab / icepkg

The Next Generation of Package Bundler
https://pkg.ice.work
MIT License
211 stars 73 forks source link

[ice-pkg 插件开发] modifyUserConfig 不符合预期 #626

Open fyangstudio opened 10 months ago

fyangstudio commented 10 months ago

通过 modifyUserConfig 修改 用户配置 ,和直接配置后的 构建产物不同。

方式一 直接配置:

// build.config.mts

import { defineConfig } from "@ice/pkg";

// https://pkg.ice.work/reference/config/
export default defineConfig({
  transform: {
    formats: ["es2017"],
  },
  bundle: {
    polyfill: false,
    formats: ["es2017"],
  },
});

方式二 通过插件修改配置:

// build.config.mts

import { defineConfig } from "@ice/pkg";

// https://pkg.ice.work/reference/config/
export default defineConfig({
  plugins: ["./plugin.mjs"],
});
// ./plugin.mjs
/**
 * @type {import('@ice/pkg').Plugin}
 */
const plugin = (api, options) => {
  const { modifyUserConfig } = api;
  modifyUserConfig("transform", {
    formats: ["es2017"],
  });
  modifyUserConfig("bundle", {
    polyfill: false,
    formats: ["es2017"],
  });
};

export default plugin;

方式一和方式二 构建产物不同,方式二 多构建了 esm 目录产物

luhc228 commented 10 months ago

https://github.com/ice-lab/icepkg/blob/de7f2959a2e3925d6ee4a90bce9ed12ae43f2b4f/packages/pkg/src/plugins/component.ts#L18

目前的逻辑是,一个 transform.format 对应一个 task。

上面是内置插件会在最前面运行,注册 task 的逻辑先执行,并且依赖 transform.formats。自定义插件通过 modifyUserConfig 没办法修改已注册的 task

luhc228 commented 10 months ago

我认为这个后面要重构掉,具体的方案要讨论下。