@faire/mjml-react

中文文档
4.0.1发布于 2026/06/01MITTypeScriptESM + CJS构建来源已验证近 30 天下载 59.4万

执行组件库生成苍蝇上的 HTML 电子邮件

中文使用文档
文档目录9 节
  1. 工程科的通知@ faire
  2. 今天以 V2 开始 - 100% 向后兼容 https://github.com/wix-incubator/mjml…
  3. V3有什么新鲜事??
  4. 开始
  5. 选项
  6. 扩展
  7. 用户
  8. 限制
  9. 示例项目

跳转到开始

工程科的通知@ faire

你好,Mjml社区,我们在Faire很兴奋地宣布,我们将接管维持开源的Mjml反应项目!

在过去的一年里,费尔广泛使用了mjml反应. 这个软件包使我们能够融入mjml的所有好处,而不必要求我们的开发者在从网络转移到电子邮件时学习一个新的dev环境. 因此,我们大大减少了创建电子邮件的开发努力,同时将电子邮件将问题传播到最低限度.

我们从Mjml反应中看到了很多好处, 这就是为什么我们要继续维持这个一揽子计划,用我们自己的一些新想法来改进它! 现在,你可以检查我们 在 @faire/mjml-反应我们希望这能在多数情况下成为Mjml反应的倒置替代,但如果有任何问题,我们急于与你合作。 不要犹豫 MJML Slack集团 或归档 a 有问题从那里,你可以期待新的改进即将到来.

当然,我们想向维克斯团队 表示热烈的感谢, 感谢它建设并维持了这个项目.

mjml -反应.. GitHub license npm version PRs Welcome

• 妇女

有个很棒的图书馆 米姆尔 上面写着github repo https://github.com/mjmlio/mjml 页面存档备份,存于互联网档案馆。 。 。 .

MJML 是一种由 邮件喷射。 。 。 . 因此,为了在苍蝇上创建电子邮件,我们创建了图书馆 React 组件.

今天以 V2 开始 - 100% 向后兼容 https://github.com/wix-incubator/mjml-resact/ (中文(中国大陆) )

V2是用于 https://github.com/wix-incubator/mjml-resact/ (中文(中国大陆) ),并获得一些额外的支持。 如果缺少组件,你可以做公关反对 https://github.com/Faire/mjml-resact/tree/main-v2 页面存档备份,存于互联网档案馆 或者提出一个问题 我们试着解开你的封口.

V3有什么新鲜事??

我们希望Mjml反应的V3能够相当容易地从V2迁移到.

  • 字典:mjml-反应现在用字典来写,有助于确保正确的道具传递到mjml组件
  • 完整的mjml组件支持:我们使用自动脚本来拉出mjml组件并创建相应的mjml-反应组件. 这意味着我们得到了所有组件的全力支持 最新的mjml版本
  • 其他小的更改:在 mjml-反应中为 mjml 结尾标记添加危险Set InnerHTML , 更新测试, 在代码中添加 docuenation

开始

  1. 根据您的渲染环境在 mjml 或 mjml- 浏览器中选择渲染 。 还包括所需额外依赖.

节点 :

npm install @faire/mjml-react mjml react react-dom

浏览器 :

npm install @faire/mjml-react mjml-browser react react-dom
  1. 连接您的渲染函数( uncomment) mjml 或者说 mjml-browser(中文(简体) )
import { renderToMjml } from "@faire/mjml-react/utils/renderToMjml";
// import mjml2html from "mjml";
// import mjml2html from "mjml-browser";
import { MJMLParseResults } from "mjml-core";
import React from "react";

export function renderReactToMjml(
  email: React.ReactElement
): Promise<MJMLParseResults> {
  return mjml2html(renderToMjml(email));
}
  1. 然后写一个像专业的代码:
import {
  Mjml,
  MjmlHead,
  MjmlTitle,
  MjmlPreview,
  MjmlBody,
  MjmlSection,
  MjmlColumn,
  MjmlButton,
  MjmlImage,
} from "@faire/mjml-react";

import { renderReactToMjml } from "./renderReactToMjml";

const { html, errors } = await renderReactToMjml(
  <Mjml>
    <MjmlHead>
      <MjmlTitle>Last Minute Offer</MjmlTitle>
      <MjmlPreview>Last Minute Offer...</MjmlPreview>
    </MjmlHead>
    <MjmlBody width={500}>
      <MjmlSection fullWidth backgroundColor="#efefef">
        <MjmlColumn>
          <MjmlImage src="https://static.wixstatic.com/media/5cb24728abef45dabebe7edc1d97ddd2.jpg" />
        </MjmlColumn>
      </MjmlSection>
      <MjmlSection>
        <MjmlColumn>
          <MjmlButton
            padding="20px"
            backgroundColor="#346DB7"
            href="https://www.wix.com/"
          >
            I like it!
          </MjmlButton>
        </MjmlColumn>
      </MjmlSection>
    </MjmlBody>
  </Mjml>,
  { validationLevel: "soft" }
);

因此,您将获得一个好看的电子邮件 HTML(手机中的工作也)

preview

选项

@faire/ mjml- react 在渲染到 HTML 时设置了以下 MJML 选项 :

{
  keepComments: false,
  beautify: false,
  minify: false,
  minifyOptions: {
    collapseWhitespace: true,
    minifyCss: true,
    removeComments: "safe",
    removeEmptyAttributes: true,
  },
  validationLevel: 'strict'
}

如果您想要覆盖这些对象, 您可以将对象传递到 render 作为第二个论点。 见 MJML 文档 对于您可以设置的全部选项列表.

扩展

import {
  MjmlHtml,
  MjmlComment,
  MjmlConditionalComment
} from '@faire/mjml-react/extensions';

<MjmlComment>Built with ... at ...</MjmlComment>
// <!--Built with ... at ...-->

<MjmlConditionalComment>MSO conditionals</MjmlConditionalComment>
// <!--[if gte mso 9]>MSO conditionals<![endif]-->

<MjmlConditionalComment condition="if IE">MSO conditionals</MjmlConditionalComment>
// <!--[if IE]>MSO conditionals<![endif]-->

<MjmlHtml tag="div" html="<span>Hello World!</span>" />
// <div><span>Hello World!</span></div>

用户

我们也有一些用于处理输出 HTML 的功能. 因为并非所有邮件客户端都会支持命名为 HTML 的实体, 如 &apos;。 。 。 . 所以我们得把它们换成六分卫.

import {
  namedEntityToHexCode,
  fixConditionalComment,
} from "@faire/mjml-react/utils";

const html = "<div>&apos;</div>";
namedEntityToHexCode(html);
// <div>&#39;</div>

fixConditionalComment(
  "<!--[if mso]><div>Hello World</div><![endif]-->",
  "Hello",
  "if IE"
);
// <!--[if IE]><div>Hello World</div><![endif]-->

限制

现 mjml 财务报告和审定财务报表 @faire/mjml-react 图书馆是用来在一个节点内运行的.

示例项目

您可以在此找到一个示例工程 https://github.com/wix-incubator/mjml-反应-实例 互联网档案馆的存檔,存档日期2013-12-21

版本与发布记录

@faire/mjml-react 共发布 30 个版本,首次发布于 2022/09/22;过去 12 个月发布了 3 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
4.0.1latest2026/06/015 个月前
4.0.02026/05/205 个月前
3.5.42026/04/306 个月前
3.5.32025/09/021.2 年前
3.5.22025/08/131.3 年前
3.5.12025/08/121.3 年前

其他发布通道:alpha → 3.0.0-a1,main-beta → 3.0.2-main-beta.4,main-alpha → 4.0.0-main-alpha.2。

关于 @faire/mjml-react 的常见问题

@faire/mjml-react 是什么?

执行组件库生成苍蝇上的 HTML 电子邮件

如何安装 @faire/mjml-react?

在项目目录运行 npm install @faire/mjml-react,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:mjml(^5.0.0)、react(^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0)、react-dom(^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@faire/mjml-react 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@faire/mjml-react 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@faire/mjml-react 可以商用吗?

@faire/mjml-react 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@faire/mjml-react 的下载量有多少?

根据 npm 官方下载统计,@faire/mjml-react 在 2026/10/14 – 2026/11/12 这 30 天内被下载 593,561 次,日均约 19,785 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@faire/mjml-react 还在维护吗?

最新版本 4.0.1 发布于 2026/06/01(5 个月前);至今共发布 30 个版本,其中过去 12 个月发布了 3 个;首次发布于 2022/09/22。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。