我想做的:
- 发送一封带有样式的邮件;
- 有单独的文件,一个用于我的。ejs模板和一个。css对应于模板的样式。
问题是:
- 如果我为样式创建单独的路由并将其插入到HTML中,用户将需要"授权"。这些样式的下载;
- 如果我只是像普通的HTML一样导入,它不会通过电子邮件。
我使用了什么:
- Express.js
- EJS
- nodemailer
现在我的文件结构是什么样的:
- src
- 视图
- index.ejs
- style.css
- internal_view_group
- style.css
- internal_template_name
- style.css
- 语言环境
- pt-br.ejs
- en-us.ejs
- public_view_group
- style.css
- public_template_name
- style.css
- 语言环境
- pt-br.ejs
- en-us.ejs
好吧,如果目录有点乱或难以理解,让我为你解释一下:
-
文件夹"views"包含我所有的模板和样式,它也包含我的索引。js,这就是我在渲染HTML时调用的,这个索引将从组、模板中调用样式,然后从模板中调用HTML,考虑到它使用的语言。它也有一个style.css,一个全局样式表,必须在所有模板中使用,无论它的组。
-
文件夹"internal_view_group"以模板组为例,我们有一个内部组,模板用于内部通信,还有一个公共组,用于一般的公共通信。它也有一个默认的style.css,应用于该组中的每个模板。
-
文件夹"internal_template_name"是一个模板,它的区域设置在&;locale &;文件夹和样式表,该样式表必须应用于被调用的区域设置。
我怎么能在我的代码上有这种级别的组织,有单独的文件,仍然工作,考虑到部分&;问题是"?
既然你使用你的索引。为了调用所有其他模板和样式,你也可以直接将样式注入到这个索引中。使用<%- %>
这个标签的作用:导入一个文件(通常是一个. ejs),读取它的内容并输出到HTML。
所以你要做的是把放进index.js是类似这样的:<head>
<%-
'<style>'
+ include(`./style.css`)
+ include(`./${template_group}/style.css`)
+ include(`./${template_group}/${template_name}/style.css`)
+ '</style>'
%>
</head>
<body>
<%- include(`./${template_group}/${template_name}/locale/${locale}.ejs`) %>
</body>
这将输出所有样式RAW内容到代码中(不是缩小版本)。
样式标签被javascript逻辑内部而不是外部字符串包围的原因是,围绕输出,VSCode可能会报告代码中的错误,因为样式部分内的EJS标签,有了这个,输出终端什么都不会报告。
如果你发现你想要发送的HTML代码的最终大小太大,可能会成为一个问题,你可以使用javascript原型。包含之后的字符串函数,如include('./style.css').replaceAll(' ', '')
,替换所有空格,但留下换行符(未测试)