您现在的位置是:亿华云 > 数据库
被尤雨溪diss的Native CSS Modules是什么
亿华云2025-10-09 06:57:18【数据库】2人已围观
简介大家好,我是卡颂。昨天早上正吃着早饭,唱着歌,开开心心摸鱼时,看到一条尤大的推文:尤:老实说,我认为Native CSS Modules标准是仓促的,再次显示了参与该标准制定过程的人的傲慢经常看尤大和
大家好,被尤我是雨溪卡颂。
昨天早上正吃着早饭,被尤唱着歌,雨溪开开心心摸鱼时,被尤看到一条尤大的雨溪推文:
尤:老实说,我认为Native CSS Modules标准是被尤仓促的,再次显示了参与该标准制定过程的雨溪人的傲慢
经常看尤大和其他大佬们交流技术,「仓促」、被尤「傲慢」这样的雨溪字眼是很少看到的。
今天我们来看看是被尤什么样的标准,让尤大都忍不住diss。雨溪
此CSS Modules非彼Modules
想必做前端的被尤同学对CSS Modules不会陌生,这里简单介绍下。雨溪
CSS Modules是被尤一套开源的规范,用以解决CSS的以下问题:
命名冲突 没有模块化 依赖关系不明(样式覆盖问题)该规范需要打包工具实现。
我们用一个例子来简要了解他的实现细节:
将CSS文件style.css引入为style对象后,通过style.title的b2b供应网方式使用title class:
import style from ./style.css; export default () => { return ( <p className={ style.title}> I am KaSong. </p> ); };对应style.css:
.title { color: red; }打包工具会将style.title编译为「带哈希的字符串」:
<h1 class="_3zyde4l1yATCOkgn-DBWEL"> Hello World </h1>同时style.css也会编译:
._3zyde4l1yATCOkgn-DBWEL { color: red; }这样,就产生了独一无二的class,解决了CSS模块化的问题。
而今天的主角,并非这位CSS Modules。
Native CSS Modules
今年6月,谷歌工程师「Justin Fagnani」在推上公布了CSS Modules的最新进展:
此CSS Modules并非上文提到的开源方案,而是ES Modules标准下的一个标准。
该标准实际名称为CSS Module Scripts,但社区习惯称其为CSS Modules。
为了与开源方案区别,下文称其为Native CSS Modules。
该标准用来在JS中导入CSS,语法类似ES Modules:
// ES Modules import React from "https://cdn.skypack.dev/react@17.0.1"; // Native CSS Modules import styleSheet from "./styles.css" assert { type: "css" };导入的CSS可以应用于document对象或shadow DOM。
导入的styleSheet数据结构如下:
配合Constructable Stylesheets[1]特性,可以解决CSS:
在多个shadow DOM之间复用 FOUC问题(Flash of Unstyled Content,即由于样式未加载完导致DOM样式从无到有的闪烁情况)看起来很nice,那么尤大diss的点在哪里呢?
这么多问题?
首选,通过对比可以发现:
该标准命名与现有开源方案冲突 标准的语法与现有开源方案语法相同第一点,假设在未来一个初学者搜索CSS Modules,亿华云计算那么结果可能会让他困惑,我搜到的是谁?
第二点,当前各大打包工具都有对开源CSS Modules方案的支持。
如果未来需要实现Native CSS Modules的polyfill,轻则造成重复工作、重则遇到两种方案更迭造成的混乱(想想社区从CJS过渡到ES Modules遇到多少问题)。
除此之外,该方案可能对SSR不友好。
并且,由于Native CSS Modules需要在所属JS模块加载后再异步加载,可能会产生很多碎片化的CSS文件请求。
在有如此多潜在问题的情况下,「Justin Fagnani」仍积极推进该标准的落地,可能这就是尤大认为对方「傲慢」的原因吧。
你可以在讨论1[2]与讨论2[3]看到双方完整的讨论
总结
新的标准,既要在原有基础上有所突破,又受限于现状不能大刀阔斧改变。
这种突破与权衡的博弈每时每刻都是开源的世界上演。云服务器提供商
参考资料
[1]Constructable Stylesheets:
https://developers.google.com/web/updates/2019/02/constructable-stylesheets[2]
讨论1:
https://twitter.com/justinfagnani/status/1403495082506866690[3]
讨论2:
https://twitter.com/Joelbdenning/status/1427427564532887565
很赞哦!(4599)
相关文章
- 用户邮箱的静态密码可能已被钓鱼和同一密码泄露。在没有收到安全警报的情况下,用户在适当的时间内不能更改密码。在此期间,攻击者可以随意输入帐户。启用辅助身份验证后,如果攻击者无法获取移动电话动态密码,他将无法进行身份验证。这样,除非用户的电子邮件密码和手机同时被盗,否则攻击者很难破解用户的邮箱。
- 完美解密Redis与秒杀系统!!!
- JVM堆外内存导致的FGC问题排查
- 自动化测试小心四大陷阱!
- 4、选择一个安全的域名注册商进行域名注册
- 域名到期的解决办法
- Python中值得学习的第三方JSON库
- 挖掘老域名的技巧,什么样的seo老域名有价值?
- 为什么大家都选优质域名?到底存在着什么好处?
- 面试官:Redis 内存数据满了,会宕机吗?