编译型 JSS 框架 Linaria 的原理

Linaria是一个编译期+运行时的JSS框架,与传统运行时方案不同,它在编译阶段解析CSS,生成单独的CSS文件并用哈希字符串替换JSS代码。本文探讨了Linaria的编译流程,包括如何通过webpack和babel配置,以及如何动态执行JS代码来解析和提取CSS。最后,总结了Linaria如何将CSS拆分到单独文件并利用webpack生态进行后续处理。
摘要由CSDN通过智能技术生成

Linaria 是一个近似于 styled-componentsemotion JSS 框架,不同点在于, styled-componentsemotion 是一个 运行时 方案,而 Linaria 是一个 编译期 + 运行时 方案。

运行时的 JSS 方案必须内置一个 CSS 处理器,并且在运行时去解析,分别增加了体积和性能上的成本。 Linaria 创造性的在编译期将相应的 JSS 解析出来,抽出解压到一个 CSS 文件中,并将相应的 JSS 代码替换成一个指向某个 css 类名的字符串,避免了运行时方案的问题。

本文只做原理探讨,使用介绍相关请看 《Linaria 也许是现在 React 最佳的 JSS 方案》

总览

对于以下代码

import { css } from '@linaria/core'

let size = 5;
size = (function() { return 3; }());

const headerClassName = css`
  text-align: center;
  color: #fff;
`;

const headerTitleClassName = css`
  .${headerClassName} {
    font-size: ${size}px;
  }
`;

console.log(headerClassName, headerTitleClassName);

Linaria 会将其编译为

// index.bundle.js
var size = 5;

size = function () {
  return 3;
}();

var headerClassName = "hf71da1";
var headerTitleClassName = "hi1y09m";
console.log(headerClassName, headerTitleClassName);
/* index.css */
.hf71da1{
   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值