আপেক্ষিক পথগুলি ব্যবহার করে কীভাবে আমি ওয়েবপ্যাকে এসএসএসএস (এসএএসএস) ব্যবহার করে ফন্ট-দুর্দান্তটি লোড করব?


85

আমার নোড_মডিউলগুলি ফোল্ডারে ফন্ট-দুর্দান্ত রয়েছে তাই আমি এটির মতো আমার মূল এসএসএস ফাইলটিতে আমদানির চেষ্টা করব:

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

তবে ওয়েবপ্যাক বান্ডিলিং সংকলন ব্যর্থ হয়েছে, আমাকে বলছেন

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

কারণ হরফ-অসাধারণ.এসএসএস ফাইলটি একটি আপেক্ষিক পাথকে বোঝায়, '../fonts/'।

আমি কীভাবে scss \ ওয়েবপ্যাকটি অন্য একটি ফাইলকে আমদানি করতে বলতে পারি এবং সেই ফাইলটির ফোল্ডারটিকে হোম ফোল্ডার হিসাবে ব্যবহার করতে পারি যাতে এটির প্রত্যাশার সাথে সম্পর্কিত পাথগুলি কাজ করে?


আমি ওয়েবপ্যাক জানি না, তবে আপনি কি .ot স্থাপন করতে পারেন ../../node_modules/font-awesome/fonts/fontawesome-webfont.eot?
BRTkCa

আমি ফন্ট-দুর্দান্ত ফাইলটি পরিবর্তন করে এটি করতে পারি, তবে তারপরে আমি যখনই এনপিএম আপডেট করি তখন পরিবর্তনগুলি হারাতে পারি, এটি কোনও বিকল্প নয়।
রিচার্ড

ওয়েবপ্যাক একসাথে কাজ করে রিচার্ড?
BRTkCa

না, এক্সপ্রেস ব্যবহার করছেন না
রিচার্ড

আমি ফন্ট-বিস্ময়কর সাস লোডার জন্য এনপিএম ব্যবহার করছি। আপনি কি আলাদা ব্যবহার করেছেন?
Winnemucca

উত্তর:


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
আমার জন্য কাজ করে না, এটি সংকলন করে তবে আমি কেবল আমার ওয়েবসাইটে আয়তক্ষেত্র পাই ...: /
ডোনভান চার্পিন

4
আমাকে নিজের মতো করে সেট করতে হয়েছিল $fa-font-path: "font-awesome/fonts"- তিল্ড ছাড়া।
ctrlplusb

4
আপনি কী সম্পাদনা করবেন সেখানে আপনি আরও কিছুটা বিশদভাবে ব্যাখ্যা করতে পারেন? আমি এই উত্তরটি বুঝতে পারি না
রিচার্ড

@ রিচার্ড আপনি কি এই কাজটি করতে পেরেছিলেন? এছাড়াও, দয়া করে উত্তর হিসাবে চিহ্নিত করুন!
Ascherer

না, আমি নীচে আমার উত্তরটি তখন ব্যবহার করেছি।
রিচার্ড

29

এসসিএসএস \ এসএএসএস-এ নিজস্ব আপেক্ষিক পাথ রয়েছে এমন ইমপোর্ট ফাইলগুলির কোনও উপায় নেই বলে মনে হয়।

সুতরাং পরিবর্তে আমি পেতে পরিচালিত এই কাজের জন্য:

  • আমদানি করুন আমার .js বা .jsx ফাইল, মধ্যে SCSS \ CSS ফন্ট-সন্ত্রস্ত ফাইল না আমার স্টাইলশীট ফাইলগুলি:

    আমদানি করুন 'ফন্ট-অসাধারণ / এসএসএস / ফন্ট-অসাধারণ.এসএসএস';    
  • এটি আমার ওয়েবপ্যাক.কনফিগ ফাইলটিতে যুক্ত করুন:

    মডিউল:
    {
        লোডার:
        [
            {পরীক্ষা: /\.js?$/, লোডার: 'বাবেল-লোডার? ক্যাশে ডিরেক্টরি', বাদ দিন: / (নোড_মডিউলস | বোভার_কম্পোন্টস) /},
            {পরীক্ষা: /\.jsx?$/, লোডার: 'বাবেল-লোডার? ক্যাশে ডিরেক্টরি', বাদ: / (নোড_মডিউলস | বোভার_কম্পোন্টস) /},
            {পরীক্ষা: /\.scss?$/, লোডার: ['স্টাইল-লোডার', 'সিএসএস-লোডার', 'সাস-লোডার']},         
            {পরীক্ষা: /\.svg(\?v=\d+\.\d+\.\d+)?$/, লোডার: 'ফাইল-লোডার? মিমিটাইপ = চিত্র / এসভিজি + এক্সএমএল'},
            {পরীক্ষা: /\.woff(\?v=\d+\.\d+\.\d+)?$/, লোডার: "ফাইল-লোডার? মিমিটাইপ = অ্যাপ্লিকেশন / ফন্ট-ওফ"},
            {পরীক্ষা: /\.woff2(\?v=\d+\.\d+\.\d+)?$/, লোডার: "ফাইল-লোডার? মিমিটাইপ = অ্যাপ্লিকেশন / ফন্ট-ওফ"},
            {পরীক্ষা: /\.ttf(\?v=\d+\.\d+\.\d+)?$/, লোডার: "ফাইল-লোডার? মিমিটাইপ = অ্যাপ্লিকেশন / অকটেট-স্ট্রিম"},
            {পরীক্ষা: /\.eot(\?v=\d+\.\d+\.\d+)?$/, লোডার: "ফাইল-লোডার"},
        ]
    }

আপনি কীভাবে আলাদা ফন্টের পথ পরিচালনা করবেন? মানে আপনি সেখানে স্ক্যাস আমদানি করেছেন তবে আপনি আপনার ফন্ট-ফাইলের পথ পরিবর্তন করতে পারবেন না, উদাহরণস্বরূপ, যদি আপনাকে উত্পাদনটির জন্য এটি পরিবর্তন করতে হয় এবং হরফগুলি অন্য কোনও ফোল্ডারে পাওয়া যায়। কোন ধারনা? আমার যা করা দরকার তা ঠিক।
লর্ডট্রিবিয়াল

আমি এখনও উত্পাদন জন্য স্টাফ পরিবর্তন করতে পারেনি। আমি কল্পনা করেছি যে আমি আমার স্থানীয় বিল্ড থেকে সমস্ত কিছু অনুলিপি করব এবং পথগুলি একা রেখে দেব। অন্যথায় হয়ত ওয়েবপ্যাক.কনফিগ.জেএস এর আউটপুট বিভাগটি দেখুন এবং দেখুন যে আপনি পথ পরিবর্তন করতে পারেন কিনা। অথবা আপনার প্যাকেজ.জসন স্ক্রিপ্ট বিভাগে একটি পোস্ট বিল্ড স্টেপ যুক্ত করুন ।
রিচার্ড

4
এটা কাজ করে। আমি লোডারটির জন্য পথটি পরিবর্তন করেছি এবং এখন এটি নির্দিষ্ট পথ থেকে ফন্টগুলি লোড করছে।
লর্ডট্রিবিউয়াল

জাভাস্ক্রিপ্টে আপনাকে হরফ-দারুণ স্ক্যাস ফাইল অন্তর্ভুক্ত করার দরকার নেই। আপনি এখনও এটিকে আপনার এসএসএসে অন্তর্ভুক্ত করতে পারেন, যতক্ষণ আপনি ব্যবহারকারী 137794 এর মত ফন্টের পথটি সেট করেন, তারপরে আপনার পরামর্শ অনুসারে ফন্টের ধরণের জন্য ওয়েবপ্যাক.কনফিগ ফাইলটি আপডেট করুন।
ডেভ ল্যান্সা

আপনি কোন এনপিএম ব্যবহার করেছেন? আমি স্যাস ফন্টটি দুর্দান্ত ব্যাটার ব্যবহার করছি এবং কোনও সাফল্য নেই having
Winnemucca

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

বাহ্যিক নির্ভরতা অপরিবর্তিত এবং রূপান্তরিত রাখতে এই উপায়টি কার্যকর।


4
আপনি লাইন 1 এড়ানো এবং 2 প্রান্তে `! ডিফল্ট` ব্যবহার করতে পারেন।
নাইটো

এটি লজ্জাজনক যে আমি এই পদ্ধতিটি কাজ করতে পারি না কারণ এর অর্থ _variables.scssহ'ল আমি যখনই প্রকল্পটি পুনরায় সংশোধন করলাম তখনই আমাকে ফাইলটি পরিবর্তন করতে হবে না । এটি এই $fa-font-pathবিষয়টির জন্য ওভাররাইড বা অন্য কোনও পরিবর্তনশীল হয় না .. সুতরাং আপনি কীভাবে এটি করতে সক্ষম হয়েছেন তা নিশ্চিত নন_
jesus g_for Harris

9

এইভাবে এটি আমার পক্ষে কাজ করেছিল, কৌশলটি হ'ল $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


4
@ মুহাম্মাদ আসলে এই জাতীয় ওয়েবফন্টগুলি লোড করা কিছুটা জটিল। আপনি যখন সিএসএস-এ স্যাস সংকলন করেন, আপনার সংকলনের পদ্ধতি অনুসারে, আপনার ফন্টগুলি সংকলন নাও করা যেতে পারে। আপনি আপনার সিএসএস ফোল্ডারের পাশে সরাসরি আপনার পাবলিক / ফোল্ডারে ওয়েবফন্ট ফোল্ডারটি অনুলিপি করতে পারেন। এইভাবে, ফন্টের দুর্দান্ত সিএসএস কোড ফন্টগুলি সন্ধান করবে এবং আপনি নিরাপদে থাকবেন।
মাইকোডিংপ্রজেক্ট

7

আমি স্রেফ আমার মূল স্ক্যাস ফাইলটিতে পথ নির্ধারণ করেছি এবং এটি কাজ করে:

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

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-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 (সিমোফনি 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';
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.