Node_modulesフォルダーにfont-awesomeがあるので、メインの.scssファイルに次のようにインポートしてみます。
@import "../../node_modules/font-awesome/scss/font-awesome.scss";
しかし、Webpackバンドルコンパイルは失敗し、私に言った
Error: Cannot resolve 'file' or 'directory' ../fonts/fontawesome-webfont.eot
font-awesome.scssファイルは相対パス「../fonts/」を参照するためです。
Scss\webpackに別のファイルを@importするように指示し、そのファイルのフォルダをホームフォルダとして使用して、相対パスが期待どおりに機能するようにするにはどうすればよいですか?
SCSS\SASSに独自の相対パスを持つファイルを@importする方法はないようです。
だから代わりに this を動作させることができた:
.jsまたは.jsxファイルにscss\css font-awesomeファイルをインポートします。notスタイルシートファイル:
import 'font-awesome/scss/font-awesome.scss';
これをwebpack.configファイルに追加します。
module: { ローダー: {test:/\.js?$/、loader: 'babel-loader?cacheDirectory '、exclude:/(node_modules | bower_components)/}、 {test:/\.jsx?$/、loader:' babel-loader?cacheDirectory '、exclude:/(node_modules | bower_components)/}、 {テスト:/\.scss?$/、ローダー:['style'、 'css'、 'sass']}、 {test:/\.svg(\?v=\d + \。\ d + \。\ d +)?$ /、ローダー: 'file-loader?mimetype = image/svg + xml'}、 {test:/ \。woff(\?v =\d + \。\ d + \。\ d +)?$ /、ローダー: "file-loader?mimetype = application/font-woff"}、 {test:/\.woff2(\?v=\d+ \。\ d + \。\ d +)?$ /、ローダー: "file-loader?mimetype = application/font-woff"}、 {test:/ \。ttf(\?v =\d +\。\ d + \。\ d +)?$ /、ローダー: "file-loader?mimetype = application/octet-stream"}、 {test:/ \。eot(\?v =\d + \。\d + \。\ d +)?$ /、loader: "file-loader"}、 }
つかいます
$fa-font-path: "~font-awesome/fonts";
@import "~font-awesome/scss/font-awesome";
$fa-font-path
変数はfont-awesome/scss/_variables.scss
にあります
$fa-font-path: "../fonts" !default;
ここで説明されているように: http://fontawesome.io/get-started/
以下は私のために働いた:
$fa-font-path: "~font-awesome/fonts";
@import "~font-awesome/scss/font-awesome";
これは、プロジェクトにfont-awesome
および必要なフォントをインポートすることです。 file-loader
を使用して必要なフォントをロードするためのその他の変更は、webpack
構成にあります。
{
test: /\.scss$/,
loaders: ['style', 'css?sourceMap', 'sass'
],
}, {
test: /\.(png|jpg|jpeg|gif|svg|woff|woff2|ttf|eot)(\?.*$|$)/,
loader: 'file'
}
app.scss
を変更して解決しました:
@import '~font-awesome/scss/_variables.scss';
$fa-font-path: "~font-awesome/fonts";
@import '~font-awesome/scss/font-awesome.scss';
この方法は、外部の依存関係を変更せず、バージョン管理外に保つのに役立ちます。
メインのscssファイルにパスを設定するだけで動作します。
$fa-font-path: "../node_modules/font-awesome/fonts";
@import '~font-awesome/scss/font-awesome.scss';
私のために働いたのは、resolve-url-loader
を追加し、sourceMaps
を有効にすることでした
私はすでにルート.scss
ファイルにfont-awesomeをインポートしました:
@import "~font-awesome/scss/font-awesome";
...
このルートファイルは、Webpackのエントリポイントとして定義されているmain.js
ファイルにインポートされます。
import './scss/main.scss';
...
次に、私の最終的なwebpackモジュールのルールは次のようになります。
...
{
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]', },
}
...
注:
次のように登録できるmini-css-extract-plugin
を使用しました。
new MiniCssExtractPlugin({
filename: 'css/main.css',
chunkFilename: '[id].[hash]',
}),
url-loader
のインストールにはfile-loader
が必要です。したがって、次のようなエラーが表示された場合は、cannot find module file-loader
をインストールしてください。
npm i -D file-loader
有用なリンク:
https://github.com/webpack/webpack/issues/2771#issuecomment-277514138https://github.com/Rails/webpacker/issues/384#issuecomment-301318904
手順についてはangularサイトを参照してください Include Font 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';