【发布时间】:2015-11-23 23:34:20
【问题描述】:
在 Node.js Express 应用程序中,有没有一种方法可以在将所有 Handlebars 模板发送到渲染器之前缩小它们?
我考虑创建一个 Express 中间件来对 HTML 响应正文进行缩小 - 但我很快意识到这是非常无效的,因为缩小会发生在每个 HTTP 请求上。
必须有一种方法来缩小 .hbs 模板并在服务器端缓存它们?
【问题讨论】:
标签: node.js express handlebars.js
在 Node.js Express 应用程序中,有没有一种方法可以在将所有 Handlebars 模板发送到渲染器之前缩小它们?
我考虑创建一个 Express 中间件来对 HTML 响应正文进行缩小 - 但我很快意识到这是非常无效的,因为缩小会发生在每个 HTTP 请求上。
必须有一种方法来缩小 .hbs 模板并在服务器端缓存它们?
【问题讨论】:
标签: node.js express handlebars.js
您可以即时缩小文件,但出于性能原因,我建议您事先使用外部缩小器缩小文件,因此您只需执行一次。否则每次调用文件时都必须缩小 html。
因此,另一种解决方案是在命令行中使用html-minifier,并带有选项
--ignore-custom-fragments "/{{[{]?(.*?)[}]?}}/"
此正则表达式将忽略 {{ 和 }} 之间的所有内容,并对其余部分进行 HTML 缩小。
【讨论】:
只添加下一个标志“--continue-on-parse-error”,以下命令对我有用:
html-minifier --input-dir [SOURCE_DIR] --output-dir [TARGET_DIR] --file-ext hbs --collapse-whitespace --continue-on-parse-error --remove-comments --minify-css true --minify-js true
【讨论】:
这成功了: https://github.com/helpers/handlebars-helper-minify
唯一的小问题是您必须在每个模板中手动包含帮助程序:
来自模块的 Github 页面:
{{#minify removeComments="true"}}
{{> header }}
{{/minify}}
{{#minify removeEmptyElements="true"}}
{{> body }}
{{/minify}}
{{#minify removeComments="true"}}
{{> footer }}
{{/minify}}
【讨论】: