Carbon Design System:IBM开源设计系统全面解析
【免费下载链接】carbon A design system built by IBM 项目地址: https://gitcode.com/GitHub_Trending/carbo/carbon
Carbon Design System是IBM开发的企业级开源设计系统,为构建高质量应用提供完整的设计语言、组件库和开发工具。本文全面解析其架构设计、核心包结构、开发环境搭建及最佳实践,涵盖模块化架构、多框架支持、设计令牌系统、可访问性标准和Monorepo管理模式等关键技术特性。
Carbon设计系统概述与核心价值
Carbon Design System是IBM开发的开源设计系统,它为构建企业级应用提供了一套完整的设计语言、组件库和开发工具。作为IBM Design Language的代码实现,Carbon不仅仅是一个UI组件库,更是一个全面的设计生态系统,旨在提升产品的一致性、可访问性和开发效率。
设计系统的架构与组成
Carbon设计系统采用模块化的架构设计,通过多个独立的包来提供不同的功能模块:
核心设计原则
Carbon设计系统建立在四个核心设计原则之上,这些原则指导着整个系统的设计和开发:
| 设计原则 | 描述 | 实现方式 |
|---|---|---|
| 一致性 | 确保所有IBM产品具有统一的用户体验 | 标准化的设计令牌、组件API和交互模式 |
| 可访问性 | 产品对所有用户都可用,包括残障人士 | WCAG 2.1 AA合规、键盘导航、屏幕阅读器支持 |
| 模块化 | 组件可以独立使用和组合 | 基于包的架构、清晰的依赖管理 |
| 可扩展性 | 系统能够适应不同的业务需求 | 主题定制、设计令牌系统、CSS自定义属性 |
设计令牌系统
Carbon采用先进的设计令牌系统来管理设计决策,这些令牌在不同的平台和技术栈之间保持一致:
// Carbon颜色系统示例
import { blue, blueHover, gray, white } from '@carbon/colors';
// 设计令牌使用示例
const theme = {
primary: blue[60], // #0f62fe
primaryHover: blueHover[60], // #0050e6
background: white,
text: gray[100],
border: gray[30]
};
设计令牌系统提供了从颜色、间距、排版到动效的完整设计变量,确保设计一致性贯穿整个产品生命周期。
多框架支持策略
Carbon设计系统采用"一次设计,多处实现"的策略,为不同的前端框架提供原生支持:
这种多框架支持策略确保了不同技术栈的项目都能获得一致的Carbon体验,同时保持了核心设计语言的一致性。
企业级可访问性标准
Carbon设计系统将可访问性作为核心价值,实现了IBM严格的可访问性标准:
// 可访问性特性示例
import { Button } from '@carbon/react';
function AccessibleComponent() {
return (
<Button
kind="primary"
aria-label="提交表单"
tabIndex={0}
onKeyPress={(e) => {
if (e.key === 'Enter' || e.key === ' ') {
handleSubmit();
}
}}
>
提交
</Button>
);
}
系统遵循WCAG 2.1 AA标准,提供完整的键盘导航、屏幕阅读器支持和足够的颜色对比度,确保所有用户都能平等地使用基于Carbon构建的应用。
开发体验优化
Carbon提供了完整的开发工具链来提升开发效率和代码质量:
| 工具类型 | 功能描述 | 受益点 |
|---|---|---|
| ESLint配置 | 代码质量和一致性检查 | 统一的代码风格,减少错误 |
| Stylelint配置 | CSS/SCSS代码规范 | 样式一致性,避免常见错误 |
| Prettier配置 | 代码自动格式化 | 减少格式争议,提升协作效率 |
| Jest配置 | 单元测试框架配置 | 可靠的测试环境,确保组件质量 |
开源生态与社区贡献
作为开源项目,Carbon拥有活跃的社区贡献机制:
项目采用Apache 2.0许可证,鼓励社区参与和贡献。通过完善的贡献指南、代码审查流程和自动化测试,确保代码质量的同时也促进了社区的健康发展。
Carbon设计系统的核心价值在于它为企业级应用开发提供了一套完整、可靠且经过实践检验的设计和开发解决方案。通过统一的设计语言、严格的可访问性标准和多框架支持,Carbon帮助团队更快地构建高质量、一致且包容的数字产品。
项目架构与Monorepo管理模式
Carbon Design System采用现代化的Monorepo架构,通过Lerna工具实现多包管理,这种架构设计为大规模设计系统的开发、维护和发布提供了强有力的技术支撑。整个项目结构清晰,模块划分合理,充分体现了IBM在工程实践上的深厚积累。
Monorepo架构概览
Carbon项目采用典型的Monorepo模式,将所有相关的包(packages)集中在一个代码仓库中管理。这种架构带来了诸多优势:
包管理工具链
项目使用Lerna作为主要的Monorepo管理工具,配合Yarn Workspaces实现依赖管理:
| 工具 | 版本 | 主要功能 |
|---|---|---|
| Lerna | ^8.0.0 | 多包版本管理、发布 |
| Yarn | 4.9.2 | 依赖管理、Workspaces |
| TypeScript | - | 类型系统支持 |
| Jest | ^30.0.5 | 测试框架 |
工作区配置
项目的package.json中定义了清晰的工作区配置:
{
"workspaces": [
"actions/*",
"config/*",
"examples/*",
"packages/*",
"www"
]
}
这种配置允许在不同目录间共享依赖,同时保持各自的独立性。
包依赖关系
Carbon的包之间存在复杂的依赖关系,形成了清晰的层级结构:
构建和发布流程
Lerna配置(lerna.json)定义了版本管理策略:
{
"version": "independent",
"npmClient": "yarn",
"ignoreChanges": [
"actions/**",
"**/__fixtures__/**",
"**/__tests__/**",
"**/docs/**",
"**/e2e/**",
"**/examples/**",
"**/*.md"
]
}
采用independent版本策略,允许每个包独立版本管理,这对于设计系统中不同模块的迭代非常有利。
开发工具集成
项目集成了完整的开发工具链:
| 工具类别 | 具体工具 | 用途 |
|---|---|---|
| 代码质量 | ESLint, Prettier | 代码规范和格式化 |
| 测试 | Jest, Playwright | 单元测试和E2E测试 |
| 样式 | Stylelint | SCSS代码检查 |
| 提交规范 | Commitlint | 提交消息规范 |
| 预提交检查 | Husky, lint-staged | 提交前自动检查 |
脚本命令体系
项目提供了丰富的脚本命令来支持开发工作流:
# 构建所有包
yarn build
# 运行测试
yarn test
# 代码格式化
yarn format
# 代码检查
yarn lint
# 同步跨工作区文件
yarn sync
模块化设计优势
Carbon的Monorepo架构带来了显著的开发优势:
- 代码共享:基础工具和配置可以在所有包间共享
- 版本一致性:相关包可以同时发布,确保版本兼容性
- 开发效率:单一仓库简化了依赖管理和代码导航
- 测试便利:可以轻松运行跨包的集成测试
- 重构安全:原子提交确保相关更改同时生效
配置管理策略
项目采用集中式的配置管理:
config/
├── babel-preset-carbon/
├── browserslist-config-carbon/
├── eslint-config-carbon/
├── jest-config-carbon/
├── prettier-config-carbon/
├── stylelint-config-carbon/
└── typescript-config-carbon/
每个配置包都遵循统一的命名规范,便于在各个子包中引用。
跨包同步机制
项目开发了专门的CLI工具(@carbon/cli)来处理跨包的文件同步:
// packages/cli/src/sync.js
module.exports = async function sync(target) {
// 实现文件同步逻辑
console.log(`Syncing files to ${target}...`);
};
这种机制确保了公共文件(如LICENSE、配置文件等)在所有包中的一致性。
Carbon Design System的Monorepo架构不仅提供了技术上的便利,更重要的是为大规模协作开发奠定了坚实的基础。通过精细的模块划分、完善的工具链集成和严格的开发规范,确保了整个设计系统的高质量和高可维护性。
核心包结构与功能模块划分
Carbon Design System 采用模块化的架构设计,将整个设计系统拆分为多个独立的包,每个包都专注于特定的功能领域。这种架构设计使得开发者可以根据项目需求选择性地引入所需的功能模块,同时也便于系统的维护和扩展。
核心包架构概览
Carbon 的核心包架构可以分为以下几个主要类别:
主要功能包详解
1. 组件包(Component Packages)
@carbon/react - React 组件库 这是 Carbon 最主要的组件包,提供了完整的 React 组件集合。该包包含了所有基于 React 的 UI 组件,如按钮、表单控件、数据表格等。
// 使用示例
import { Button, TextInput, DataTable } from '@carbon/react';
function App() {
return (
<div>
<Button>Click me</Button>
<TextInput placeholder="Enter text" />
<DataTable headers={headers} rows={rows} />
</div>
);
}
@carbon/web-components - Web Components 包 提供基于 Web Components 标准的组件实现,可以在任何前端框架或原生 JavaScript 项目中使用。
@carbon/components - 原生 JavaScript 组件 提供不依赖任何框架的纯 JavaScript 组件实现。
2. 样式包(Styling Packages)
@carbon/styles - 核心样式库 这是 Carbon 设计系统的样式核心,包含了所有的 Sass 样式文件和编译后的 CSS。
// 引入 Carbon 样式
@use '@carbon/styles/scss/colors' as *;
@use '@carbon/styles/scss/type' as *;
@use '@carbon/styles/scss/components/button' as *;
.button {
@include button;
background-color: $interactive-01;
}
@carbon/themes - 主题系统 提供主题管理和颜色 token 系统,支持浅色和深色主题。
// 主题配置示例
import { white, g10, g90, g100 } from '@carbon/themes';
const customTheme = {
...white,
interactive01: '#0072c3',
text01: '#161616'
};
@carbon/grid - 网格系统 提供基于 Flexbox 的 16 列响应式网格系统。
3. 基础元素包(Foundation Packages)
@carbon/colors - 颜色系统 提供 IBM Design Language 的颜色 palette 和颜色工具函数。
import { colors } from '@carbon/colors';
// 使用颜色
const primaryColor = colors.blue60;
const successColor = colors.green50;
// 颜色工具函数
import { rgba } from '@carbon/colors';
const semiTransparent = rgba(colors.blue60, 0.5);
@carbon/layout - 布局系统 提供间距、尺寸和布局相关的工具和 token。
@use '@carbon/layout';
.container {
padding: layout.$spacing-05;
margin-bottom: layout.$spacing-07;
max-width: layout.rem(1200px);
}
@carbon/type - 排版系统 基于 IBM Plex 字体的排版系统和类型比例。
@carbon/motion - 动效系统 提供产品级和表现级的动效曲线和持续时间。
4. 工具包(Utility Packages)
@carbon/utilities - 工具函数 提供通用的 JavaScript 工具函数。
@carbon/test-utils - 测试工具 为组件测试提供工具和辅助函数。
@carbon/feature-flags - 功能标志 用于管理实验性功能和 A/B 测试的功能标志系统。
5. 图标包(Icon Packages)
@carbon/icons - SVG 图标 提供原始的 SVG 图标资源。
@carbon/icons-react - React 图标组件 将 SVG 图标封装为 React 组件。
import { Add32, Search32 } from '@carbon/icons-react';
function IconExample() {
return (
<div>
<Add32 />
<Search32 />
</div>
);
}
@carbon/pictograms - 象形图 提供更复杂的象形图示。
包依赖关系分析
Carbon 包之间的依赖关系呈现出清晰的层次结构:
| 包名称 | 依赖关系 | 说明 |
|---|---|---|
| @carbon/react | @carbon/styles, @carbon/icons-react | React 组件依赖样式和图标 |
| @carbon/styles | @carbon/colors, @carbon/grid, @carbon/type | 样式依赖基础设计元素 |
| @carbon/colors | 无 | 基础颜色系统 |
| @carbon/icons-react | @carbon/icons | React 图标依赖原始图标 |
模块化设计优势
Carbon 的模块化架构带来了多个显著优势:
- 按需引入:开发者可以只安装需要的包,减少 bundle 大小
- 独立更新:每个包可以独立版本管理和更新
- 框架无关:提供多种技术栈的实现选择
- 易于扩展:可以基于现有包构建自定义组件
- 测试隔离:每个包可以独立测试和维护
典型使用场景
完整应用开发:
npm install @carbon/react @carbon/styles
仅使用样式:
npm install @carbon/styles
自定义主题:
npm install @carbon/themes @carbon/colors
图标使用:
npm install @carbon/icons-react
这种精细的包划分使得 Carbon Design System 既能够为大型企业应用提供完整的解决方案,也能够为轻量级项目提供必要的设计元素,真正实现了设计系统的灵活性和可扩展性。
开发环境搭建与快速入门指南
Carbon Design System作为IBM开源的企业级设计系统,提供了完整的React组件库和样式体系。本文将详细介绍如何快速搭建开发环境并开始使用Carbon组件。
环境要求与前置准备
在开始使用Carbon之前,确保您的开发环境满足以下基本要求:
| 技术栈 | 版本要求 | 说明 |
|---|---|---|
| Node.js | 16.x 或更高 | 推荐使用LTS版本 |
| npm | 7.x 或更高 | 或使用yarn、pnpm等包管理器 |
| React | 16.8+ | 支持React Hooks |
| Sass | 1.33.0+ | 必需用于样式编译 |
项目初始化与依赖安装
根据您的项目框架选择相应的安装方式:
使用Vite创建新项目
# 创建新的Vite项目
npm create vite@latest my-carbon-app -- --template react
cd my-carbon-app
# 安装Carbon React依赖
npm install @carbon/react react react-dom
npm install -D sass @vitejs/plugin-react
使用Next.js创建新项目
# 创建新的Next.js项目
npx create-next-app@latest my-carbon-app
cd my-carbon-app
# 安装Carbon React依赖
npm install @carbon/react
npm install -D sass
在现有项目中安装
如果要在现有React项目中集成Carbon,只需执行:
npm install @carbon/react
npm install -D sass
配置Sass编译器
Carbon使用Sass模块系统,需要正确配置Sass编译器。以下是常见框架的配置示例:
Vite配置 (vite.config.js)
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
export default defineConfig({
plugins: [react()],
css: {
preprocessorOptions: {
scss: {
api: 'modern-compiler' // 使用现代Sass编译器
}
}
}
})
Next.js配置 (next.config.js)
/** @type {import('next').NextConfig} */
const nextConfig = {
sassOptions: {
implementation: require('sass')
}
}
module.exports = nextConfig
基础样式引入
在项目的入口文件中引入Carbon的基础样式:
// styles/index.scss 或 App.scss
@use '@carbon/react';
// 或者按需引入特定组件样式
@use '@carbon/react/scss/components/button';
@use '@carbon/react/scss/components/text-input';
@use '@carbon/react/scss/type';
@use '@carbon/react/scss/grid';
组件使用示例
以下是一个完整的Carbon组件使用示例:
import React from 'react';
import {
Button,
TextInput,
Grid,
Column,
Theme
} from '@carbon/react';
import { Add } from '@carbon/react/icons';
function App() {
return (
<Theme theme="g100">
<Grid>
<Column lg={8} md={4} sm={2}>
<h1>Carbon Design System 示例</h1>
<TextInput
id="email-input"
labelText="邮箱地址"
placeholder="请输入邮箱"
type="email"
/>
<Button
renderIcon={Add}
kind="primary"
onClick={() => console.log('按钮点击')}
>
添加项目
</Button>
</Column>
</Grid>
</Theme>
);
}
export default App;
开发工作流程
Carbon项目的典型开发流程如下:
TypeScript支持
虽然Carbon正在逐步完善TypeScript支持,但目前可以通过以下配置在TypeScript项目中使用:
// tsconfig.json
{
"compilerOptions": {
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true
}
}
常见问题解决
Sass编译错误
如果遇到Sass编译错误,检查是否安装了正确的Sass版本:
npm install -D sass@latest
样式未生效
确保在入口文件中正确引入了Carbon样式:
// main.jsx 或 index.js
import './index.scss';
图标不显示
图标组件需要单独引入:
import { Add } from '@carbon/react/icons';
// 使用图标
<Add size={20} />
开发工具推荐
为了获得更好的开发体验,推荐安装以下开发工具:
- Carbon Design System插件 - 用于Figma设计稿查看
- React Developer Tools - React组件调试
- Sass编译器插件 - 实时样式编译
项目结构建议
一个典型的Carbon项目结构如下:
src/
├── components/ # 自定义组件
├── styles/ # 样式文件
│ ├── _variables.scss # 自定义变量
│ └── index.scss # 主样式文件
├── pages/ # 页面组件
└── utils/ # 工具函数
通过以上步骤,您已经成功搭建了Carbon Design System的开发环境,可以开始构建企业级的React应用程序了。Carbon提供了丰富的组件和设计规范,能够帮助您快速构建一致、专业的用户界面。
总结
Carbon Design System作为IBM开源的企业级设计系统,通过模块化架构、严格的设计规范和完整的工具链,为开发者提供了构建一致、可访问且高质量企业应用的全面解决方案。其核心价值在于统一的设计语言、多框架支持策略、企业级可访问性标准以及现代化的Monorepo管理模式,帮助团队提升开发效率并确保产品体验的一致性。
【免费下载链接】carbon A design system built by IBM 项目地址: https://gitcode.com/GitHub_Trending/carbo/carbon
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



