2016-07-25 45 views
5

我使用express來爲我的網站提供靜態內容,並且我想要合併FontAwesome(npm install font-awesome)。但是,在Font-Awesome的css中,字體文件的鏈接附加了一個查詢字符串,其中包含女巫表達不明白的版本信息。Express:如何以靜態內容的形式提供字體真棒?

有沒有人遇到過這個問題,並找到解決辦法?有沒有一種簡單的方法讓快遞忽略靜態內容的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 

更新 作爲@Denys塞居勒指出我們這不是QS,因爲我原本以爲。實際的請求是/fonts/fontawesome--webfont.woff?v=...

解決方案

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

回答

5

當你的瀏覽器請求/static/fontawesome--webfont.woff?v=4.6.3,服務器可以自由地忽略?v=xxx部分。這就是express.static模塊所做的。該部分的目的是防止瀏覽器和代理使用舊版本的文件。

所以問題不在於你認爲它的地方。問題是你將靜態的route映射到兩臺服務器。第一個沒有找到該文件,併發出404

(髒)解決方案1:

更改映射

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

並更改網址:

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

我說這是髒的,因爲你正在提供節點模塊的未經檢查的內容(當你執行npm更新時它會被更新)。你永遠不應該那樣做。

解決方案2:

創建靜態目錄(名稱並不重要),並把./node_modules/font-awesome/css./node_modules/font-awesome/fonts目錄裏面的內容,然後只用

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

由於地圖吧,我見現在它正在尋找'''/fonts/fontawesome-webfont.ttf?v = ...'中的字體' – MatUtter

+0

_「你永遠不應該這樣做。」_我不同意。如果你鎖定了一個特定的依賴關係,我認爲即使沒有選中'node_modules',我們也不會將它用作靜態路徑。 –

+0

@PatrickRoberts即使您認爲您可以通過semver鎖定「安全地」完成此任務,但爲完整的節點模塊提供服務沒有任何意義。可以說最少的是它太過懶惰和骯髒。 –