-
Notifications
You must be signed in to change notification settings - Fork 277
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[RFC] 提供 CSS 预处理器编译能力 #600
Comments
几点想法:
|
可以借鉴 Vite 的解决方案,预处理器作为运行时依赖,当配置项开启但缺少预处理器依赖时,抛出异常
good idea,这点我觉得也可以参考 Shared Options | Vite
get
社区中对 CSS-in-JS 的争论仍然非常多,我不认为 father 作为构建这一层的工具,应该输出观点给到上层,或者说,对于非标准中的内容,father 本身应该是没有观点的,应该是见仁见智的。我觉得 CSS-in-JS 即使已经是 mui/antd 所推崇的组件库样式解决方案,但这只是冰山一角,太多的组件库仍然在使用传统的样式解决方案,且 CSS 变量出现后传统的样式解决方案也没有明显的短板。如果 father 在这个问题上携带观点,从技术产品的纬度上来看,会失去这部分使用传统样式解决方案的组件库的市场,我认为是不值得的
这里的用户指的是 father 的用户,还是使用 father 构建的组件库的用户?
不能使用 CSS Modules 的问题应该比较好解决,使用了 CSS Modules 的语法直接报错 |
预处理转换 less / scss 到 css 不难,但原文件中的 一个逃生口是 swc 作为转译器是用 rust 写一个 swc 插件支持重写 |
这点我觉得可以注明 SLA,明确告知用户会有构建速度上的损耗,没办法既要又要 |
@PeachScript @fz6m |
尽量用 rust ,以后都是 rust 的发展趋势,用 js 写的生命周期过一年两年就被迭代掉了还要改。 |
Maybe it is too difficult for me. |
先渐进式实现吧,把 babel 的实现了再看看实现 swc/esbuild 的能力,我看到 #535 有自定义 esbuild 插件的需求,或许需要跟这个能力一起实现。 |
背景
#514
配置项
在公共配置的中新增一项配置:
css
object
undefined
css.preprocessorsOptions
Record<string, any>
undefined
配置预处理器额外的配置项。
css.postcssOptions
同
umd.postcssOptions
,兼容。css.autoprefixer
同
umd.autoprefixer
,兼容。css.theme
同
umd.theme
,兼容。同时在 esm/cjs/umd 的子配置项下均可覆盖公共配置,但覆盖方式为了兼容 umd 目前已有的
postcssOptions
等选项,因此去掉css
这一层级。同时,也支持在 esm/cjs 的子配置项中覆盖。
产物
Bundless 的产物目前不会对引入 CSS 预处理器的
import
语句做转换,因此还需要额外的 JS 编译流程将import
语句转换成 CSS:同时 CSS 预处理器的代码也应该被编译成 CSS:
源码:
产物:
如何实现
初步了解发现可以通过在
builder/bundless/loaders
中实现 CSS 预处理器相关的 transformer 即可。由于需要额外的 JS 编译流程将
import
语句转换成 CSS,因此可能需要修改js-loader
中的部分代码,在配置项开启时使用babel
|esbuild
|swc
插件将import
语句进行转换。The text was updated successfully, but these errors were encountered: