Я пытаюсь использовать Fontawesome в своем проекте Flask / webpack.
Самое безумное, что в какой-то момент это сработало, затем остановилось, я изменил что-то глупое, снова заработало и, наконец, перестало работать полностью.
Что у меня есть:
Конфигурация пакета:
"devDependencies": {
...
"css-loader": "^1.0.0",
"node-sass": "^4.9.3",
"sass-loader": "^7.1.0",
"style-loader": "^0.23.0",
"webpack": "^4.19.0",
"webpack-cli": "^3.1.0",
"webpack-merge": "^4.1.4"
},
"dependencies": {
"@fortawesome/fontawesome-free": "^5.3.1",
"bootstrap": "^4.1.3",
...
}
Конфигурация веб-пакета (раздел правил):
test: /.(ttf|otf|eot|svg|woff(2)?)(\?[a-z0-9]+)?$/,
use: [{
loader: 'file-loader',
options: {
name: '[name].[ext]',
outputPath: '../fonts/',
publicPath: '../static/fonts'
}
}]
},
{
test: /\.css$/,
use: [
'style-loader',
'css-loader',
'sass-loader'
]
},
{
test: /\.scss$/,
use: [
"style-loader",
"css-loader",
"sass-loader"
]
},
веб-пакет, раздел ввода:
entry: {
myStyles: './stles/myStyles.js'
},
myStyles.js:
import fontawesome from "@fortawesome/fontawesome-free/scss/fontawesome.scss";
import regular from "@fortawesome/fontawesome-free/scss/regular.scss";
import solid from "@fortawesome/fontawesome-free/scss/solid.scss";
import brands from "@fortawesome/fontawesome-free/scss/brands.scss";
fontawesome.library.add(solid, regular, brands)
Последняя строка вызвала ошибку в Chrome:
Uncaught TypeError: Cannot read property 'add' of undefined
Я также попытался добавить импорт в мою запись scss, и в какой-то момент это сработало, а затем остановилось:
$fa-font-path: '~@fortawesome/fontawesome-free/webfonts';
@import "~@fortawesome/fontawesome-free/scss/fontawesome";
@import "~@fortawesome/fontawesome-free/scss/regular";
@import "~@fortawesome/fontawesome-free/scss/solid";
@import "~@fortawesome/fontawesome-free/scss/brands";
Итак, наконец, в моем шаблоне у меня есть:
<i class="fas fa-user-circle fa-fw"></i>
и я вижу только квадраты.
Я проверил Chrome, шрифты загружены (ttf, woff, woff2).
Пожалуйста, помогите. Я уже потратил более 6 (!!!!) часов впустую на эту проблему, и это больше, чем я потратил на что-либо еще, связанное с webpack.
UPD Я думаю, я понял это. Я обнаружил, что мой публичный путь был неверным, я имею в виду эту часть конфигурации webpack: publicPath: '../static/fonts' - в настоящее время он указывает на папку static / fonts на один уровень выше моего html. Во-первых, относительный путь неверен сам по себе, во-вторых, относительный путь не будет работать для других папок, в-третьих, я изменил его на относительный к корню: '/ static / fonts', и он сработал.