2015-11-04 93 views
2

我頂嘴文件與字體:如何在webpack中爲文件加載器設置特定的前綴?

$icons-font-path: "~material-design-icons/iconfont/"; 

@font-face { 
    font-family: 'Material Icons'; 
    font-style: normal; 
    font-weight: 400; 
    src: local('Material Icons'), local('MaterialIcons-Regular'), url(#{$icons-font-path}/MaterialIcons-Regular.woff2) format('woff2'); 
} 

和文件加載器下載的字體到指定目錄(/home/user/project/example/src/static/fonts/):

{ 
    test: /\.(woff|woff2|eot|ttf)$/, 
    loader: 'file', 
    query: { 
     name: path.join(STATIC_PATH, 'fonts', '/[name]-[hash].[ext]') 
    } 
    }, 

這對我的工作很好,但出來的CSS具有相同路徑url,如:

@font-face { 
    font-family: 'Material Icons'; 
    font-style: normal; 
    font-weight: 400; 
    src: local('Material Icons'), local('MaterialIcons-Regular'), url(/home/user/project/example/src/static/fonts/MaterialIcons-Regular.woff2) format('woff2'); 
} 

如何複製woff2到一個特定的目錄和組url(prefix/MaterialIcons-Regular.woff2)的具體前綴?

回答

4

resolve-url-loader將允許您指定的字體url()相對於你.sass文件。 .css應該有一個Webpack可以解析爲模塊的路徑URL。

關鍵是Webpack要找到您在url()聲明中指定的所有資產。那時resolve-url-loader已完成工作。應該永遠不需要absolute選項,因爲您應該始終設置Webpack以查找所有「模塊」,包括資產。

默認情況下(我不是Webpack的專家),所有的CSS和資產都被複制到輸出,正確的相對路徑被重寫爲css url()語句。

我在想,問題的癥結在於CDN部署,您需要一些絕對前綴。如果是這種情況,請參閱public path屬性。我自己並沒有使用它,但它似乎是相關的。

1

您可能會想要使用sass-loaderresolve-url-loader的某種組合。

你的WebPack裝載機配置將是這個樣子:

module.exports = { 
    module: { 
    loaders: [ 
     { 
     test : /\.scss$/, 
     loaders: ['style', 'css', 'resolve-url', 'sass?sourceMap'] 
     } 
    ] 
    }, 
    resolveUrlLoader: { 
     absolute: '/prefix' 
    } 
}; 
+0

'absolute:'prefix''前綴''prefix''到絕對網址。有沒有辦法將它加到相對的網址? – Throoze

+0

不知道。嘗試'相對:'./''? – 4m1r

相關問題