You need to enable JavaScript to run this app. 如何在MJML Gulp任务中正确配置juicePreserveTags为img、br标签添加自闭合标签
优惠活动
大模型
产品
解决方案
定价
更多

如何在MJML Gulp任务中正确配置juicePreserveTags为img、br标签添加自闭合标签

配置不生效的根因与正确实现

核心问题定位

之前配置无效的核心原因是juicePreserveTags的传值类型不匹配:

  • 之前参考的字符串格式配置,是早年MJML在静态配置文件、命令行场景下的适配写法,这类场景需要把配置序列化为字符串做跨进程传递。
  • 在Gulp构建直接调用MJML API的场景中,juicePreserveTags是透传给MJML内部Juice内联样式工具的原生参数,传入JSON字符串会被Juice识别为无效值,完全不会触发标签保留逻辑。

基础正确配置

直接把juicePreserveTags从JSON字符串替换为结构匹配的JS对象,调整后的构建函数代码:

export function buildMjml() {
  const options = {
    beautify: true,
    minify: false,
    keepComments: false,
    // 直接传入原生JS对象,无需序列化为JSON字符串
    juicePreserveTags: {
      imgTag: { start: '<img', end: '/>' },
      brTag: { start: '<br', end: '/>' }
    },
  };

  return gulp.src(PATHS.mjml.src)
    .pipe(mjmlGulp(mjml, options))
    .pipe(gulp.dest(PATHS.dist));
}

版本兼容补全

如果调整参数类型后,生成文件里的img、br自闭合标签还是被移除,需要调整HTML美化环节的规则:

  • MJML默认开启的beautify选项会调用js-beautify做代码格式化,默认规则会自动抹除单标签的自闭合后缀,需要把原配置中简单的beautify: true替换为自定义格式化规则,明确指定需要保留自闭合的单标签列表:
export function buildMjml() {
  const options = {
    beautify: {
      indent_size: 2,
      void_elements: ["img", "br", "hr", "input", "meta", "link"],
      unformatted: [],
      inline: []
    },
    minify: false,
    keepComments: false,
    juicePreserveTags: {
      imgTag: { start: '<img', end: '/>' },
      brTag: { start: '<br', end: '/>' }
    },
  };

  return gulp.src(PATHS.mjml.src)
    .pipe(mjmlGulp(mjml, options))
    .pipe(gulp.dest(PATHS.dist));
}
  • 调整完成后重新执行构建任务,无需手动修改原始MJML源码的标签写法,生成产物中的img、br标签会自动补全/>的自闭合后缀,满足邮件客户端的兼容性要求。

内容的提问来源于stack exchange,提问作者Dali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.10 19:24:07