说明:
每当我在 google 上搜索“预编译模板”时,我最终都会遇到将所有 HTML 模板文件合并为一个 js 文件的网站。但就我而言,我正在寻找一种在系统本身上完全编译模板的方法,不支持“所有模板编译的 js 文件”。 (所以,我一直在寻找一种预渲染 HTML的解决方案
解决办法:
我发现了这个很棒的模板引擎Nunjucks,它可以让我在与 gulp 一起使用时将 HTML 模板编译为独立的 HTML 页面。
检查这个,gulp-nunjucks-render。通过将它与 gulp 一起使用,我可以将 .html 文件的部分包含到其他 .html 文件中。下面是代码(假设你安装了 nodejs 和 gulp):
var gulp = require('gulp');
var nunjucksRender = require('gulp-nunjucks-render');
gulp.task('default', function () {
nunjucksRender.nunjucks.configure(['templates/'], { watch: false });
return gulp.src('templates/!(_)*.html')
.pipe(nunjucksRender({
css_path: "../assets/css/",
js_path: "../assets/js/",
img_path: "../assets/images/"
}))
.pipe(gulp.dest('html'));
});
gulp.task('watch', function () {
gulp.watch(['templates/*.html'], ['default']);
});
在上面的代码中,我将 HTML 模板保存在 templates 文件夹中,使用上面的 gulp 代码,我在 html 文件夹中生成新的 HTML。上面的代码不会生成前缀为_的文件。 (类似于 sass 的东西)
以及稍后在命令提示符中:
gulp watch // Watches the files for changes continuously --> OWNING :D
这是一个例子:
<!-- // Index.html -->
<!DOCTYPE html>
<html>
{% include "_head.html" %}
<body>
{% include "_content.html" %}
{% include "_footer.html" %}
</body>
</html>
渲染到:
<!DOCTYPE html>
<html>
<head>
<title>Website title</title>
<link rel="Stylesheet" href="../assets/jcss/main.css" type="text/css"/>
</head>
<body>
<div class="page">
<!-- content here -->
</div>
<div class="footer">
<!-- footer content here -->
</div>
</body>
</html>
优点:
- 无需服务器支持即可编译模板。
- 无需在 index.html 中包含任何预编译的 js 文件。
- 每当我们对公共部分进行一些更改时,无需在每个页面中再次包含该部分。
缺点: