【前端邮件模版福音】邮件模板一键生成Email HTML,让你不再需要写行内样式

本文介绍了一种使用Node.js解决前端提供但CSS支持不足的HTML邮件模板问题的方法,通过读取、解析并应用内部样式,实现行内样式的复用和模板的可维护性增强。
摘要由CSDN通过智能技术生成

场景:

后端需要一个HMTL邮件模板,让前端提供,但是邮件模板对内联或者引入CSS支持度并不理想,所以需要把写一些行内样式来调整,行内样式又不太能够复用样式和便捷性不太好

有了需求,使用Node.js写了一个小工具Demo

// 新建一个文件夹
npm init

安装依赖

npm install cheerio@1.0.0-rc.12 -s
npm install css@3.0.0 -s

index.js写入如下代码

const fs = require('fs');
const cheerio = require('cheerio');
const css = require('css');

// 读取HTML文件
const inputFile = 'input.html'; // 输入的HTML文件名
const outputFile = 'output.html'; // 输出的HTML文件名

fs.readFile(inputFile, 'utf8', (err, html) => {
    if (err) {
        console.error('Error reading file:', err);
        return;
    }

    // 加载HTML文档
    const $ = cheerio.load(html);

    // 获取所有内部样式表
    const styleTags = $('style');
    styleTags.each((index, element) => {
        const styleContent = $(element).text();

        // 解析内部样式表
        const parsedCSS = css.parse(styleContent);

        // 遍历样式规则,并将样式应用到相应的元素上
        parsedCSS.stylesheet.rules.forEach((rule) => {
            if (rule.type === 'rule') {
                const selectors = rule.selectors;
                const declarations = rule.declarations;

                // 查找匹配的元素,并将样式应用为行内样式
                selectors.forEach((selector) => {
                    $(selector).each((index, element) => {
                        const $element = $(element);

                        // 将样式规则应用为行内样式
                        declarations.forEach((declaration) => {
                            $element.css(declaration.property, declaration.value);
                        });

                        // 移除class名
                        $element.removeAttr('class');
                    });
                });
            }
        });

        // 删除内部样式表
        $(element).remove();
    });

    // 保存修改后的HTML文档
    fs.writeFile(outputFile, $.html(), 'utf8', (err) => {
        if (err) {
            console.error('Error writing file:', err);
            return;
        }

        console.log('Successfully!');
    });
});

写点测试模板

image.png


终端运行命令生成脚本

node index.js

如下图,已经生成了文件output,这文件就是给后端提供的模板Html,下次要改文件编辑input.html中的样式再运行 node index.js就可以生成新的模板了

image.png

image.png

生成内容,如下

image.png

这样一通操作,增强了邮件模板的可维护性,以便于持续开发

好了,写到这里,如果有问题,或者有更好的方法,欢迎留言交流。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值