我正在寻找工具(和技术)来帮助我在HandlebarsJS模板中对我的静态资产(CSS,JS,图像等)进行版本控制。这是针对使用express
的Node.js网络应用程序,并在Windows中的iisnode
下运行。出于性能原因,我希望IIS直接提供静态资产 - 而不是使用Node或其他连接中间件来管道。
根据我过去的做法(使用经典ASP),我目前的想法如下:
{{asset 'images/button.png'}}
- &gt; //sc.domain.com/images/<version#>/button.png
从理论上讲,这一切都应该完全符合我的目的。但是,在我深入研究并编写所有这些基础设施之前,我想知道是否有人知道a)这些项目是否已存在于某处,以及b)是否有其他方法可以更好地用于HandlebarsJS?
答案 0 :(得分:0)
好吧,我没有找到更好的选择,所以我最终推进了上面提出的方法。
对于咕噜咕噜的任务,我遇到了grunt-hashmap,它似乎做了我想做的一切(还有更多!)。因为我不想让它实际重命名文件,所以我必须在我的grunt配置中指定以下内容:
hashmap: {
options: {
output: 'assethash.json'
},
all: {
cwd: 'public/',
src: ['**/*']
}
}
下一篇,Handlebars助手,看起来像这样(假设params.hashes
基本上是require('./assethash.json')
:
hbs.registerHelper('versionedUrl', function(file, opts) {
var hash = (params.hashes && params.hashes[file]) || '';
if (hash) file = file.replace(/(.*)\/(.*)/, '$1/' + hash + '/$2');
return (params.appRoot || '') + file;
});
这会将路径拆分为资源,并将散列作为最后一个路径组件插入。例如:
'js / myscript.js' - &gt; 'JS / [散列值] /myscript.js'
最后,为了将它们组合在一起,IIS重写规则如下所示:
<rule name="Remove Static Content Version">
<match url="^(m\/js|m\/css|m\/images)/\w+/(.+)$" />
<conditions />
<serverVariables />
<action type="Rewrite" url="{R:1}/{R:2}" appendQueryString="true" />
</rule>
基本上就是这样!只是想发布这个以防其他人有类似的问题。我很高兴听到您提供的任何改进或建议。