umijs / mako

An extremely fast, production-grade web bundler based on Rust.
https://makojs.dev
MIT License
1.74k stars 65 forks source link

DISCUSS:如何支持自定义 postcss 插件 #1388

Open sorrycc opened 2 months ago

sorrycc commented 2 months ago

需求

需求来自 @xierenyuan 。

原始需求是 https://github.com/evrone/postcss-px-to-viewport ,这是一个 postcss 插件,我们内置的 px2rem 功能和这个有差异,无法满足需求。

思路

能想到的几个思路。

1)把 px2vp 内置在 Mako 里,这可能是最简单直接的方式,但这个功能感觉有些定制,没那么通用
2)在 load 后再加一个 hook 允许用户调整 load 的结果,不能直接用 load hook 的原因是 css 可能来自其他预编译语言比如 less,而 less 本身就占用了 load hook,同时 load hook 又是 hook_first(遇到有值就退出)的类型
3)支持 swc 的 wasm 插件,在 transform 阶段允许用户修改(不确定是否支持 css 的修改,待调研)

xierenyuan commented 2 months ago
  1. 支持 2 支持后未来 可以实现一个 mako postcss 插件未来还有其他插件以可以直接复用(慢的问题 由使用者承担)
  2. swc 的插件 感觉以可以支持 有些场景其实在 load 处理 并不合适
afc163 commented 2 months ago

/polls '把 px2vp 内置在 Mako 里' '在 load 后再加一个 hook 允许用户调整 load 的结果' '支持 swc 的 wasm 插件'

xusd320 commented 2 months ago

如果是 array hooks 是不是就没这个问题了, less 、sass 分开写

sorrycc commented 2 months ago

如果是 array hooks 是不是就没这个问题了, less 、sass 分开写

hook_serial(依次执行)? 感觉会有性能问题吧。

PeachScript commented 2 months ago

讨论:

jeasonnow commented 1 month ago

我看 Farm 是基于 js plugin 做的,是不是可以考虑增加现在 rust 中 js plugin 的生命周期(transform-css?)且增加 plugin 的优先级来支持一下? https://github.com/farm-fe/farm/tree/main/js-plugins/postcss