首页
/ Material UI(@mui/material)快速上手指南:组件库定位、安装命令与仓库全景解析

Material UI(@mui/material)快速上手指南:组件库定位、安装命令与仓库全景解析

2026-09-07 19:18:43作者:牧宁李

Material UI 是当前仓库 material-ui 中最核心的发布包 @mui/material,它是一套实现 Google Material Design 规范的开源 React 组件库,官方定位为"全面完整、可开箱即用地投入生产环境"。本文以 packages/mui-material/README.md 为主线,结合该包源码与仓库内的示例工程,说明它的本质定位、准确安装方式、依赖关系、包内组件组织方式,以及围绕它的文档、示例、贡献与许可体系,帮助你在真实项目中正确引入并快速上手。

一、它是什么:实现 Material Design 的开源 React 组件库

按包级 README 与 packages/mui-material/package.json 中的 description,可以精确概括 @mui/material

Material UI 是一个开源 React 组件库,实现 Google 的 Material Design 设计语言;它内容全面(comprehensive),可以不加额外配置直接用于生产环境(production out of the box)。

  • 开源与许可:项目采用 MIT 协议,包可在 npm 上公开发布(publishConfig)。
  • 生态位置:它是 monorepo 中独立的 workspace 包,目录为 packages/mui-material,其 keywords 声明了 reactreact-componentmuimaterial-uimaterial design,与 README 的自我定位一致。
  • 免费使用:与仓库顶层 README 的表述一致,这是一个可免费用于生产的组件库。

因此,把它简单地理解为"一组 UI 组件"是不完整的:它同时是一个遵循成熟设计规范、拥有统一主题系统与样式方案的工程化组件体系,这正是 README 强调的 "Material Design" 与 "production out of the box" 的含义。

二、安装:README 给出的标准命令与背后的依赖设计

README 的 Installation 一节给出了唯一推荐的标准安装命令:

npm install @mui/material @emotion/react @emotion/styled

这一条命令同时安装了三个包,其中后两个并不是随便加上的,这与 package.json 的依赖设计 直接对应:

角色 依据
@mui/material 组件库本体 本包
@emotion/react Emotion 运行时支持(默认样式引擎) 声明为 peerDependency:^11.5.0(可选)
@emotion/styled 基于 Emotion 的 styled() API 支持 声明为 peerDependency:^11.3.0(可选)

peerDependencies 可以看到,React 生态兼容范围非常宽:reactreact-dom@types/react 均支持 ^17.0.0 || ^18.0.0 || ^19.0.0;而 @emotion/react@emotion/styled 以及 @mui/material-pigment-css 都被标记为可选 peer 依赖。也就是说:

  • Emotion 是 @mui/material默认样式引擎,因此官方命令要求一并安装;
  • 若你选择 Pigment CSS 等替代样式方案,Emotion 可以省略(这解释了为什么它们被标记为 optional)。

安装层面的其他事实还包括(均出自 packages/mui-material/package.json):

  • 运行环境要求 node >= 14.0.0
  • 包声明 sideEffects: false,便于打包器做 tree-shaking;
  • 包依赖 @mui/system(workspace 内部)作为底层样式与主题体系支撑。

提示:本仓库当前版本下,packages/mui-material/package.jsonversion 字段为 9.4.0,可作为版本号对应的代码依据;发布产物目录由 publishConfig.directory 指定为 build

三、包内到底有什么:从源码结构看组件版图

README 用 "comprehensive"(全面)来描述组件覆盖度。这一点在包源码 packages/mui-material/src 中得到直观印证——该目录下存在 150+ 个功能目录,绝大多数即一个完整组件或一组相关 API,例如:

AccordionAlertAppBarAutocompleteAvatarBadgeBottomNavigationBreadcrumbsButtonButtonGroupCardCheckboxChipDialogDrawerGridListMenuModalPaginationPaperPopoverPopperRadioRatingSelectSkeletonSliderSnackbarSpeedDialStackStepperSwitchTableTabsTextFieldToggleButtonTooltipTypography 等,同时包括 CssBaselineGlobalStylesThemeProvider(位于 styles)这类基础设施组件。

源码侧的组件导出采用"每个组件一个目录 + 目录内提供组件与类型"的组织方式。包主入口 src/index.js 逐项 export { default as Accordion } from './Accordion' 等汇总导出,并在 package.json 的 exports 字段 开放了细粒度子路径,例如:

  • @mui/material/Button./src/ButtonBase/…(按子路径按需引入);
  • @mui/material/styles@mui/material/colors@mui/material/locale@mui/material/transitions@mui/material/className@mui/material/useMediaQuery@mui/material/version 等;
  • 同时也支持 Pigment CSS 相关入口如 @mui/material/PigmentContainer@mui/material/PigmentGrid

需要区分的一点:Icon/SvgIcon 组件属于 @mui/material 包本身,但具体图标素材由仓库中另一个独立发布包 @mui/icons-materialpackages/mui-icons-material)提供,这与"Material UI 是组件库、图标另装"的常见心智一致。

四、跑通一个最小示例:以仓库内置 Vite 工程为参照

仓库在 examples 目录下提供了多个"开箱即用"示例工程,其中 examples/material-ui-vite 是最小的 Vite + React 组合,其 package.json 只声明了 @mui/material@emotion/react@emotion/styledreactreact-dom 五个运行时依赖——和 README 的安装命令完全吻合。

本地运行方式(依据该示例 README):

cd examples/material-ui-vite
npm install
npm run dev

该示例的启动入口 src/main.jsx 展示了真实项目的"最小骨架"——主题 + 全局样式基线:

import * as React from 'react';
import * as ReactDOM from 'react-dom/client';
import CssBaseline from '@mui/material/CssBaseline';
import { ThemeProvider } from '@mui/material/styles';
import App from './App';
import theme from './theme';

const rootElement = document.getElementById('root');
const root = ReactDOM.createRoot(rootElement);

root.render(
  <React.StrictMode>
    <ThemeProvider theme={theme}>
      {/* CssBaseline 提供一致、简洁的基础样式 */}
      <CssBaseline />
      <App />
    </ThemeProvider>
  </React.StrictMode>,
);

页面组件 src/App.jsx 演示了最常用的几个组件如何组合(Container 布局容器、Box 弹性布局、Typography 排版):

import * as React from 'react';
import Container from '@mui/material/Container';
import Typography from '@mui/material/Typography';
import Box from '@mui/material/Box';

export default function App() {
  return (
    <Container maxWidth="sm">
      <Box sx={{ my: 4 }}>
        <Typography variant="h4" component="h1" sx={{ mb: 2 }}>
          Material UI Vite.js example
        </Typography>
      </Box>
    </Container>
  );
}

主题定义 src/theme.js 则展示如何用 createTheme 定制调色板(并开启 CSS 变量模式),这也是官方文档推荐的"品牌化"入口:

import { createTheme } from '@mui/material/styles';
import { red } from '@mui/material/colors';

const theme = createTheme({
  cssVariables: true,
  palette: {
    primary: { main: '#556cd6' },
    secondary: { main: '#19857b' },
    error: { main: red.A400 },
  },
});

export default theme;

面向不同构建栈的示例矩阵

README 提到官方文档提供了一组 "example projects"。当前仓库 examples 下实际就内置了覆盖主流技术栈的示例,可作为选型参照:

示例目录 技术栈
material-ui-vite / material-ui-vite-ts Vite(JS/TS)
material-ui-nextjs / material-ui-nextjs-ts Next.js App Router(JS/TS)
material-ui-nextjs-pages-router-ts Next.js Pages Router(JS/TS)
material-ui-express-ssr Express 服务端渲染
material-ui-gatsby Gatsby
material-ui-remix-ts Remix(TS)
material-ui-react-router-ts React Router(TS)
material-ui-preact Preact 适配
material-ui-pigment-css-nextjs-ts-vite-ts Pigment CSS 样式方案
material-ui-vite-tailwind-ts Tailwind CSS 共存方案
material-ui-via-cdn 不经构建、HTML + CDN 直引

五、文档、提问与示例的配套体系

README 用多个小节明确了"用哪里查、去哪里问、看什么示例",这是围绕 @mui/material 展开的完整支持体系:

  • 完整文档:README 指向官网全量文档(该仓库中文档源文件位于 docs/data/material,可按组件、定制化、系统、迁移等主题查阅原始 Markdown,例如组件页列表见 docs/data/material/pages.ts)。
  • 提问渠道:README 明确建议使用类 how-to 问题(不改代码、不涉及 bug 上报)优先发到 Stack Overflow,并使用 material-ui 标签便于社区检索,而非直接开 GitHub issue;这有助于维护 issue 列表的质量。
  • 示例集合:即上文第四节所述的 examples 目录,可对照使用。

六、参与贡献与开发自检流程

针对开发者,README 引导读者阅读仓库级 contributing guide,该文件描述了开发流程、如何提交 bug 修复与功能改进、如何构建与测试变更。结合包自身 scripts 可看到推荐的本地验证闭环:

pnpm build        # 构建包产物(--tsgo --flat)
pnpm test         # 运行本包相关单元测试
pnpm typescript   # 类型检查(tsgo -p tsconfig.json)

此外该包还有类型模块增强测试(typescript:module-augmentation)与面向发布产物的 attw(Are The Types Wrong)检查等工程化手段,保证了"开箱即用"的可靠性承诺在发布层面被持续校验。

七、许可、安全与版本演进信息

  • License:本包沿用仓库根目录的 MIT license,README 中即为此处链接,任何使用与再分发均按 MIT 条款执行。
  • Security:针对支持版本范围与安全漏洞上报方式,README 指引查阅仓库根目录的 SECURITY.md
  • 版本演进与路线图:README 提及的 Changelog 与 Roadmap 记录了每个版本的变更(仓库内还保留了从 CHANGELOG.old.mdCHANGELOG.md 的历史演进记录)。对新用户而言,建议先确认所用 React 版本落在 17/18/19 的 peer 范围内,再对照示例工程接入。

小结

  • 安装层面,牢记官方标准命令 npm install @mui/material @emotion/react @emotion/styled,其中 Emotion 两个包对应默认样式引擎的 peer 依赖;
  • 能力层面,@mui/material 是覆盖 100+ 组件的完整 Material Design 组件体系,入口与子路径导出设计使其既适合整体引入、也适合按需引用;
  • 上手层面,仓库内置 examples/material-ui-vite 等多个最小可运行工程,配合 docs/data/material 的文档源、根目录 CONTRIBUTING.md 的贡献流程与 LICENSE 的 MIT 许可,即可完成从"认识组件库"到"生产使用与二次开发"的完整闭环。
登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.13 K
2.75 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
857
1.35 K
docsdocs
暂无描述
Markdown
897
5.8 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
529
593
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
916
1.83 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.58 K
1.01 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.35 K
1.46 K
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
1.01 K
515
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
547
388