मैं वेबपैक्स में SCSS (SASS) का उपयोग करके रिश्तेदार पथों का उपयोग करके फ़ॉन्ट-भयानक कैसे लोड कर सकता हूं?


84

मेरे नोड_मॉडल फ़ोल्डर में मेरे पास फ़ॉन्ट-कमाल है इसलिए मैं इसे अपने मुख्य .scss फ़ाइल में आयात करने का प्रयास करता हूं:

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

लेकिन वेबपैक बंडलिंग संकलन विफल रहता है, मुझे बता रहा है

Error: Cannot resolve 'file' or 'directory' ../fonts/fontawesome-webfont.eot 

क्योंकि फॉन्ट-भयानक.scss फाइल एक रिश्तेदार पथ को संदर्भित करता है, '../fonts/'।

मैं किसी अन्य फ़ाइल के लिए scss \ webpack को कैसे बता सकता हूं, और उस फ़ाइल के फ़ोल्डर को होम फ़ोल्डर के रूप में उपयोग कर सकता हूं ताकि उसके रिश्तेदार पथ काम करें जैसे कि यह उम्मीद करता है?


मैं वेबपैक नहीं जानता, लेकिन क्या आप इसमें .eot डाल सकते हैं ../../node_modules/font-awesome/fonts/fontawesome-webfont.eot?
BrTkCa

मैं फ़ॉन्ट-भयानक फ़ाइल को बदल कर ऐसा कर सकता था, लेकिन फिर जब भी मैं npm को अपडेट करता हूं तो मैं बदलावों को खो देता हूं, इसलिए यह विकल्प नहीं है।
रिचर्ड

webpack एक साथ काम करता है एक्सप्रेस @ रिचर्ड?
BrTkCa

नहीं, एक्सप्रेस का उपयोग नहीं
रिचर्ड

मैं फ़ॉन्ट-भयानक सैस लोडर के लिए npm का उपयोग कर रहा हूं। क्या आपने एक अलग प्रयोग किया?
विन्नमुस्का

जवाबों:


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;

टिल्ड "~" को वेब- पैक मेकैनिज्म का उपयोग करके सैस-लोडर द्वारा प्रक्षेपित किया जाता है


11
मेरे लिए काम नहीं करता है, यह संकलित करता है, लेकिन मैं सिर्फ अपनी वेबसाइट में आयत प्राप्त करता हूं ...: /
डोनोवन चारपिन

1
मुझे मेरा सेट करना था $fa-font-path: "font-awesome/fonts"- यानी बिना टिल्ड के।
ctrlplusb

2
क्या आप थोड़ा और अधिक स्पष्ट बता सकते हैं कि आप क्या संपादित करते हैं? मुझे यह उत्तर समझ में नहीं आता
रिचर्ड

@ रिचार्ड क्या आप इसे आपके लिए काम करने में सक्षम थे? इसके अलावा, कृपया इसे उत्तर के रूप में चिह्नित करें!
Ascherer

नहीं, मैंने उस समय अपने उत्तर का उपयोग किया था।
रिचर्ड

29

SCIM \ SASS में अपने स्वयं के सापेक्ष पथ वाले @import फ़ाइलों के लिए कोई भी रास्ता दिखाई नहीं देता है।

इसलिए इसके बजाय मैं यह काम करने में कामयाब रहा :

  • मेरे .js या .jsx फ़ाइलों में scss \ css फ़ॉन्ट-भयानक फ़ाइल आयात करें, न कि मेरी स्टाइलशीट फ़ाइलें:

    आयात 'फ़ॉन्ट-भयानक / scss / फ़ॉन्ट-भयानक.scss';    
  • इसे मेरे webpack.config फ़ाइल में जोड़ें:

    मापांक:
    {
        लोडर:
        [
            {test: /\.js?$/, लोडर: 'babel-loader? cacheDirectory', बाहर करें: / (node_modules | bower_compenders) /}
            {test: /\.jsx?$/, लोडर: 'babel-loader? cacheDirectory', बाहर करें: / (node_modules | bower_compenders) /}
            {test: /\.scss?$/, लोडर: ['स्टाइल-लोडर', 'सीएसएस-लोडर', 'सैस-लोडर']},         
            {test: /\.svg(\?v=\d+\.\d+\.\d+)?$/, loader: 'file-loader? mimetype = image / svg + xml'}?
            {test: /\.woff(\?v=\d+\.\d+\.\d+)?$/, loader: "file-loader? mimetype = application / font-woff"},?
            {test: /\.woff2(\?v=\d+\.\d+\.\d+)?$/, loader: "file-loader? mimetype = application / font-woff"}?
            {test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/, loader: "file-loader? mimetype = application / octet-stream"},?
            {test: /\.eot(\?v=\d+\.\d+\.\d+)?$/, लोडर: "फ़ाइल-लोडर"},
        ]
    }

आप एक अलग फ़ॉन्ट पथ को कैसे संभालते हैं? मेरा मतलब है कि आप वहाँ scss आयात करते हैं, लेकिन आप अपने फॉन्ट-फाइल्स के लिए रास्ता नहीं बदल सकते हैं, उदाहरण के लिए अगर आपको इसे प्रोडक्शन के लिए बदलना है और फोंट एक अलग फ़ोल्डर में पाए जाते हैं। कोई विचार? Thats मुझे क्या करने की जरूरत है।
लॉर्डट्रिब्युल

मैं अभी तक उत्पादन के लिए सामान को बदलने के लिए नहीं मिला है। मुझे लगता है कि मैं सिर्फ अपने स्थानीय निर्माण से सब कुछ कॉपी करूंगा और अकेले रास्ते छोड़ दूंगा। अन्यथा शायद webpack.config.js के आउटपुट अनुभाग को देखें और देखें कि क्या आप पथ बदल सकते हैं। या बस अपने package.json स्क्रिप्ट अनुभाग में एक पोस्ट बिल्ड चरण जोड़ें ।
रिचर्ड

2
काम कर गया। मैंने लोडर के लिए पथ बदल दिया है और अब निर्दिष्ट पथ से फोंट लोड करना है।
लॉर्डट्रिब्यूअल

आपको जावास्क्रिप्ट में फ़ॉन्ट-भयानक scss फ़ाइल शामिल करने की आवश्यकता नहीं है। आप इसे तब भी अपने scss में शामिल कर सकते हैं, जब तक कि आप user137794 जैसे फ़ॉन्ट पथ को सेट करते हैं, तब सुझाव देते हैं कि जैसे ही आप सुझाव देते हैं, फ़ॉन्ट प्रकारों के लिए webpack.config फ़ाइल को अपडेट कर दें।
डेव लैंसिया

आपने किस npm का उपयोग किया? मैं sass फ़ॉन्ट भयानक लोडर का उपयोग कर रहा हूँ और कोई सफलता नहीं है।
विन्नमुक्का

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 छोर पर `! डिफ़ॉल्ट` का उपयोग कर सकते हैं।
Nighto

यह शर्म की बात है कि मुझे काम करने का यह तरीका नहीं मिल सकता क्योंकि इसका मतलब यह होगा कि मुझे _variables.scssहर बार प्रोजेक्ट बदलने के बाद फाइल को बदलना नहीं पड़ता । यह $fa-font-pathउस मामले के लिए ओवरराइड या किसी अन्य चर को नहीं करता है .. इसलिए यह सुनिश्चित नहीं करें कि आप इसे कैसे करने में सक्षम थे_
jesus g_force हैरिस

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
@ मुहम्मद वास्तव में, वेबफोन्स को इस तरह लोड करना थोड़ा मुश्किल है। जब आप sss को css में संकलित करते हैं, तो संकलन के आपके तरीके के अनुसार, आपके फोंट संकलित नहीं हो सकते हैं। आप अपने सीएसएस फ़ोल्डर के बगल में सीधे अपने सार्वजनिक / फ़ोल्डर में वेबफोन्स फ़ोल्डर को कॉपी कर सकते हैं। इस तरह, फॉन्ट भयानक css कोड में फोंट मिलेंगे और आप सुरक्षित किनारे पर होंगे।
माइकोडिंगप्रोजेक्ट

6

मुझे जोड़ने resolve-url-loaderऔर सक्षम करने के लिए जो काम किया गया थाsourceMaps

मैंने अपनी रूट .scssफ़ाइल में पहले से ही फ़ॉन्ट-भयानक आयात कर लिया है :

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

इस रूट फाइल को main.jsवेबपैक के एंट्रीपॉइंट के रूप में परिभाषित मेरी फाइल में आयात किया गया है :

import './scss/main.scss';
...

तब मेरे अंतिम वेबपैक मॉड्यूल नियम ऐसे दिखते हैं:

 ...
 {
    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-3013184-4


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 (सिम्फनी 4 + वेबपैक)

$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';
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.