相対パスを使用してWebpackでSCSS(SASS)を使用してfont-awesomeをロードするにはどうすればよいですか?


84

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し、そのファイルのフォルダーをホームフォルダーとして使用して、相対パスが期待どおりに機能するようにするにはどうすればよいですか?


webpackはわかりませんが、.eotを入れることはでき../../node_modules/font-awesome/fonts/fontawesome-webfont.eotますか?
BrTkCa 2015

font-awesomeファイルを変更することでそれを行うことができますが、npmを更新するたびに変更が失われるため、それはオプションではありません。
リチャード

webpackは一緒に動作しますエクスプレス@リチャード?
BrTkCa 2015

いいえ、エクスプレスを使用していません
リチャード

私はフォントにnpmを使用しています-素晴らしいsassローダー。別のものを使用しましたか?
ウィネマッカ2017年

回答:


139

使用する

$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;

チルダ「〜」は、webpackメカニズムを使用しsass-loaderによって補間されます。


11
動作しません。コンパイルされますが、Webサイトに長方形が表示されます...:/
Donovan Charpin 2016

1
私は自分を次のように設定する必要がありました$fa-font-path: "font-awesome/fonts"-つまり、チルダなし。
ctrlplusb 2016

2
何を編集するのか、もう少し正確に説明していただけますか?私はこの答えを理解していません
リチャード

@リチャードあなたはこれをあなたのために働かせることができましたか?また、これを答えとしてマークしてください!
Ascherer 2016年

いいえ、その時点で以下の回答を使用しました。
リチャード

29

SCSS \ SASSに独自の相対パスを持つファイルを@importする方法はないようです。

代わりに、これを機能させることができました。

  • scss \ css font-awesomeファイルをスタイルシートファイルではなく、.jsまたは.jsxファイルにインポートします。

    import'font-awesome / scss / font-awesome.scss ';    
  • これを私のwebpack.configファイルに追加します:

    モジュール:
    {{
        ローダー:
        [
            {テスト:/ \。js?$ /、ローダー: 'babel-loader?cacheDirectory'、除外:/(node_modules | bower_components)/}、
            {テスト:/ \。jsx?$ /、ローダー: 'babel-loader?cacheDirectory'、除外:/(node_modules | bower_components)/}、
            {テスト:/ \。scss?$ /、ローダー:['style-loader'、 'css-loader'、 'sass-loader']}、         
            {テスト:/ \。svg(\?v = \ d + \。\ d + \。\ d +)?$ /、ローダー: 'file-loader?mimetype = image / svg + xml'}、
            {テスト:/ \。woff(\?v = \ d + \。\ d + \。\ d +)?$ /、ローダー: "file-loader?mimetype = application / font-woff"}、
            {テスト:/ \。woff2(\?v = \ d + \。\ d + \。\ d +)?$ /、ローダー: "file-loader?mimetype = application / font-woff"}、
            {テスト:/ \。ttf(\?v = \ d + \。\ d + \。\ d +)?$ /、ローダー: "file-loader?mimetype = application / octet-stream"}、
            {テスト:/ \。eot(\?v = \ d + \。\ d + \。\ d +)?$ /、ローダー: "ファイルローダー"}、
        ]
    }

別のフォントパスをどのように処理しますか?つまり、そこにscssをインポートしますが、フォントファイルへのパスを変更することはできません。たとえば、本番用に変更する必要があり、フォントが別のフォルダーにある場合などです。何か案は?それが私がしなければならないことです。
LordTribual 2015

私はまだ本番用に変更する必要はありません。ローカルビルドからすべてをコピーして、パスをそのままにしておくと思います。それ以外の場合は、webpack.config.js出力セクションを見て、パスを変更できるかどうかを確認してください。または、package.jsonスクリプトセクションにビルド後のステップを追加するだけです。
リチャード

2
動作しました。ローダーのパスを変更し、指定されたパスからフォントをロードするようになりました。
LordTribual 2015

javascriptにfont-awesomescssファイルを含める必要はありません。user137794が提案するようにフォントパスを設定している限り、それをscssに含めることができます。次に、提案したフォントタイプを考慮してwebpack.configファイルを更新します。
Dave Lancea 2016年

どのnpmを使用しましたか?私はsassfont awesome loaderを使用していますが、成功していません。
ウィネマッカ2017年

20

以下は私のために働いた:

$fa-font-path: "~font-awesome/fonts";
@import "~font-awesome/scss/font-awesome";

これはfont-awesome、プロジェクトに&必要なフォントをインポートするためのものです。その他の変更は、をwebpack使用して必要なフォントをロードするための構成ですfile-loader

{
  test: /\.scss$/,
  loaders: ['style', 'css?sourceMap', 'sass'
  ],
}, {
  test: /\.(png|jpg|jpeg|gif|svg|woff|woff2|ttf|eot)(\?.*$|$)/,
  loader: 'file'
}

12

私を変更することで解決しましたapp.scss

@import '~font-awesome/scss/_variables.scss';
$fa-font-path: "~font-awesome/fonts";
@import '~font-awesome/scss/font-awesome.scss';

この方法は、外部の依存関係を変更せず、バージョン管理を解除するのに役立ちます。


2
1行目を避けて、2行目の終わりに `!default`を使用することができます。
Nighto 2017年

_variables.scssプロジェクトを再コンパイルするたびにファイルを変更する必要がなかったため、このメソッドを機能させることができないのは残念です。オーバーライドし$fa-font-pathたり、その他の変数を変更したりすることはありません。そのため、どのように実行できたかわからない_
jesus g_force Harris

7

メインのscssファイルにパスを設定するだけで機能します:

$fa-font-path: "../node_modules/font-awesome/fonts";
@import '~font-awesome/scss/font-awesome.scss';

7

これは私にとってそれがどのように機能したかです、トリックは$fa-font-path次のようにフォントのパスに設定することです。

$fa-font-path: "~@fortawesome/fontawesome-free/webfonts/";
@import '~@fortawesome/fontawesome-free/scss/fontawesome.scss';
@import '~@fortawesome/fontawesome-free/scss/solid.scss';
@import '~@fortawesome/fontawesome-free/scss/brands.scss';

node_modules私の場合はフォントフォルダを確認してください@fortawesome/fontawesome-free


1
@Muhammed実際、このようなWebフォントをロードするのは少し注意が必要です。sassをcssにコンパイルすると、コンパイル方法によっては、フォントがコンパイルされない場合があります。webfontsフォルダーをcssフォルダーの隣のpublic /フォルダーに直接コピーできます。このようにして、font awesome css codeがフォントを見つけ、安全を確保します。
mycodingproject

6

私のために働いたのは、追加resolve-url-loaderして有効にすることでしたsourceMaps

私はすでにfont-awesomeをルート.scssファイルにインポートしました:

@import "~font-awesome/scss/font-awesome";
...

このルートファイルはmain.js、Webpackのエントリポイントとして定義されているファイルにインポートされます。

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-loaderfile-loaderインストールする必要があるため、次のようなエラーが発生した場合はcannot find module file-loader、次のようにインストールしてください。

npm i -D file-loader

便利なリンク

https://github.com/webpack/webpack/issues/2771#issuecomment-277514138 https://github.com/rails/webpacker/issues/384#issuecomment-301318904


1

バージョン5.14の場合、次のことが機能しました。

$fa-font-path : '../node_modules/@fortawesome/fontawesome-free/webfonts';

@import "../node_modules/@fortawesome/fontawesome-free/scss/solid";

@import "../node_modules/@fortawesome/fontawesome-free/scss/brands";

@import "../node_modules/@fortawesome/fontawesome-free/scss/fontawesome";

0

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';
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.