Compiled logo

Compiled

Atlassian 出品的编译时原子化 CSS-in-JS 方案

CSS-in-JS编译时提取原子化CSSReact

Compiled 让开发者继续使用熟悉的 CSS-in-JS API,同时在构建阶段把样式提取为原子化静态 CSS,显著降低运行时开销。

Compiled

Atlassian 出品的编译时 CSS-in-JS 库——将样式在构建阶段提取为原子化静态 CSS,运行时零开销。

技术简介说明

Compiled 是由 Atlassian 团队开发并开源的 编译时 CSS-in-JS 库,专为 React 应用设计。它的核心理念是:开发者使用与 Emotion / styled-components 高度一致的 API(css prop、styled 组件、ClassNames 渲染属性)编写样式,但在构建阶段(build time),Babel 插件和 bundler loader 会将所有样式静态提取为 原子化 CSS 类(atomic CSS),最终运行时无需任何样式计算或注入逻辑。

与传统运行时 CSS-in-JS 方案不同,Compiled 不会在浏览器中动态生成 <style> 标签。它在编译阶段将 CSS-in-JS 代码转换为带有哈希类名的原子化样式规则,每条 CSS 声明对应一个独立类名,最大化样式复用率。运行时仅保留极小的样式注入层(将预生成的 CSS 规则移入 <head>),实现了"零运行时开销"与"熟悉开发体验"的兼顾。

自 2019 年底开源以来,Compiled 已成为 Atlassian 整个设计系统(Atlaskit)的基础样式方案。2024 年底 Atlassian 发布 RFC-73,正式将所有 Atlaskit 组件迁移至 Compiled,涵盖设计系统核心组件、编辑器(Editor)、媒体(Media)等模块。截至 2026 年 7 月,@compiled/react 最新版本为 v0.22.2,周下载量约 54 万次(主要由 @atlaskit/* 包的传递依赖贡献),项目持续活跃维护。


基本信息

项目信息
官方网站https://compiledcssinjs.com/
GitHub 仓库https://github.com/atlassian-labs/compiled
LicenseApache-2.0
最新版本@compiled/[email protected](2026-06-30 发布)
主要维护者Atlassian(Atlassian Labs)
GitHub Stars~2.1k
语言TypeScript 92%、MDX 6.3%、JavaScript 1.5%
包管理器npm / pnpm / yarn
npm 周下载量~54 万(含传递依赖)
Monorepo 管理pnpm + Turborepo
创建时间2019-12-13

快速上手

安装

# 核心包
npm install @compiled/react
 
# 根据 bundler 选择对应集成包
npm install @compiled/webpack-loader --save-dev   # webpack
npm install @compiled/vite-plugin --save-dev      # Vite
npm install @compiled/babel-plugin --save-dev     # Babel

Webpack 配置

// webpack.config.js
const CompiledExtractPlugin = require('@compiled/webpack-loader/extract-plugin');
 
module.exports = {
  module: {
    rules: [
      {
        test: /\.[jt]sx?$/,
        use: [
          {
            loader: '@compiled/webpack-loader',
            options: {
              unstable_cssNestedComponents: true,
            },
          },
        ],
      },
    ],
  },
  plugins: [new CompiledExtractPlugin()],
};

Vite 配置

// vite.config.ts
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import compiled from '@compiled/vite-plugin';
 
export default defineConfig({
  plugins: [
    compiled(),
    react(),
  ],
});

Babel 配置

{
  "plugins": ["@compiled/babel-plugin"]
}

最小示例

使用 css prop(推荐 API)

import React from 'react';
import { css } from '@compiled/react';
 
function App() {
  return (
    <div
      css={{
        display: 'flex',
        flexDirection: 'column',
        padding: 16,
        backgroundColor: '#f4f5f7',
        borderRadius: 8,
      }}
    >
      <h1 css={{ fontSize: 24, color: '#172b4d', margin: 0 }}>
        Hello Compiled
      </h1>
      <p css={{ fontSize: 14, color: '#6b778c', marginTop: 8 }}>
        编译时 CSS-in-JS,运行时零开销
      </p>
    </div>
  );
}

使用 ClassNames 渲染属性

import React from 'react';
import { ClassNames } from '@compiled/react';
 
function Button({ children, variant = 'primary' }) {
  return (
    <ClassNames>
      {({ css }) => (
        <button
          className={css({
            padding: '8px 16px',
            borderRadius: 4,
            border: 'none',
            cursor: 'pointer',
            fontWeight: 600,
            ...(variant === 'primary'
              ? { backgroundColor: '#0052cc', color: '#fff' }
              : { backgroundColor: '#dfe1e6', color: '#172b4d' }),
          })}
        >
          {children}
        </button>
      )}
    </ClassNames>
  );
}

核心概念与架构

编译时提取

Compiled 的核心机制是在 编译阶段 完成 CSS 的解析、转换与提取:

  1. Babel 解析@compiled/babel-plugin 在 Babel 编译阶段扫描源码中的 css prop、styled 组件和 ClassNames 组件中的样式定义。
  2. 静态分析与求值:对样式中的 JS 表达式进行静态分析,尝试在构建时计算最终值(如常量引用、纯函数调用结果等)。
  3. 原子化拆分:将每条 CSS 声明拆分为独立的原子类(如 color: blue.cc-xyz &#123; color: blue &#125;),最大化类名复用率。
  4. CSS 规则注入:编译后的代码将原子化 CSS 规则以字符串常量形式内嵌,运行时由极小的注入层将规则移入 &lt;head&gt; 中的 &lt;style&gt; 标签。
  5. JSX 转换:原始的 css prop 和样式对象被替换为编译后的 JSX 组件,带有预计算的哈希类名引用。

原子化 CSS 策略

与 Tailwind CSS 类似,Compiled 默认采用原子化 CSS 输出:

// 源码
<div css={{ color: 'blue', padding: 8, fontSize: 14 }}>Hello</div>
 
// 编译后等价于三个原子类:
// .cc-a { color: blue }
// .cc-b { padding: 8px }
// .cc-c { font-size: 14px }
//
// 运行时 JSX 变为:
// <div className="cc-a cc-b cc-c">Hello</div>

这种策略的优势在于:相同声明的样式规则只出现一次,不同组件共享原子类,CSS 总体积随组件数量增长趋于平缓而非线性增长。

运行时注入机制

虽然称为"零运行时开销",Compiled 仍保留了一个极小的运行时层(约 2-3 KB),其职责仅为:

  • 在组件挂载时,将预编译的 CSS 规则字符串通过 insertRule() 注入到 &lt;head&gt; 中的 &lt;style&gt; 标签。
  • 通过哈希去重机制确保相同规则不重复注入。
  • 维护样式优先级排序(style bucketing),确保 CSS 层叠顺序正确。

与 styled-components 等方案的区别在于:运行时不执行任何 CSS 解析、序列化或计算逻辑,仅做规则注入。

cssMapScoped(实验性)

从 v0.22.0 开始,Compiled 引入了实验性的 cssMapScoped API,支持非原子化 CSS 输出:

// cssMapScoped 将多个声明分组到单个类中(类似 CSS Modules)
// 而非拆分为原子类
const variants = cssMapScoped({
  primary: { color: 'blue', fontWeight: 'bold' },
  secondary: { color: 'gray', fontWeight: 'normal' },
});
 
// 输出:.cc-<hash-primary> { color: blue; font-weight: bold }
//       .cc-<hash-secondary> { color: gray; font-weight: normal }

这种模式适用于需要保持样式声明顺序、使用复杂选择器或避免原子化副作用的场景。


核心特性

1. 编译时零运行时开销

所有 CSS 解析、求值和原子化拆分在构建阶段完成。运行时仅执行轻量级规则注入,不进行任何样式计算。JS 包体积显著减小,首屏渲染速度提升。

2. 原子化 CSS 输出

默认将样式拆分为最小粒度的原子类(每声明一个类),跨组件共享样式规则,CSS 总体积随组件增加趋于平缓,缓存命中率高。

3. 熟悉的 API 设计

提供 css prop、styled 组件(已弃用)和 ClassNames 渲染属性三种 API,与 Emotion / styled-components 语法高度一致,迁移学习成本低。

// css prop(推荐)
<div css={{ color: 'red', padding: 8 }}>Content</div>
 
// ClassNames 渲染属性
<ClassNames>
  {({ css }) => <span className={css({ fontWeight: 'bold' })}>Bold</span>}
</ClassNames>

4. 样式优先级分桶(Style Bucketing)

Compiled 将 CSS 规则按类型和优先级分组(布局、排版、颜色等),确保浏览器 CSSOM 构建顺序正确,避免层叠冲突。这一机制保证了样式输出顺序的可预测性。

5. 静态样式提取

通过 @compiled/webpack-loaderCompiledExtractPlugin,可将所有组件样式提取为独立的 CSS 文件,实现完全零运行时注入。提取后的 CSS 可被浏览器原生缓存,进一步提升性能。

6. TypeScript 原生支持

项目使用 TypeScript 编写,提供完整的类型定义。css prop 和 ClassNames API 均具备类型推导能力:

interface CardProps {
  elevated?: boolean;
}
 
function Card({ elevated }: CardProps) {
  return (
    <div
      css={{
        padding: 16,
        borderRadius: 8,
        boxShadow: elevated
          ? '0 4px 12px rgba(0, 0, 0, 0.15)'
          : '0 1px 3px rgba(0, 0, 0, 0.1)',
      }}
    />
  );
}

7. 多 Bundler 支持

通过独立的集成包支持主流构建工具:

Bundler集成包版本
Webpack@compiled/webpack-loader0.20.3
Vite@compiled/vite-plugin1.1.6
Parcel v2@compiled/parcel-config0.5.6
Babel@compiled/babel-plugin0.40.0

8. Design Token 集成

支持在样式中直接引用 JavaScript 变量和模块作为 Design Token:

import { tokens } from '@atlaskit/tokens';
 
function Card() {
  return (
    <div
      css={{
        backgroundColor: tokens.colorBackgroundNeutralBold,
        padding: tokens.space200,
        borderRadius: tokens.borderRadius,
      }}
    />
  );
}

9. React 18+ 兼容

编译时方案天然兼容 React 18 的并发渲染(Concurrent Rendering)和流式 SSR(Streaming Server-Side Rendering),不会因运行时样式注入导致渲染中断或闪烁。

10. CSS 确定性输出

从 v0.22.1 开始,Compiled 确保跨所有 bundler(Webpack、Vite、Parcel、Babel)的 CSS 输出顺序完全确定(deterministic),解决了不同构建环境下样式优先级不一致的问题。


生态图

Compiled 生态(@compiled/*)
│
├── 核心包
│   ├── @compiled/react              # React 运行时 + css prop / ClassNames API
│   └── @compiled/css                # CSS 解析、转换与原子化核心引擎
│
├── 编译插件
│   ├── @compiled/babel-plugin                # Babel 转换插件(核心编译能力)
│   ├── @compiled/babel-plugin-strip-runtime  # 运行时剥离插件(用于静态提取模式)
│   └── @compiled/ts-transform-css-in-js      # TypeScript 编译器转换(实验性)
│
├── Bundler 集成
│   ├── @compiled/webpack-loader     # Webpack loader + 提取插件
│   ├── @compiled/vite-plugin        # Vite 插件
│   ├── @compiled/parcel-config      # Parcel v2 配置预设
│   ├── @compiled/parcel-optimizer   # Parcel v2 优化器
│   └── @compiled/parcel-transformer # Parcel v2 转换器
│
├── 社区集成
│   ├── @nitedani/vite-plugin-compiled-react  # 社区 Vite 插件(替代方案)
│   └── 各 bundler 的社区适配方案
│
├── Atlassian 内部使用
│   ├── @atlaskit/*(Atlaskit 设计系统全面基于 Compiled)
│   ├── Jira / Confluence / Bitbucket 等 Atlassian 产品
│   └── Forge Custom UI / Connect 应用
│
└── 工具链
    ├── ESLint 插件(no-css-map-scoped 规则)
    └── 自动化迁移脚本(从 styled-components / Emotion 迁移)

适用场景

1. Atlassian 生态应用

直接使用或依赖 @atlaskit/* 组件库的应用天然需要 Compiled 的编译支持。如果你的项目基于 Atlaskit,Compiled 是默认的样式方案。

2. 高性能 Web 应用

对首屏加载速度和运行时性能要求极高的应用(如 Jira、Confluence 等大型 SaaS 产品),Compiled 的编译时提取和原子化 CSS 可显著减小 JS 包体积、提升渲染性能。

3. 从 styled-components / Emotion 迁移到零运行时

团队希望消除 CSS-in-JS 运行时开销,但又不想完全放弃 JS 样式开发体验。Compiled 的 API 与 Emotion / styled-components 高度相似,是迁移路径较短的零运行时方案之一。

4. 大型设计系统

需要集中管理 Design Token 并在数百个组件中共享样式逻辑的场景。Compiled 的原子化策略使样式规则高度复用,Atlassian Design System 自身即基于此方案。

5. SSR / Streaming SSR 应用

编译时提取的 CSS 规则可在服务端直接输出,无需 ServerStyleSheet 等额外机制。天然兼容 React 18 的流式 SSR,避免运行时样式注入导致的首屏闪烁。

6. 需要 CSS 缓存优化的场景

当静态提取模式开启时,CSS 作为独立文件输出,可被浏览器原生缓存。对于重复访问的应用,样式文件可直接从缓存加载,无需等待 JS 执行。

7. 需要兼容 React 并发特性的应用

运行时 CSS-in-JS 方案与 React Concurrent Mode 存在已知兼容性问题。Compiled 的编译时方案不存在此问题,适合需要使用 useTransitionuseDeferredValue 等并发特性的应用。


开发与工程化

TypeScript 支持

Compiled 使用 TypeScript 编写,提供完整的类型定义。css prop 需要在 tsconfig.json 中配置 JSX 命名空间:

// types/compiled.d.ts
import '@compiled/react';
 
declare module '@compiled/react' {
  interface CSSProp {
    // 自定义扩展(如需要)
  }
}
// 组件中使用 - 自动类型推导
interface Props {
  primary?: boolean;
  size?: 'sm' | 'md' | 'lg';
}
 
function Badge({ primary, size = 'md' }: Props) {
  return (
    <span
      css={{
        display: 'inline-flex',
        alignItems: 'center',
        padding: size === 'sm' ? '2px 8px' : '4px 12px',
        borderRadius: 9999,
        fontSize: size === 'sm' ? 12 : 14,
        backgroundColor: primary ? '#0052cc' : '#dfe1e6',
        color: primary ? '#fff' : '#172b4d',
        fontWeight: 500,
      }}
    />
  );
}

主题方案

Compiled 支持多种主题实现方式:

// 方式一:Design Token + CSS 变量(推荐)
import { tokens } from '@atlaskit/tokens';
 
function ThemedCard() {
  return (
    <div
      css={{
        backgroundColor: tokens.colorBackgroundNeutralBold,
        color: tokens.colorText,
        border: `1px solid ${tokens.colorBorder}`,
      }}
    />
  );
}
 
// 方式二:Props 驱动的动态样式
interface ThemeProps {
  bgColor: string;
  textColor: string;
}
 
function ThemeBox({ bgColor, textColor }: ThemeProps) {
  return (
    <div css={{ backgroundColor: bgColor, color: textColor, padding: 16 }}>
      Themed content
    </div>
  );
}

测试

Compiled 组件可在 Jest / Vitest 中正常测试,需要配置 Babel 插件:

// jest.config.ts
export default {
  transform: {
    '^.+\\.[jt]sx?$': [
      'babel-jest',
      {
        plugins: ['@compiled/babel-plugin'],
      },
    ],
  },
};

ESLint 集成

Compiled 提供了 no-css-map-scoped ESLint 规则,用于控制实验性 cssMapScoped API 的使用(需团队明确审批后放开):

{
  "rules": {
    "@compiled/no-css-map-scoped": "error"
  }
}

Monorepo 工作流

Compiled 自身使用 pnpm + Turborepo 管理 Monorepo,支持在多包项目中独立编译和提取各包样式。@atlaskit/* 生态中的数百个包均基于 Compiled 构建。


性能与安全

性能优势

指标Compiled(编译时)styled-components(运行时)
运行时 JS 体积~2-3 KB(仅注入层)~12-15 KB(含序列化、哈希、注入逻辑)
CSS 生成时机构建时浏览器运行时
CSS 缓存可提取为独立文件,浏览器原生缓存不可独立缓存(运行时生成)
首屏渲染静态 CSS 可在 JS 加载前生效需等待 JS 执行后注入 &lt;style&gt;
样式计算零运行时计算每次渲染执行模板求值和序列化
CSS 产物体积原子化去重,体积增长趋缓随组件线性增长
React 18 兼容天然兼容并发渲染存在已知兼容性问题
FID / INP 影响极小有一定影响

构建性能

  • Babel 插件的编译开销可控,增量编译下不会显著影响开发体验。
  • Webpack loader 的 CompiledExtractPlugin 支持并行提取。
  • Vite 插件利用 Vite 的 ESM 原生模块加载,开发服务器启动速度快。
  • 从 v0.22.1 起,CSS 输出顺序的确定性保证了缓存一致性。

安全考量

  • XSS 防护:Compiled 在编译阶段处理样式,运行时不接受动态 CSS 字符串注入,攻击面较小。
  • CSS 注入:动态样式值通过 css prop 的对象属性传入,受 React 的内联样式安全边界约束,不存在原始 CSS 注入风险。
  • 依赖安全:样式中引用的 JS 模块在编译时求值,不会引入运行时外部依赖。
  • No SSRF:编译时方案不涉及网络请求,无 SSRF 风险。

技术对比

编译时 / 零运行时 CSS-in-JS 方案对比

特性CompiledLinariavanilla-extractPanda CSSStyleX
零运行时✅(极小注入层)✅ 完全零运行时✅ 完全零运行时✅ 完全零运行时✅ 完全零运行时
API 风格css prop + ClassNamestagged template literal.css.ts + style()tagged template + recipesstylex.create()
语法熟悉度⭐⭐⭐⭐⭐(与 Emotion 一致)⭐⭐⭐⭐⭐(与 SC/Emotion 一致)⭐⭐⭐(需学习新 API)⭐⭐⭐⭐⭐⭐⭐
原子化 CSS✅ 默认原子化@linaria/atomic❌ 需手动✅ 默认原子化✅ 默认原子化
动态样式✅ 对象属性条件✅ CSS 变量✅ CSS 变量 + 条件类✅ 条件样式✅ CSS 变量
框架绑定ReactReact(可扩展)框架无关React / Vue / SvelteReact
TypeScript 类型安全⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
Bundler 支持Webpack / Vite / Parcel / BabelWebpack / Vite / Rollup / esbuildWebpack / Vite / esbuild / RollupWebpack / Vite / PostCSSWebpack / Vite / esbuild
GitHub Stars~2.1k~12.3k~9.5k~5.5k~8k+
主要使用者Atlassian社区 + 企业Shopify / Canva 等社区Meta

Compiled vs styled-components

维度Compiledstyled-components
运行时极小注入层(~2-3 KB)~12-15 KB 运行时
CSS 输出原子化类 + 可选静态提取运行时 &lt;style&gt; 标签
APIcss prop / ClassNamesstyled 标签
动态样式对象属性条件 + CSS 变量JS 运行时求值
SSR天然支持ServerStyleSheet
React 18 并发天然兼容存在兼容性问题
维护状态活跃(2026 年持续更新)不再积极维护

最佳实践

1. 优先使用 css prop

css prop 是 Compiled 当前推荐的 API,styled API 已标记为弃用。css prop 更灵活,且与 React 组件组合模式天然契合:

// ✅ 推荐:使用 css prop
function Card({ children, elevated }: { children: React.ReactNode; elevated?: boolean }) {
  return (
    <div
      css={{
        padding: 16,
        borderRadius: 8,
        boxShadow: elevated
          ? '0 4px 12px rgba(0, 0, 0, 0.15)'
          : '0 1px 3px rgba(0, 0, 0, 0.1)',
      }}
    >
      {children}
    </div>
  );
}
 
// ❌ 避免:使用已弃用的 styled API
const Card = styled.div<{ elevated?: boolean }>`
  padding: 16px;
  border-radius: 8px;
  box-shadow: ${props =>
    props.elevated
      ? '0 4px 12px rgba(0, 0, 0, 0.15)'
      : '0 1px 3px rgba(0, 0, 0, 0.1)'};
`;

2. 封装可复用的样式组件

将复杂样式封装为独立组件,避免在业务组件中重复样式定义:

// ✅ 推荐:封装可复用组件
function PrimaryButton({ children, ...props }: React.ButtonHTMLAttributes<HTMLButtonElement>) {
  return (
    <button
      css={{
        padding: '8px 16px',
        borderRadius: 4,
        border: 'none',
        backgroundColor: '#0052cc',
        color: '#fff',
        fontWeight: 600,
        cursor: 'pointer',
        '&:hover': { backgroundColor: '#0065ff' },
        '&:active': { backgroundColor: '#0747a6' },
      }}
      {...props}
    >
      {children}
    </button>
  );
}

3. 使用 Design Token 而非硬编码值

// ✅ 推荐:使用 Design Token
import { tokens } from '@atlaskit/tokens';
 
<div css={{ color: tokens.colorText, padding: tokens.space200 }} />
 
// ❌ 避免:硬编码值
<div css={{ color: '#172b4d', padding: 8 }} />

4. 分离静态与动态样式

将可静态提取的样式与需要动态计算的部分分离,最大化编译时优化效果:

// ✅ 推荐:静态部分 + 动态 CSS 变量
function Progress({ percent }: { percent: number }) {
  return (
    <div css={{ width: '100%', height: 8, backgroundColor: '#dfe1e6', borderRadius: 4 }}>
      <div
        css={{
          height: '100%',
          backgroundColor: '#0052cc',
          borderRadius: 4,
          width: `${percent}%`,  // 动态值通过内联处理
        }}
      />
    </div>
  );
}

5. 启用静态提取模式

对性能要求极高的场景,使用 CompiledExtractPlugin 将 CSS 完全提取为独立文件:

// webpack.config.js
const CompiledExtractPlugin = require('@compiled/webpack-loader/extract-plugin');
 
module.exports = {
  module: {
    rules: [
      {
        test: /\.[jt]sx?$/,
        use: ['@compiled/webpack-loader'],
      },
    ],
  },
  plugins: [new CompiledExtractPlugin()],
};

6. 谨慎使用 cssMapScoped

cssMapScoped 是实验性 API,需团队审批后使用。适用于需要保持声明顺序或避免原子化副作用的场景:

// 仅在明确需要时使用 cssMapScoped
const variantStyles = cssMapScoped({
  danger: { color: 'red', borderColor: 'red' },
  success: { color: 'green', borderColor: 'green' },
});

技术局限与边界

1. 仅支持 React

Compiled 专门为 React 设计,不支持 Vue、Svelte、Angular 等其他框架。@compiled/react 是唯一的核心运行时包。

2. Bundler 插件依赖

Compiled 深度依赖 Babel 编译管线和特定 bundler 插件。项目使用非标准构建工具(如纯 SWC、Turbo 等)时,可能缺乏直接支持,需要额外的适配层。

3. Create React App 限制

使用 Create React App 的项目需要 eject 或使用 craco / react-app-rewired 等工具修改构建配置才能集成 Compiled。官方文档明确提到这一限制。

4. 动态样式限制

与 Linaria 的 CSS 变量方案不同,Compiled 的动态样式通过对象属性条件判断实现,编译时可能无法完全静态化所有动态路径。复杂的条件样式逻辑可能增加编译后产物的体积。

5. 运行时注入层

虽然开销极小,Compiled 并非完全零运行时——仍保留约 2-3 KB 的运行时注入层。在极端性能敏感场景下,需要使用静态提取模式(CompiledExtractPlugin)完全消除运行时。

6. 社区规模相对较小

相比 Linaria(12.3k stars)、vanilla-extract(9.5k stars)等方案,Compiled 的 GitHub 社区规模(2.1k stars)较小。社区文档、教程和第三方集成方案相对有限,主要依赖 Atlassian 官方维护。

7. 模块求值限制

样式中引用的 JS 模块必须可被编译时静态求值。依赖浏览器 API(windowdocument)或运行时环境的表达式无法在构建时处理。

8. 实验性 API 稳定性

cssMapScoped 等新 API 仍处于实验阶段,ESLint 默认将其标记为错误(no-css-map-scoped 规则),生产环境使用需团队明确审批。API 可能在未来版本中变更。

9. 样式优先级管理

原子化 CSS 的类名组合方式可能产生样式优先级冲突。Compiled 通过 style bucketing 机制缓解此问题,但在复杂选择器场景下仍需开发者注意 CSS 层叠顺序。


学习资源

官方文档

Atlassian 相关

技术博客与文章

社区讨论

视频与演讲

  • Atlassian 团队在 React 相关会议上的 CSS-in-JS 技术分享
  • YouTube 搜索 "Compiled CSS-in-JS Atlassian" 可查看社区教程与实战演示

2026 年现状

版本演进

2026 年上半年,Compiled 保持活跃迭代,主要版本更新包括:

  • v0.22.2(2026-06-30):修复 JSX 命名空间导入,兼容 React 18 和 React 19 类型定义。
  • v0.22.1(2026-06-22):使提取的 CSS 输出确定性(deterministic),保持 cssMapScoped 的源码顺序,跨所有 bundler 统一行为。
  • v0.22.0(2026-06-18):引入实验性 cssMapScoped API,支持非原子化 CSS 输出模式。
  • v0.21.x 系列:持续修复 bug、更新依赖、改进构建稳定性。

Atlassian 全面迁移

RFC-73 迁移已于 2025 年全面展开,所有 @atlaskit/* 包以 Major 版本方式切换到 Compiled。截至 2026 年,Atlassian 旗下 Jira、Confluence、Bitbucket 等核心产品的前端组件均基于 Compiled 构建。

行业趋势

2025—2026 年,CSS-in-JS 领域持续演变:

  1. 运行时方案衰退:styled-components 不再积极维护,Emotion 增长停滞。社区共识转向零运行时方案。
  2. 编译时方案崛起:Linaria、vanilla-extract、Panda CSS、StyleX 等零运行时方案获得越来越多采用。Compiled 作为 Atlassian 内部验证的方案,属于这一阵营的重要成员。
  3. Tailwind CSS 主导:Tailwind CSS 以约 1200 万周下载量占据绝对主导地位,但 Compiled 等编译时 CSS-in-JS 方案为需要 JS 样式开发体验的团队提供了替代选择。
  4. React Server Components 兼容:编译时方案天然兼容 RSC,在 Next.js App Router 等现代架构中具有优势。

维护状态

Compiled 由 Atlassian Labs 持续维护,GitHub 仓库活跃(2.1k stars,1,680+ 次提交,最后推送 2026-07-06)。作为 Atlassian 设计系统的基础样式方案,其维护优先级高且长期稳定。

npm 下载量说明

@compiled/react 周下载量约 54 万次,月下载量约 250 万次。这一数字主要由 @atlaskit/* 包的传递依赖贡献——每个使用 Atlaskit 组件的项目都会自动拉入 Compiled。直接使用 Compiled 的项目数量相对较少,主要集中在 Atlassian 生态和少数外部团队。


总结:Compiled 是 Atlassian 为自家大规模 SaaS 产品打造的编译时 CSS-in-JS 方案。它通过将样式在构建阶段提取为原子化静态 CSS,在保留熟悉开发体验的同时消除了运行时开销。虽然社区规模相对较小,但依托 Atlassian 设计系统的全面采用和持续投入,Compiled 在零运行时 CSS-in-JS 领域占有一席之地,尤其适合 Atlassian 生态应用和对性能有严格要求的大型 Web 应用。