Как сделать Font awesome 5 работать с webpack
Я пытаюсь использовать 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",
...
}
Конфигурация webpack (раздел правил):
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"
]
},
webpack, раздел ввода:
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
Я также попытался добавить импорт в свой сценарий ввода, и он работал в какой-то момент, а затем остановился:
$fa-font-path: '[email protected]/fontawesome-free/webfonts';
@import "[email protected]/fontawesome-free/scss/fontawesome";
@import "[email protected]/fontawesome-free/scss/regular";
@import "[email protected]/fontawesome-free/scss/solid";
@import "[email protected]/fontawesome-free/scss/brands";
Итак, наконец, в моем шаблоне я:
<i class="fas fa-user-circle fa-fw"></i>
и я вижу только квадраты.
Я проверил Chrome, загрузились шрифты (ttf, woff, woff2).
Пожалуйста помоги. Я уже потратил больше 6 (!!!!) часов, потраченных на эту проблему, и это больше, чем я потратил на что-то еще, связанное с webpack.
UPD Думаю, я понял это. Я обнаружил, что мой общедоступный путь был неправильным, я имею в виду эту часть webpack config: publicPath: '../static/fonts' - он в настоящее время указывает на папку static/fonts на один уровень выше моего html. Во-первых, относительный путь сам по себе неправилен, во-вторых, относительный путь не будет работать для других папок, в-третьих, я изменил его на отношение к корню: '/static/fonts', и он сработал.
Ответы
Ответ 1
В моем проекте (HTML Starter с веб-пакетом 4.26.1) я добавил FontAwesome с помощью двух вариантов:
1. Установлено и добавлено
Я только что установил FontAwesome Free (v5.5.0
)
npm install --save-dev @fortawesome/fontawesome-free
и я добавил в index.js
import '@fortawesome/fontawesome-free/js/fontawesome'
import '@fortawesome/fontawesome-free/js/solid'
import '@fortawesome/fontawesome-free/js/regular'
import '@fortawesome/fontawesome-free/js/brands'
Source code/Commit
2. Используется с API/SVG
Я установил FontAwesome (svg-core, бренды-иконки, обычные иконки, сплошные иконки)
npm install --save-dev @fortawesome/fontawesome-svg-core @fortawesome/free-brands-svg-icons @fortawesome/free-regular-svg-icons @fortawesome/free-solid-svg-icons
и я добавил в файл JS
import { library, dom } from '@fortawesome/fontawesome-svg-core'
import { fas } from '@fortawesome/free-solid-svg-icons'
import { far } from '@fortawesome/free-regular-svg-icons'
import { fab } from '@fortawesome/free-brands-svg-icons'
library.add(fas, far, fab)
dom.i2svg()
Source code with comments/Commits
Ответ 2
Просто импортируйте этот файл в myStyle.js
import '@fortawesome/fontawesome-free/js/all'
или вы можете импортировать только определенный размер значков
import '@fortawesome/fontawesome-free/js/light'
import '@fortawesome/fontawesome-free/js/regular'
import '@fortawesome/fontawesome-free/js/solid'
import '@fortawesome/fontawesome-free/js/brands'
Я думаю, что fontawesome.library.add() не требуется.
Ответ 3
Я использую профессиональную версию, которая по сути одинакова с точки зрения использования, окончание имени "-pro" вместо "-free".
Я импортирую файл all.js шрифта в мой файл index.js:
import '@fortawesome/fontawesome-pro/js/all.js'
И импортируем CSS в мой файл index.scss:
@import '[email protected]/fontawesome-pro/css/all.css';
Ответ 4
Это то, что сработало для меня.
Взято у пользователя @ahbou на странице проблем веб-упаковщика https://github.com/rails/webpacker/issues/619#issuecomment-430644035
на вашей консоли
yarn add @fortawesome/fontawesome-free
внутри вашего .scss файла
$fa-font-path: '[email protected]/fontawesome-free/webfonts';
@import '[email protected]/fontawesome-free/scss/fontawesome';
@import '[email protected]/fontawesome-free/scss/solid';
@import '[email protected]/fontawesome-free/scss/regular';
Ответ 5
Как ответил Сиши. Второй вариант работал для меня.