前端时间在考虑搭建博客的时候,调研了挺多博客建站系统和框架,结果最后选择了hexo框架,因为感觉还是挺轻量化挺清爽的,并且不喜欢wordpress那种php的框架。hexo官网里面有琳琅满目的主题模板,可以随意选择进行装载。当时我选来选去,总算选到一个比较中意的模板,然而后来才发现那个模板挺坑的,里面很多功能都没有,很不全面,但是我没有换其他模板,因为好在这个模板还比较有个性,没有太同质化,所以挺多功能和优化最后都是靠我自己动手加进去的。我用的那个模板是用的ejs模板引擎写的,作为一个前端开发人员,可以基本看懂ejs文件内容,因为说白了就是把html和js糅合到一起,并且加入了一些不太认识的符号和函数,影响总体的理解。但是要自己动手修改,就有些难度了,毕竟对ejs完全不了解。所以现在分享一下ejs的基本用法。

EJS是一个JavaScript的模板引擎,用来从JSON数据中生成HTML字符串

与普通的js和html代码分离的模式相比,ejs模板引擎让不太了解你的代码的人,能够更轻松地通过EJS模板代码来看懂你代码,给人的感觉就是很轻量化很简洁干净,也不需要到处乱翻代码就能看懂逻辑了。

ejs标签含义:

  <% '脚本' 标签,用于流程控制,无输出。
  <%_ 删除其前面的空格符
  <%= 输出数据到模板(输出是转义 HTML 标签)
  <%- 输出非转义的数据到模板
  <%# 注释标签,不执行、不输出内容
  <%% 输出字符串 '<%'
  %> 一般结束标签
  -%> 删除紧随其后的换行符
  _%> 将结束标签后面的空格符删除

<% code %>用于执行其中的javascript代码组。
<%= code %>会对其中的代码或者说变量进行html转义。
<%- code %>将不会进行转义,这一行代码不会执行,相当于注释代码。

提供一些辅助函数,用于模版中使用:

first,返回数组的第一个元素
last,返回数组的最后一个元素
capitalize,返回首字母大写的字符串
downcase,返回字符串的小写
upcase,返回字符串的大写
sort,排序Object.create(obj).sort()
sort_by:'prop',按照指定的prop属性进行升序排序
size,返回长度,即length属性,不一定非是数组才行
plus:n,加上n,将转化为Number进行运算
minus:n,减去n,将转化为Number进行运算
times:n,乘以n,将转化为Number进行运算
divided_by:n,除以n,将转化为Number进行运算
join:'val',将数组用'val'最为分隔符,进行合并成一个字符串
truncate:n,截取前n个字符,超过长度时,将返回一个副本
truncate_words:n,取得字符串中的前n个word,word以空格进行分割
replace:pattern,substitution,字符串替换,substitution不提供将删除匹配的子串
prepend:val,如果操作数为数组,则进行合并;为字符串则添加val在前面
append:val,如果操作数为数组,则进行合并;为字符串则添加val在后面
map:'prop',返回对象数组中属性为prop的值组成的数组
reverse,翻转数组或字符串
get:'prop',取得属性为'prop'的值
json,转化为json格式字符串  

利用<%- include filename %>可以将其他页面模板加载到当前页中。

展示一段ejs模板代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
<title><% if (title) { %><%= title %> | <% } %><%= config.title %></title>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0" >
<% if(page.keywords){ %>
<meta name="keywords" content="<%- page.keywords %>" >
<% } else { %>
<meta name="keywords" content="<%- theme.SEO.keywords %>" >
<% } %>

<% if(page.description){ %>
<meta name="description" content="<%- page.description %>" >
<% } else { %>
<meta name="description" content="<%- theme.SEO.description %>" >
<% } %>

这段代码的大意,其实就是判断这篇博客文章里有没有设置关键词,如果有则显示出来。如果这篇文章没有设置属于他自己的关键词,那么就使用主题文件中设置的博客顶级seo关键词来代替。下面那一段的意思是一样的,不过是控制文章的描述。

所以ejs的用法其实是很简单的,和写原生html和js区别不大。我们需要修改hexo页面时,可以进入到hexo项目的themes文件夹内,里面可以相对应的修改整个博客的ejs代码模板,themes文件中包含很多的模板文件,但实际上他们都是有机的整体,都会在某个模板文件中被引用,从而组合成一个完整的项目整体。修改完之后需要先hexo clean,然后hexo g来重新生成博客文件,这样就能看到效果了。大家想深入学习ejs的话,可以去ejs官网学习教程。