🎨 小程序多色 SVG 图标解决方案
支持 微信 · QQ · 支付宝 · 快手 · 抖音 · 百度 · 小红书 · 京东 等 8 大小程序平台
多色图标示例小程序,请使用微信扫码预览 ↓
- 🎨 完整色彩支持 — 单色、双色、多色图标完美渲染
- 🔄 运行时颜色控制 — 通过属性动态修改
fill/stroke颜色 - 📦 零依赖运行 — Data URI 方案,无需额外资源加载
- 🌐 8 大平台适配 — 微信 / QQ / 支付宝 / 快手 / 抖音 / 百度 / 小红书 / 京东
- 🏷️ 多品牌支持 — 支持多品牌图标源(如 TDesign),易扩展
- ✂️ 按需裁剪 — 内置 CLI 工具,移除未使用图标,体积减少 99%+
| 包名 | 平台 | 备注 |
|---|---|---|
| @mp-svg-icons/wechat | 微信小程序 | 基准平台 |
| @mp-svg-icons/alipay | 支付宝小程序 | 独立 API 风格 |
| @mp-svg-icons/kuaishou | 快手小程序 | |
| @mp-svg-icons/douyin | 抖音小程序 | 需额外处理双引号 |
| @mp-svg-icons/baidu | 百度小程序 | 需额外处理双引号 |
| @mp-svg-icons/xiaohongshu | 小红书小程序 | |
| @mp-svg-icons/jd | 京东小程序 | |
| @mp-svg-icons/utils | 工具集 | 图标裁剪 CLI |
💡 QQ 小程序可直接使用微信小程序版本。
# 微信小程序
npm install @mp-svg-icons/wechat
# 支付宝小程序
npm install @mp-svg-icons/alipay
# 其他平台类似...在页面或组件的 *.json 文件中注册:
{
"usingComponents": {
"t-icon": "@mp-svg-icons/wechat/icon"
}
}<t-icon name="add" size="{{48}}" />
<t-icon name="send" size="{{32}}" stroke-color="#0766ff" fill-color="#e70d0d" />
<t-icon name="robot-2" size="{{32}}" stroke-color="{{['#0052D9', '#e40a23']}}" fill-color="{{['#e1e50f', '#632bc9']}}" />| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| name | String | — | 图标名称(必填) |
| size | Number / String | 24 | 图标尺寸(px) |
| strokeColor | String / String[] | - | 描边颜色,支持 HEX / rgb() / rgba() |
| fillColor | String / String[] | - | 填充颜色,支持 HEX / rgb() / rgba() |
| strokeWidth | Number | 2 | 描边宽度 |
| brand | String | tdesign | 品牌名称 |
💡 颜色值内部统一转为
rgb()格式后注入 Data URI,HEX 的#无需手动转义。
图标组件包含全量图标映射(~1MB),建议使用裁剪工具按需引入,最高可节省 99% 体积。
npm install @mp-svg-icons/utils -Dnpx mp-svg-icons-clear --pkg-dir <path> [--scan <dirs...>] [--icons <names>] [--dry-run]| 参数 | 必填 | 说明 |
|---|---|---|
--pkg-dir |
✅ | 图标 npm 包目录路径 |
--scan |
- | 要扫描的项目目录(支持多个) |
--icons |
- | 逗号分隔的图标名称列表 |
--dry-run |
- | 预览模式,不实际执行 |
# 扫描项目,自动识别已使用的图标
npx mp-svg-icons-clear \
--pkg-dir ./miniprogram_npm/@mp-svg-icons/wechat \
--scan ./pages ./components
# 扫描 + 补充动态图标
npx mp-svg-icons-clear \
--pkg-dir ./miniprogram_npm/@mp-svg-icons/wechat \
--scan ./pages ./components \
--icons loading,play
# 仅保留指定图标
npx mp-svg-icons-clear \
--pkg-dir ./miniprogram_npm/@mp-svg-icons/wechat \
--icons add,close,check-circle
# 预览模式
npx mp-svg-icons-clear \
--pkg-dir ./miniprogram_npm/@mp-svg-icons/wechat \
--scan ./pages ./components \
--dry-run| 场景 | icons.js 大小 | 图标数量 | 节省比例 |
|---|---|---|---|
| 裁剪前 | ~1 MB | 2347 个 | — |
| 裁剪后(10 个图标) | ~4.3 KB | 10 个 | 99.6% |
| 裁剪后(50 个图标) | ~21.3 KB | 50 个 | 97.9% |
| 裁剪后(100 个图标) | ~42.6 KB | 100 个 | 95.7% |
核心技术路线 — 从 SVG 源文件到小程序 image 组件渲染的完整链路
miniprogram-svg-icons/
├── resources/ # SVG 图标源文件(按品牌组织)
│ └── tdesign/ # TDesign 图标(2347 个)
├── scripts/ # 构建脚本
│ ├── generate.ts # 生成组件到 packages/
│ ├── build.ts # 打包压缩到 dist/
│ ├── release.ts # 交互式发布工具
│ ├── shared.ts # 公共模块(平台配置、模板生成)
│ ├── template/ # 组件模板
│ │ ├── wechat.js.tpl # 微信风格 JS 模板
│ │ ├── alipay.js.tpl # 支付宝风格 JS 模板
│ │ ├── icon.tpl # 视图模板
│ │ └── icon.json.tpl # 组件配置模板
│ └── utils/
│ ├── svgTotemplate.ts # SVG 解析引擎
│ └── const.ts # 特殊图标列表
├── packages/ # 源码产物(开发用)
│ ├── wechat/ # 微信小程序组件
│ ├── alipay/ # 支付宝小程序组件
│ ├── kuaishou/ # 快手小程序组件
│ ├── douyin/ # 抖音小程序组件
│ ├── baidu/ # 百度小程序组件
│ ├── xiaohongshu/ # 小红书小程序组件
│ ├── jd/ # 京东小程序组件
│ └── utils/ # 工具集(含裁剪 CLI)
├── dist/ # 发布产物(压缩)
├── package.json # Monorepo 根配置
└── pnpm-workspace.yaml # pnpm 工作区配置
# 克隆项目
git clone https://github.com/anlyyao/miniprogram-svg-icons.git
cd miniprogram-svg-icons
# 安装依赖
pnpm install
打开微信开发者工具,导入 examples/example-svg-icon 文件夹
在微信开发者工具中,点击菜单栏:工具 → 构建 npm,即可预览效果。
- 在
resources/{brand}/下放置 SVG 图标文件(文件名为图标名) - 确保 SVG 中使用语义化
id标识颜色区域(fill1、fill2、stroke1、stroke2) - 运行
pnpm run generate即可自动识别并生成
- 步骤 1 — 在
scripts/shared.ts的PLATFORMS中添加配置:
newplatform: {
id: 'newplatform',
label: '新平台小程序',
templateExt: '.nxml',
styleExt: '.ncss',
componentStyle: 'wechat', // 或 'alipay'
escapeQuotes: false,
},- 步骤 2 — 在根
package.json添加构建命令:
{
"generate:newplatform": "tsx scripts/generate.ts newplatform",
"build:newplatform": "tsx scripts/build.ts newplatform"
}- 步骤 3 — 创建包目录
packages/newplatform/,添加package.json并在pnpm-workspace.yaml中注册。
欢迎贡献代码!请阅读 贡献指南 了解如何参与项目开发。
如果这个项目对你有帮助,请给个 ⭐️ 支持一下!