@ ইম্পোর্ট ব্যবহার করে সাসে কি কোনও সম্পূর্ণ ডিরেক্টরি আমদানি করা সম্ভব?


209

আমি এসএএসএস পার্টিয়ালগুলির সাথে আমার স্টাইলশিটগুলিকে মডুলারাইজ করছি:

@import partials/header
@import partials/viewport
@import partials/footer
@import partials/forms
@import partials/list_container
@import partials/info_container
@import partials/notifications
@import partials/queues

পুরো পার্টিয়াল ডিরেক্টরিকে অন্তর্ভুক্ত করার কোনও উপায় আছে (এটি SASS-partials পূর্ণ ডিরেক্টরি) যেমন @ ইম্পোর্ট কম্পাস বা অন্য কিছু?


3
উত্তরটি নয় তবে দরকারী: এসএএসএস একটি আমদানিতে একাধিক ফাইল যেমন আমদানি করতে পারে @import 'partials/header', 'partials/viewport', 'partials/footer';
llobet

উত্তর:


201

আপনি যদি কোনও রেলস প্রকল্পে সাস ব্যবহার করছেন তবে সাস-রেল মণি, https://github.com/rails/sass-rails গ্লোব আমদানি করে।

@import "foo/*"     // import all the files in the foo folder
@import "bar/**/*"  // import all the files in the bar tree

অন্য উত্তরে উদ্বেগের উত্তর দেওয়ার জন্য "আপনি যদি কোনও ডিরেক্টরি আমদানি করেন তবে কীভাবে আপনি আমদানি ক্রম নির্ধারণ করতে পারবেন? এমন কোনও উপায় নেই যা কিছু নতুন স্তরের জটিলতার পরিচয় দেয় না।"

কেউ কেউ যুক্তিযুক্ত হতে পারে যে আপনার ফাইলগুলি ডিরেক্টরিগুলিতে সংগঠিত করা জটিলতা হ্রাস করতে পারে।

আমার সংস্থার প্রকল্পটি বরং একটি জটিল অ্যাপ। 17 ডিরেক্টরিতে 119 স্যাস ফাইল রয়েছে। এগুলি আমাদের মতামতের সাথে মোটামুটি মিলিয়ে এবং মূলত সামঞ্জস্যের জন্য ব্যবহৃত হয়, ভারি উত্তোলনটি আমাদের কাস্টম কাঠামোর দ্বারা পরিচালিত হয়। আমার কাছে, আমদানিকৃত ডিরেক্টরিগুলির কয়েকটি লাইন আমদানিকৃত ফাইলের নামগুলির 119 টি লাইনের চেয়ে কম জটিল।

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


7
বা যুক্ত করুন @import "*"(application.css.scss এ) যদি আপনার কন্ট্রোলার সিএসএস / এসএসএস ফাইলগুলি "অ্যাপ্লিকেশন / সম্পদ / স্টাইলশীট" ফোল্ডারে একত্রে অ্যাপ্লিকেশন সিএসএসএসএসএস এর সাথে থাকে।
ম্যাগনে

এই "রত্ন" বাগিচা এবং উইন্ডোজে কাজ করে না, এই সমস্যাটি দেখুন যা দীর্ঘদিন ধরে উন্মুক্ত ছিল এবং এর অর্থ হ'ল এটি সম্পূর্ণরূপে ভাঙা github.com/chriseppstein/sass-globbing/issues/3
pilavdzice

আপনি ক্রিস এপস্টিনের সাস-গ্লোববিং রত্নের কথা বলছেন। আমার উত্তরটি সাস-রেলস রত্ন ব্যবহার করে, যা আমার কাছে পৃথক। আমি উইন্ডোজে নেই, তবে সাস-রেলস রত্ন সম্পর্কিত কোনও সমস্যা আমি দেখতে পাচ্ছি না।
ডেনিস সেরা

1
এটি আমার পক্ষে কার্যকর হয়নি - স্বতন্ত্র ফাইলগুলির পৃথক ভ্যানিলা সিএসএস @ আমদানি লাইনগুলিতে গ্লোব্বিংটি ভেঙে দেওয়া হয়েছিল। কোনটি ন্যাশালিভাবে, দেব-এ কাজ করেছিল, তবে উত্পাদন নয় (যেমন প্রযোজনার ক্ষেত্রে অ্যাপ্লিকেশন.এসএসের একমাত্র মূল সম্পদ রয়েছে)
পিটার এহরলিচ

5
এই টিপটির জন্য ধন্যবাদ আমার জন্য দুর্দান্ত কাজ করেছে। আমি আনন্দদায়কভাবে অবাক হয়েছি যে @import "*"অ্যাপ্লিকেশন.এসএসএস-এ বলার সাথে একই ডিরেক্টরিতে উপস্থিত অন্য সমস্ত ফাইল অন্তর্ভুক্ত রয়েছে তবে অ্যাপ্লিকেশন.এসএসএস-কে পুনরায় অন্তর্ভুক্ত করে না ... আমি অসীম লুপিং বাগটি প্রত্যাশা করেছিলাম।
টোফার হান্ট

94

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

আরও বিশদ আলোচনার জন্য, এই বদ্ধ বৈশিষ্ট্যটির অনুরোধটি এখানে দেখুন:


260
সুসংগঠিত সিএসএস ফাইলগুলির জন্য, অন্তর্ভুক্তির
ক্রমটি

57
@ মিলোভানজোগোভিচ ওভাররাইডগুলিতে অত্যধিকভাবে নির্ভর করার একটি কোডের গন্ধ আছে, তবে ক্যাসকেড ব্যবহার সম্পর্কে অনুপযুক্ত কিছু নেই। ভাষাটি কীভাবে ডিজাইন করা হয়েছিল এটি।
ব্র্যান্ডন ম্যাথিস

34
@ ব্র্যান্ডন ম্যাথিস আমি এখানে তাত্ত্বিক বিশুদ্ধতা বুঝতে পেরেছি, তবে একটি বাস্তবায়নে (আমার এবং আমি সংক্ষিপ্ত হিসাবে ধরে নিয়েছি) আপনি নিজের সিএসএসকে এমনভাবে লিখতে বেছে নিতে পারেন যাতে বিভিন্ন ফাইলগুলির একে অপরের উপর প্রভাব না পড়ে। আমার কাছে ফাইলগুলির সাথে "মডিউল" নামে একটি ডিরেক্টরি রয়েছে যা প্রত্যেকে একটি আলাদা সিএসএস শ্রেণীর বিধি থাকে। আমি চাই যে ডিরেক্টরিতে থাকা সমস্ত ফাইল অন্তর্ভুক্ত করা হোক, এবং তাদের ক্রমটি নয় এবং ডিজাইনের দ্বারা কখনই গুরুত্বপূর্ণ হবে না। আমি যখনই কোনও নতুন যুক্ত করি তখন তালিকাগুলি আপডেট করতে কষ্ট হয়।
রবিন উইনস্লো

5
যদি আমার কাছে এমন ডিরেক্টরি রয়েছে যা প্রযোজ্য অ-CSS,% বিধি, ফাংশন ইত্যাদিতে পূর্ণ থাকে তবে এতে কোনও ঝুঁকি নেই এবং বিপরীত (অনুমতি না দেওয়া) কেবল অকেজো টেডিয়াম এবং দীর্ঘ "আমদানি শিরোনাম" ফাইলগুলিতে সরিয়ে দেয় যা কেবল একটি হতে পারে এর একক লাইন @import "/functions"বা @import "partials/"
srcspider

3
একটি ব্যবহারের ক্ষেত্রটি মডিউলগুলি আমদানি করছে, যেখানে শৃঙ্খলাটি গুরুত্বপূর্ণ নয় এবং শৈলীর নাম গতিময় হতে পারে ... আমি এই ফাংশনটি দেখতে চাই - যদিও সম্মত হন এটি বুদ্ধিমানের সাথে ব্যবহার করতে হবে ...
হ্যানকক

41

পরীক্ষা করে দেখুন Sass-globbing প্রকল্পের


1
আমার মন্তব্য কয়েক বছরের পুরানো, কিন্তু .... সাস-গ্লোববিং প্রকল্পটির কিছু মারাত্মক ধীর গতি রয়েছে, এবং কেবলমাত্র একক বিকাশকারী যা উইন্ডোজে জিনিসগুলি কাজ করতে অতিরিক্ত মাত্রায় প্ররোচিত হন না। আমরা কেবল একটি নতুন তৈরি করা শুরু করছি যা লিনাক্স, ম্যাক এবং উইন্ডো জুড়ে কাজ করে
স্টুয়ার্ট

33

আমি __partials__.scssএকই ডিরেক্টরিতে নামের একটি ফাইল তৈরি করিpartials

|- __partials__.scss
|- /partials
   |- __header__.scss
   |- __viewport__.scss
   |- ....

ইন __partials__.scss, আমি এগুলি লিখেছি:

@import "partials/header";
@import "partials/viewport";
@import "partials/footer";
@import "partials/forms";
....

সুতরাং, আমি যখন পুরোটি আমদানি করতে চাই partials, কেবল লিখুন @import "partials"। আমি যদি সেগুলির কোনও আমদানি করতে চাই তবে আমিও লিখতে পারি @import "partials/header"


2
এটি একটি বেশ ভাল সমাধান। এটি তাদের অন্তর্ভুক্তিটি আরও সহজ করার জন্য কম্পাস যা কাজ করে +1
জেথ্রো লারসন

8
এটি মূলত ওপি সেটআপের মতোই। @import 'partials/xyz'প্রতিবার নতুন আংশিক তৈরি হওয়ার সময় তিনি ম্যানুয়ালি বিবৃতি যুক্ত না করেই ফাইলগুলি আমদানি করতে চান ।
gyo

1
ডাউনভোটারস + আপভোটার্স: আপনি কী দয়া করে ব্যাখ্যা করতে পারবেন যে এই উত্তরটি কীভাবে ওপি সেটআপ থেকে আলাদা?
gyo

4
এটা কিছুই সমাধান।
অলিগোফ্রেন

2
@gyo এটি ওপিকে সহায়তা করে না যদি তাদের কেবলমাত্র একটি পার্টিয়ালগুলির ডিরেক্টরি থাকে তবে এটি একাধিক পার্টির ডিরেক্টরি সহ লোকদের সহায়তা করে। যদি আমার formsএবং widgetsডিরেক্টরিগুলি থাকে তবে আমি @import "forms"; @import "widgets"কোনও পৃষ্ঠার জন্য প্রধান সিএসএস ফাইলে থাকতে পারি এবং কেবলমাত্র অভ্যন্তরীণ এবং সমস্ত পৃথক পার্টিশন ( @import forms/text; @import forms/button...) forms.scssনিয়ে উদ্বেগ প্রকাশ করতে পারি widgets.scss
ttotherat

4

আপনি যে ফাইলটি এই ফাইলটিতে সমস্ত ফাইল আমদানি এবং আমদানি করতে চান সেটি ফোল্ডারে একটি সাস ফাইল রেখে কিছুটা কাজ করতে পারবেন:

ফাইলের পথ: প্রধান / বর্তমান / _কোর্ন.এসএসএস

@import "placeholders"; @import "colors";

এবং পরবর্তী দির স্তরের ফাইলে আপনি কেবল সেই ফাইলের জন্য আমদানি ব্যবহার করেন যা সেই দির থেকে সমস্ত ফাইল আমদানি করে:

ফাইল পাথ: main / main.scss

@import "EricMeyerResetCSSv20"; @import "clearfix"; @import "current";

আপনি পুরো দির আমদানি করছেন এমনভাবে আপনার কাছে একই সংখ্যক ফাইল রয়েছে। অর্ডার থেকে সাবধান থাকুন, সর্বশেষে আসে ফাইলটি মিলবে স্টাইলগুলি ওভাররাইড করে।


3

আপনি উত্স ক্রম ধরে রাখতে চান তবে আপনি কেবল এটি ব্যবহার করতে পারেন।

@import
  'foo',
  'bar';

আমি এই পছন্দ।


2

http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#import

দেখে মনে হচ্ছে না।

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


হ্যাঁ ডকুমেন্টেশনটি দেখেছেন, কেউ পরীক্ষা করেছেন কিনা তা পরীক্ষা করে দেখেছেন বা আশা করছেন এটি কেবল বিনা প্রতিবেদিত লল। পরামর্শ যদিও জন্য ধন্যবাদ
জারিত

2

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

আমি আমদানিগুলি সংগঠিত করতে যা করি তা হ'ল _all.scssএকটি ডিরেক্টরিতে একটি ফাইল যুক্ত করা হয়, যেখানে আমি এটিতে সমস্ত প্রাসঙ্গিক ফাইলগুলি সঠিক ক্রমে আমদানি করি। এইভাবে, আমার প্রধান আমদানি ফাইলটি সহজ এবং পরিষ্কার হবে, এর মতো:

// Import all scss in the project

// Utilities, mixins and placeholders
@import 'utils/_all';

// Styles
@import 'components/_all';
@import 'modules/_all';
@import 'templates/_all';

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

যদিও আমি এই পদ্ধতির ব্যবহার করি, তবুও আমি মনে করি যে সাসে একটি গ্লোব আমদানি উপস্থিত থাকা উচিত, এমন পরিস্থিতিতে যেখানে অর্ডার মেশিন বা এমনকি অ্যানিমেশনগুলির ডিরেক্টরি হিসাবে গুরুত্বপূর্ণ নয় for


যদি আপনি আরএসসিএসএসের মতো কোনও পদ্ধতির ব্যবহার করেন তবে নির্দিষ্টতাটি সমান এবং প্রতিটি উপাদান কেবল তখনই প্রয়োগ হয় যেখানে কোনও বিরোধ ছাড়াই এটি প্রয়োজন।
আরডাব্লুডিজে

1

আমি আপনার প্রশ্নের উত্তর খুঁজতে চাই। উত্তরের সাথে মিল রেখে সঠিক আমদানি সমস্ত কার্য উপস্থিত নেই।

আমি কেন অজগর স্ক্রিপ্ট লিখেছি তা আপনাকে আপনার স্ক্যাস ফোল্ডারের মূলের মধ্যে রেখে দেওয়া দরকার:

- scss
  |- scss-crawler.py
  |- abstract
  |- base
  |- components
  |- layout
  |- themes
  |- vender

এটি তখন গাছের মধ্য দিয়ে হাঁটবে এবং সমস্ত স্ক্যাস ফাইলগুলি সন্ধান করবে। একবার মৃত্যুদন্ড কার্যকর হলে, এটি মেইন.এসএসএসএস নামে একটি স্ক্যাস ফাইল তৈরি করবে

#python3
import os

valid_file_endings = ["scss"]

with open("main.scss", "w") as scssFile:
    for dirpath, dirs, files in os.walk("."):
        # ignore the current path where the script is placed
        if not dirpath == ".":
            # change the dir seperator
            dirpath = dirpath.replace("\\", "/")

            currentDir = dirpath.split("/")[-1]
            # filter out the valid ending scss
            commentPrinted = False
            for file in files:
                # if there is a file with more dots just focus on the last part
                fileEnding = file.split(".")[-1]
                if fileEnding in valid_file_endings:
                    if not commentPrinted:
                        print("/* {0} */".format(currentDir), file = scssFile)
                        commentPrinted = True
                    print("@import '{0}/{1}';".format(dirpath, file.split(".")[0][1:]), file = scssFile)

একটি আউটপুট ফাইলের একটি উদাহরণ:

/* abstract */
@import './abstract/colors';
/* base */
@import './base/base';
/* components */
@import './components/audioPlayer';
@import './components/cardLayouter';
@import './components/content';
@import './components/logo';
@import './components/navbar';
@import './components/songCard';
@import './components/whoami';
/* layout */
@import './layout/body';
@import './layout/header';

0

এটা আমার জন্য ভাল কাজ করে

@import 'folder/*';

7
আমি মনে করি এটি রুবি বৈশিষ্ট্যের কারণে SASS নয়। কিছু সংকলককে এভাবে সমস্যা হয়। উদাহরণস্বরূপ, আমি এটি গুলপ-রুবি-স্যাস দ্বারা ব্যবহার করেছি এবং এটি কাজ করেছে তবে গাল্প-স্যাস ব্যবহার করে এটি একটি ত্রুটি বাড়িয়েছে।
মরতেজা জিয়া

0

আপনি SASS ফাইল তৈরি করতে পারেন যা সবকিছু স্বয়ংক্রিয়ভাবে আমদানি করে, আমি এই গুল্প টাস্কটি ব্যবহার করি:

concatFilenames = require('gulp-concat-filenames')

let concatFilenamesOptions = {
    root: './',
    prepend: "@import '",
    append: "'"
}
gulp.task('sass-import', () => {
    gulp.src(path_src_sass)
        .pipe(concatFilenames('app.sass', concatFilenamesOptions))
        .pipe(gulp.dest('./build'))
})

আপনি এই জাতীয় ফোল্ডারগুলি অর্ডার করে অর্ডার আমদানি নিয়ন্ত্রণ করতে পারেন:

path_src_sass = [
    './style/**/*.sass', // mixins, variables - import first
    './components/**/*.sass', // singule components
    './pages/**/*.sass' // higher-level templates that could override components settings if necessary
]

0

এটি একটি পুরানো প্রশ্ন হতে পারে তবে 2020-এ এখনও প্রাসঙ্গিক, তাই আমি কিছু আপডেট পোস্ট করতে পারি। Octobers'19 আপডেট যেহেতু আমরা সাধারণত ব্যবহার করা উচিত @use পরিবর্তে @import , কিন্তু যে শুধুমাত্র একটি মন্তব্য আছে। এই প্রশ্নের সমাধান হ'ল সম্পূর্ণ ফোল্ডারগুলি সহ সহজ করার জন্য সূচি ফাইলগুলি ব্যবহার করা। নীচে উদাহরণ।

// foundation/_code.scss
code {
  padding: .25em;
  line-height: 0;
}

// foundation/_lists.scss
ul, ol {
  text-align: left;

  & & {
    padding: {
      bottom: 0;
      left: 0;
    }
  }
}

// foundation/_index.scss
@use 'code';
@use 'lists';

// style.scss
@use 'foundation';

https://sass-lang.com/documentation/at-rules/use#index-files


1
আমি মনে করি আপনি @forwardআপনার _index.scss এর পরিবর্তে@use
আইজাক পাক

-4

ফাইলটি আমদানি করার জন্য সংজ্ঞায়িত করে সমস্ত ফোল্ডারগুলির সাধারণ সংজ্ঞা ব্যবহার করা সম্ভব।

সুতরাং, @import "style/*"স্টাইল ফোল্ডারের সমস্ত ফাইল সংকলন করবে।

সাসে আমদানি বৈশিষ্ট্য সম্পর্কে আরও আপনি এখানে দেখতে পারেন ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.