7. SASS Loader

  • Intro

    • SASS: css์ž‘์„ฑ์‹œ ๊ฐ€๋…์„ฑ ๋†’์€ ํ‘œํ˜„๋ฒ• ์‚ฌ์šฉ, ๋‹ค์–‘ํ•œ ๋ฌธ๋ฒ• ์ œ๊ณต(css ํ™•์žฅ๋œ ํ˜•ํƒœ)

    • SASS๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, SASSํŒŒ์ผ์„ cssํŒŒ์ผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์ณ์•ผํ•œ๋‹ค.

    • SASS๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ์ค‘๋ณต๋˜๋Š” ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์กฐ๊ธˆ๋” ๋ถ„๋ช…ํ•˜๊ฒŒ css์„ค๊ณ„๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ

    • SASSํŒŒ์ผ์„ ๋ชจ๋“ˆ๋กœ ํ•ด์„ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์‹ค์Šต

  • ์‹ค์Šต

    • sass-loader, node-sass(nodeํ™˜๊ฒฝ์—์„œ sassํŒŒ์ผ์„ ์ฝ์–ด๋“ค์ด๋Š” ์—ญํ• ) ์„ค์น˜

      npm i -D sass-loader node-sass
    • loader chaining

      • css๋ฅผ SASS๋กœ ์ž‘์„ฑํ•  ๊ฒฝ์šฐ, build๋œ ๊ฒฐ๊ณผ๋ฌผ์€ SASSํŒŒ์ผ์ด ์•„๋‹Œ, css๊ฒฐ๊ณผ๋ฌผ์ด์–ด์•ผ ํ•œ๋‹ค.

      • ๊ณผ์ •: SASS๋ชจ๋“ˆ์„ ์ฝ๊ณ  ํ•ด์„ => css ํŒŒ์ผ๋กœ ์ปดํŒŒ์ผ => ์ปดํŒŒ์ผ๋œ cssํŒŒ์ผ์ด css-loader์— ์˜ํ•ด build ๊ฒฐ๊ณผ๋ฌผ์„ ํ•ฉ์ณ์„œ ์™„์„ฑ

      • ๋”ฐ๋ผ์„œ SASS-loader๋ฅผ ๋จผ์ € ์ž‘๋™ => ๊ฒฐ๊ณผ๋ฌผ์„ ๋ฐ›์•„์„œ css-loader ์ž‘๋™

      • ์ฆ‰, loader๋ฅผ ์ฝ์–ด๋“ค์ด๋Š” ์ˆœ์„œ๊ฐ€ ํ•„์š”ํ•œ๋ฐ ์ด๋ฅผ chaining์ด๋ผ๊ณ  ํ•œ๋‹ค.

      • ๊ทธ๋™์•ˆ loader์„ค์ •์€ use key์— ๋ฐฐ์—ด๋กœ ์„ค์ •์„ ํ–ˆ์—ˆ๋Š”๋ฐ, ์ด์—๋Œ€ํ•œ ์šฐ์„ ์ˆœ์œ„๋Š” indexํฌ๊ธฐ๊ฐ€ ํด์ˆ˜๋ก ๋จผ์ € ์ ์šฉ์ด ๋˜์—ˆ์—ˆ๋‹ค.

      • loader์˜ chaining๋ฐฉ์‹์€ indexํฌ๊ธฐ๋กœ ์ ์šฉํ•˜๋Š” ๋ฐฉ์‹ ์ด์™ธ์— ๋ฌธ์ž์—ด๋กœ ์„ค์ • ํ•  ์ˆ˜ ์žˆ๋‹ค.

    • ์šฉ๋„์— ๋”ฐ๋ผ css ํŒŒ์ผ๋“ค์„ loader๋“ค์ด ๋‹ค๋ฅด๊ฒŒ ์ ์šฉ๋˜๋„๋ก

      • cssํŒŒ์ผ๋“ค์„ ๋งŒ๋“ค๋•Œ 2๊ฐ€์ง€ ๋ชฉ์ ์„ ๊ฐ€์ง

        • global ๋ฒ”์œ„ css

        • local ๋ฒ”์œ„ css: ์˜ˆ: ํŠน์ • component ๋ฒ”์œ„ ๋‚ด๋ถ€์—์„œ๋งŒ ์ž‘๋™

      • ์ด๋ฆ„์„ ์ธ์‹ํ•ด์„œ ๋ถ„๊ธฐ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์˜ˆ์ •

        filename.module.scss => css modules
        filename.scss => global
      • ์ ์šฉ์˜ˆ

        module.exports ={
            module:{
                rules: [{
                    test: /\.s?css$/i,
                    oneOf: [{
                        test: /\.module\.s?css$/,
                        use: [
                            {
                                loader: MiniCssExtractPlugin.loader,
                            },
                            {
                                loader: 'css-loader',
                                options: {
                                    modules: true,
                                },
                            },
                            <!-- ์ถ•์•ฝํ˜•์œผ๋กœ ์ž‘์„ฑ -->
                            'sass-loader'
                        ]}, {
                        use: [
                            MiniCssExtractPlugin.loader,
                            'css-loader',
                            'sass-loader'
                            ]
                        }]
                },
            }
        }
        • Oneof ํ”„๋กœํผํ‹ฐ์—์„œ module์ด๋ผ๋Š” keyword์— ์˜ํ•ด์„œ global๋กœ ์ ์šฉํ• ์ง€, local๋กœ ์ ์šฉํ• ์ง€ ๊ฒฐ์ •

        • loader์ ์šฉ๋˜๋Š” ์ˆœ์„œ(index ํฐ ์ˆœ): sass-loader => css-loader => MiniCssExtractPlugin.loader

        • css ํŒŒ์ผ์ด๋ฆ„์— module์ด ์ ์šฉ๋˜์—ˆ์„ ๊ฒฝ์šฐ์—๋งŒ option์ด ์ ์šฉ์ด๋˜์„œ css์˜ module์„ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค.

        • scss-structure : 7-1 Sass Architecture

          • scss๋„ import ๋กœ ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜ฌ์ˆ˜์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ

Last updated