Font-awesome dans mon dossier node_modules, je tente donc de l'importer dans mon fichier .scss principal, comme suit:
@import "../../node_modules/font-awesome/scss/font-awesome.scss";
Mais la compilation Webpack bundling échoue, me disant
Error: Cannot resolve 'file' or 'directory' ../fonts/fontawesome-webfont.eot
parce que le fichier font-awesome.scss fait référence à un chemin relatif, '../fonts/'.
Comment puis-je indiquer à scss\webpack de @ importer un autre fichier et d'utiliser le dossier de ce fichier comme dossier de départ pour que ses chemins relatifs fonctionnent comme prévu?
Il ne semble pas y avoir de moyen pour les fichiers @import ayant leurs propres chemins relatifs dans SCSS\SASS.
Alors au lieu de cela, j'ai réussi à obtenir this to work:
Importez le fichier font-awesome scss\css dans mes fichiers .js ou .jsx, not mes fichiers de feuilles de style:
importer 'font-awesome/scss/font-awesome.scss';
Ajoutez ceci à mon fichier webpack.config:
module: { chargeurs: [ {test: /\.js?$/, loader: 'babel-loader? cacheDirectory', exclure:/(modules_noeud | composants_bower_bower) /}, {test: /\.jsx?$/, loader: 'babel-loader? cacheDirectory', exclure:/(modules_noeud | composants_bower_bower) /}, {test: /\.scss?$/, chargeurs: ['style', 'css', 'sass']}, {test: /\.svg(\?v=\d+\.\d+\.\d+)?$/, chargeur: 'chargeur de fichiers? mimetype = image/svg + xml'}, {test: /\.woff(\?v=\d+\.\d+\.\d+)?$/, loader: "chargeur de fichiers? mimetype = application/font-woff"}, {test: /\.woff2(\?v=\d+\.\d+\.\d+)?$/, loader: "chargeur de fichiers? mimetype = application/font-woff"}, {test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/, loader: "chargeur de fichiers? mimetype = application/octet-stream"}, {test: /\.eot(\?v=\d+\.\d+\.\d+)?$/, loader: "chargeur de fichiers"}, ] }
Utilisation
$fa-font-path: "~font-awesome/fonts";
@import "~font-awesome/scss/font-awesome";
où la variable $fa-font-path
est vue dans font-awesome/scss/_variables.scss
$fa-font-path: "../fonts" !default;
Comme décrit ci-dessus: http://fontawesome.io/get-started/
La suite a fonctionné pour moi:
$fa-font-path: "~font-awesome/fonts";
@import "~font-awesome/scss/font-awesome";
Ceci permet d'importer les polices font-awesome
et requises dans le projet . L'autre modification concerne les configurations webpack
, afin de charger les polices requises à l'aide de file-loader
.
{
test: /\.scss$/,
loaders: ['style', 'css?sourceMap', 'sass'
],
}, {
test: /\.(png|jpg|jpeg|gif|svg|woff|woff2|ttf|eot)(\?.*$|$)/,
loader: 'file'
}
Résolu en changeant mon app.scss
:
@import '~font-awesome/scss/_variables.scss';
$fa-font-path: "~font-awesome/fonts";
@import '~font-awesome/scss/font-awesome.scss';
Cette méthode est utile pour conserver les dépendances externes inchangées et non versionnées.
Je viens de définir le chemin dans mon fichier scss principal et cela fonctionne:
$fa-font-path: "../node_modules/font-awesome/fonts";
@import '~font-awesome/scss/font-awesome.scss';
Ce qui a fonctionné pour moi a été d'ajouter resolve-url-loader
et d'activer sourceMaps
J'ai déjà importé font-awesome dans mon fichier racine .scss
:
@import "~font-awesome/scss/font-awesome";
...
Ce fichier racine est importé dans mon fichier main.js
défini comme point d'entrée de Webpack:
import './scss/main.scss';
...
Ensuite, les règles finales de mon module webpack ressemblent à ceci:
...
{
test: /\.(sa|sc|c)ss$/,
use: [
MiniCssExtractPlugin.loader,
'css-loader',
{ loader: 'postcss-loader', options: { sourceMap: true }, },
'resolve-url-loader',
{ loader: 'sass-loader', options: { sourceMap: true }, },
],
}, {
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
loader: 'url-loader',
options: { limit: 1000, name: 'fonts/[name].[ext]', },
}
...
Remarque:
J'ai utilisé mini-css-extract-plugin
, qui peut être enregistré comme ceci:
new MiniCssExtractPlugin({
filename: 'css/main.css',
chunkFilename: '[id].[hash]',
}),
url-loader
nécessite que file-loader
soit installé, donc si vous obtenez une erreur telle que: cannot find module file-loader
, installez-la simplement:
npm i -D file-loader
Liens utiles:
https://github.com/webpack/webpack/issues/2771#issuecomment-277514138https://github.com/Rails/webpacker/issues/384#issuecomment-30131818904
Voir le site angulaire pour les instructions Inclure la police de caractères Awesome
v.4 (symofony 4 + webpack)
$fa-font-path: "~components-font-awesome/webfonts";
@import '~components-font-awesome/scss/fa-brands';
@import '~components-font-awesome/scss/fa-regular';
@import '~components-font-awesome/scss/fa-solid';
@import '~components-font-awesome/scss/fontawesome';