快递:如何提供静态内容的字体真棒?

我使用快递在我的网站上提供静态内容,我想要合并FontAwesome( npm install font-awesome )。 但是,在Font-Awesome的css中,字体文件的链接附加了一个查询string,该查询string包含表示不明白的版本信息。

有没有人遇到过这个,find了解决办法? 有没有简单的方法来表示忽略静态内容的QS?

 var express = require('express') var app = express() app.use('/static', express.static('./node_modules/font-awesome/css')) app.use('/static', express.static('./node_modules/font-awesome/fonts')) // response 200 | /static/font-awesome.min.css // error 404 | /static/fontawesome--webfont.woff?v=4.6.3 

更新由于@DenysSéguret指出,这不是我所想的那样。 实际请求是/fonts/fontawesome--webfont.woff?v=...

 app.use('/fonts', express.static('./node_modules/font-awesome/fonts')) 

当您的浏览器请求/static/fontawesome--webfont.woff?v=4.6.3 ,服务器可以自由地忽略?v=xxx部分。 这就是express.static模块所做的。 这一部分的重点是防止浏览器和代理使用旧版本的文件。

所以问题不在于你认为的地方。 问题是你将静态route映射到两台服务器。 第一个没有find该文件,并发出404。

(脏)解决scheme1:

改变你的映射

 app.use('/static', express.static('./node_modules/font-awesome')) 

并更改url:

 /static/fonts/fontawesome--webfont.woff?v=4.6.3 

我说这是脏的,因为你正在提供一个节点模块的未经检查的内容(当你做一个npm更新的时候会更新)。 你永远不应该这样做。

解决scheme2:

创build一个静态目录(名称无关紧要),放在./node_modules/font-awesome/css./node_modules/font-awesome/fonts目录的内容中,然后使用

 app.use('/static', express.static('./static'));