LOADING...
基于NodeJS的模板化站点生成器,使用类MediaWiki模板语法与ejs语法快速构建静态/Serverless/动态站点。
基于NodeJS的模板化站点生成器,使用类MediaWiki模板语法与ejs语法快速构建静态/Serverless/动态站点。
例如:在一个文档中引入另一个文档的内容
构建后结果:
其中,你可以用管道符|来分隔文件名与参数。
{{head.html|title=Test}}会在引入head.html的同时,将head.html中的变量title赋值为Test.
你也可以同时传入多个参数,只需要简单的以|分隔即可。如:{{head.html|title=Test|path=123|type=html}}
其中,文件地址可以是相对路径(相对于所在的文件)、绝对路径、网络路径。
(是的,你可以直接用{{https://xxx.com/xxx.html}}来直接引入一个网络资源。)
你可以以{{{变量名}}}的形式定义一个变量。
此外,也可以以{{{变量名=默认值}}}的形式,为该变量提供一个默认值。
例如:
对于变量,RenderBuild在构建时会依次以以下顺序读取:
1.模板间引用时的参数传递2.配置文件中的page对象3.变量中定义的默认值
如果都没有定义,将会抛出异常并提示错误位置。
另外,page对象会在每一次构建一个文件时重新更新。它由config.page与该文件下的metadata合并而成,优先为metadata中的值。
支持全部ejs语法。例如,你可以这样用javascript在文档中对传入的变量进行处理。
这里,构建时会读取传入的articles变量,并遍历输出为一个完整的文档树。
运行init()或者importConfig(filepath)时,会自动引入配置文件。默认情况下,init()时会自动引入当前目录下的config.json
配置文件需要是json,默认值已定义在rbuild.config中。也可以用rbuild.exportConfig(filepath)来导出当前配置。
其中的部分默认值及其意义如下:
./template/./origin/layout.htmlmetadata.yaml{articles: {name: 'articles-index',path: 'child/articles.html'}metadata是renderbuild在对origin中文件进行构建时的自定义配置。
具体来讲,当构建origin中的html/markdown文件时,会自动的检查该文件同级目录下是否有metadata配置文件(默认文件名是metadata.yaml),可在配置中自行更改。
若发现metadata,renderbuild会将其整合进该文件构建过程中的config.page对象中,并参与构建,这样你就可以在构建过程中使用metadata中的自定义参数
你可以仿照build()的默认行为,使用renderbuild提供的API进行自定义构建。提供的API及其输入/输出如下
init(): 初始化构建过程。如果使用build(),则不用手动初始化
参数:无。
返回值:无。
build(rootPath): 构建整个网站。
参数:
dev(): 进入开发模式。
参数:无。
返回值:无。
getTemplate(str): 获取模板字符串。
参数:
{{filename | parma}}npm i render-buildconst rbuild = require('render-build');
rbuild.build('./');const rbuild = require('render-build');
rbuild.init();
const page = `
<html>
<head>
<title>{{{title}}}</title>
</head>
</html>`;
module.exports = (req, res) => {
rbuild
.singleBuild(page, {
title: '',
})
.then((data) => {
// return...
});
};{{{data=hello}}}<!-- doc1 -->
<html>
{{head.html|title=Test}}
</html><!-- head.html -->
<head>
<title>{{{title}}}</title>
</head><html>
<head>
<title>Test</title>
</head>
</html><div class="listlines">
<% if (articles) { %>
<% for(let i = 0; i < articles.length; i++){ %>
<div class="loading listprogram">
<article>
<span class="article-name">
<h4><a href="<%= articles[i]['path'] %>"><%= articles[i]['name'] %></a></h4>
</span>
<p class="articles-info">
<time><%= articles[i]['time'] %></time> • <span class="i_small ri:archive-line"></span>
<span class="class">
<% for(var cla = 0; cla < articles[i].cla.length; cla++){ %>
<a><%= articles[i]['cla'][cla] %></a>/
<% } %>
</span>
</p>
<p class="articles-tags">
<% for(var tag = 0; tag < articles[i].tag.length; tag++){ %>
<a><%= articles[i]['tag'][cla] %></a>/
<% } %>
</p>
</article>
<hr>
</div>
<% } %>
<% } else { %>
<p>暂无文章</p>
<% } %>
</div>