在 Sails JS 中使用 underscore/lodash 作为模板引擎
Posted
技术标签:
【中文标题】在 Sails JS 中使用 underscore/lodash 作为模板引擎【英文标题】:Using underscore/lodash as template engine in Sails JS 【发布时间】:2014-01-06 11:43:30 【问题描述】:我有一个单页网络应用程序,它在客户端使用主干,在服务器上使用节点(Sails)。
我目前在客户端使用lodash.underscore作为模板引擎,在服务端使用kiwi。
我希望通过渐进增强来实现 pushstate。即客户端和服务器将共享相同的模板文件。
这意味着他们需要使用相同的模板引擎;我决定使用下划线/lodash。
在 Sails config\views.js 中,这意味着您可以使用下划线作为模板引擎。问题是我无法弄清楚如何做到这一点。我已经将它包含在我的 package.json 中并设置了
'engine': 'underscore'
然后在启动我的应用程序时出现错误 - “Function.app.engine 需要回调函数”
如果我将引擎设置为“kiwi”、“jade”、“ejs”等,那么它会起作用。
知道我做错了什么吗?
【问题讨论】:
【参考方案1】:我不确定我是否完全理解您的要求,但是,我在服务器端视图中使用了具有以下配置的下划线模板:
在config/views
中,我将引擎设置为 ejs:
engine: 'ejs',
在我的Gruntfile.js
中我已经设置:
var templateFilesToInject = [
'linker/**/*.ejs'
];
【讨论】:
服务器端视图位于 /views 中,客户端模板位于 /assets/templates 中。我想避免重复代码,所以希望从客户端模板构建服务器端视图。这将允许我启用 pushState。为此,我需要视图和模板使用相同的“语言”并使用相同的语法,而目前它们不是。我似乎在这两点上都有问题 - 从 /views 引用资产/模板并获得标准语法【参考方案2】:Consolidate.js 从 version 0.3.1 开始使用 support Underscore as an engine,从 version 0.10.0 开始使用 Lodash。
Sails.js supports all of the view engines compatible with Express via Consolidate,但第一个包含 Consolidate 作为直接依赖项的 Sails 版本是 only 0.12.0-rc2。我不确定 Sails 在此之前是如何管理其他模板引擎的,但 documentation suggests that Underscore has been supported as a view engine since 0.10.0.
您应该验证您使用的 Sails 版本是否支持 Underscore 作为视图引擎,并在尝试使用之前确保您npm i --save underscore
。
【讨论】:
以上是关于在 Sails JS 中使用 underscore/lodash 作为模板引擎的主要内容,如果未能解决你的问题,请参考以下文章