前一段時間我們寫了一個項目,在本地是好的,但是布到線上發現有些字體圖標找不到,然後就各種找問題,最後確認是資源文件路徑沒引用正確導致的,
怎麼解決呢:
1、在build的utils文件中配置
原來是
if (options.extract) {
loaders.push(MiniCssExtractPlugin.loader)
} else {
loaders.push('vue-style-loader')
}
改成
if (options.extract) {
return ExtractTextPlugin.extract({
use: loaders,
publicPath:'../../', // 此處添加
fallback: 'vue-style-loader'
})
}
或者
2、在config的index.js中的, 原因是vue項目打包後樣式目錄結構變爲static/css
assetsPublicPath: '/',
//改爲
assetsPublicPath: '../../',
或者
3、在build的 webpack.base.conf.js 文件中配置
打包前:路徑是http://localhost:8080/static/…
打包後:路徑是/dist/static/css/static/fonts/iconfont.1a028ec.woff
百思不得其解的是-上面文件的實際位置在:/dist/static/fonts/iconfont.1a028ec.woff
一頓網上搜索終於找到一個有用的答案:參考官方文檔url-loader
當文件的大小小於limit的值時,使用base64進行轉碼,你可以在打包好的css中進行查證,看所引用的字體和圖片是不是base64格式的,如果大於limit的值,就使用file-loader進行解析,不會使用base64,而是採用路徑引入。
修改 limit的值,將其值變大 10000000
{
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
}
}
改爲
{
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
// name: utils.assetsPath('fonts/[name].[hash:7].[ext]'),
name: ('[name].[hash:7].[ext]'),
publicPath: '../fonts',
outputPath: utils.assetsPath('fonts/')
}
}
希望對各位老鐵有用!!!!!!!!!!!!