Razzle: scss 및 더 적은 ν”ŒλŸ¬κ·ΈμΈ μΆ”κ°€

에 λ§Œλ“  2018λ…„ 02μ›” 08일  Β·  15μ½”λ©˜νŠΈ  Β·  좜처: jaredpalmer/razzle

Hacktoberfest stale

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

λ‚˜λŠ” 이것을 razzle.config.jsμ—μ„œ ν™•μž₯ν–ˆμŠ΅λ‹ˆλ‹€.

"use strict";

const MiniCssExtractPlugin = require("mini-css-extract-plugin");

module.exports = {
  modify: (config, { target, dev }, webpack) => {

    const appConfig = Object.assign({}, config);

    // Setup SCSS
    if (target === "web") {

      appConfig.module.rules.push(
        {
          test: /\.(sa|sc|c)ss$/,
          use: [
            dev ? 'style-loader' : MiniCssExtractPlugin.loader,
            'css-loader',
            'sass-loader',
          ]
        }
      );

    }
    else {
      // On the server, we can just simply use css-loader to
      // deal with scss imports
      appConfig.module.rules.push({
        test: /\.(sa|sc|c)ss$/,
        use: "css-loader"
      });
    }

    return appConfig;
  }
};

개발자 쒅속성:

"devDependencies": {
    "css-loader": "^1.0.0",
    "mini-css-extract-plugin": "^0.4.1",
    "node-sass": "^4.9.2",
    "razzle": "^2.4.0",
    "sass-loader": "^7.1.0"
  }

λͺ¨λ“  15 λŒ“κΈ€

아직 ν†΅ν•©λ˜κ³  μžˆλ‹€λŠ” μ†Œμ‹μ΄ μžˆμŠ΅λ‹ˆκΉŒ?

λ‚˜λŠ” 이것을 razzle.config.jsμ—μ„œ ν™•μž₯ν–ˆμŠ΅λ‹ˆλ‹€.

"use strict";

const MiniCssExtractPlugin = require("mini-css-extract-plugin");

module.exports = {
  modify: (config, { target, dev }, webpack) => {

    const appConfig = Object.assign({}, config);

    // Setup SCSS
    if (target === "web") {

      appConfig.module.rules.push(
        {
          test: /\.(sa|sc|c)ss$/,
          use: [
            dev ? 'style-loader' : MiniCssExtractPlugin.loader,
            'css-loader',
            'sass-loader',
          ]
        }
      );

    }
    else {
      // On the server, we can just simply use css-loader to
      // deal with scss imports
      appConfig.module.rules.push({
        test: /\.(sa|sc|c)ss$/,
        use: "css-loader"
      });
    }

    return appConfig;
  }
};

개발자 쒅속성:

"devDependencies": {
    "css-loader": "^1.0.0",
    "mini-css-extract-plugin": "^0.4.1",
    "node-sass": "^4.9.2",
    "razzle": "^2.4.0",
    "sass-loader": "^7.1.0"
  }

헐! κ·Έλž˜μ„œ μ—¬κΈ° μ˜€ν”ˆ μ†ŒμŠ€μ™€ 일상 업무 및 μ‚Ά μ‚¬μ΄μ˜ κ±°λž˜κ°€ μžˆμŠ΅λ‹ˆλ‹€. μ €λŠ” 관리해야 ν•  것이 많기 λ•Œλ¬Έμ— GitHub 봇을 μ‚¬μš©ν•˜μ—¬ μ—¬κΈ°μ €κΈ°μ„œ λͺ‡ 가지λ₯Ό μžλ™ν™”ν•©λ‹ˆλ‹€. 이 νŠΉμ • GitHub 봇은 졜근 ν™œλ™μ΄ ν•œλ™μ•ˆ μ—†μ—ˆκΈ° λ•Œλ¬Έμ— 이것을 λΆ€μ‹€ν•œ κ²ƒμœΌλ‘œ ν‘œμ‹œν•  κ²ƒμž…λ‹ˆλ‹€. λ©°μΉ  λ™μ•ˆ 더 이상 ν™œλ™μ΄ μ—†μœΌλ©΄ νμ‡„λ©λ‹ˆλ‹€. 이 μž‘μ—…μ„ 개인적으둜 μ‹¬κ°ν•˜κ²Œ 받아듀이지 λ§ˆμ‹­μ‹œμ˜€. 이것은 μ™„μ „νžˆ μžλ™ν™”λœ μž‘μ—…μž…λ‹ˆλ‹€. 이것이 μ‹€μˆ˜λΌλ©΄ λŒ“κΈ€, DM, 캐리어 λΉ„λ‘˜κΈ° λ˜λŠ” μ—°κΈ° μ‹ ν˜Έλ₯Ό λ³΄λ‚΄μ£Όμ‹­μ‹œμ˜€.

@jaredpalmer Hacktoberfest λ ˆμ΄λΈ”μ„ μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

예

쒋은 μ΄λŒ€

λ¬Όλ‘  ν”ŒλŸ¬κ·ΈμΈμ΄λž€ 무엇을 μ˜λ―Έν•©λ‹ˆκΉŒ? λ‹€μŒ 곡식 ν”ŒλŸ¬κ·ΈμΈμ΄ λ§ˆμŒμ— λ“œμ‹œλ‚˜μš”?

νŒ¨ν‚€μ§€ 디렉토리에 곡식 ν”ŒλŸ¬κ·ΈμΈμ΄ μžˆμŠ΅λ‹ˆλ‹€. κ±°κΈ°μ—μ„œ λͺ‡ 가지 예λ₯Ό λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

λ‚΄ λ²„μ „μ˜ sc 톡합도 κ³΅μœ ν•˜κ² μŠ΅λ‹ˆλ‹€. λˆ„κ΅°κ°€μ—κ²Œ μœ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

scss에 λŒ€ν•œ CSS κ·œμΉ™μ„ μž¬μ •μ˜ν•  ν•„μš”κ°€ μ—†λ‹€κ³  μƒκ°ν•˜μ—¬ 원본을 λ³΅μ‚¬ν•˜κ³  scss λ‘œλ”λ₯Ό μΆ”κ°€ν•˜λŠ” μ€‘μž…λ‹ˆλ‹€.

'use strict';

const makeLoaderFinder = require('razzle-dev-utils/makeLoaderFinder');
const paths = require('razzle/config/paths');

const cssLoaderFinder = makeLoaderFinder('css-loader');
module.exports = {
    modify(baseConfig, {dev}, webpack) {
        /* make a copy of config */
        const config = Object.assign({}, baseConfig);

        const scssLoader = {
            loader: require.resolve('sass-loader'),
            options: {
                sourceMap: dev,
            },
        };

        // Copy base css rules and add scss support
        config.module.rules.filter(cssLoaderFinder).forEach(rule => {
            const isCssModuleRule = !rule.test.test('module.css');
            const scssExclude = [paths.appBuild];
            let scssTest = /\.s[ac]ss$/;
            if (isCssModuleRule) {
                scssTest = /\.module\.s[ac]ss$/;
            } else {
                scssExclude.push(/\.module\.s[ac]ss$/);
            }

            // Use default configs
            config.module.rules.push({
                test: scssTest,
                exclude: scssExclude,
                use: [
                    ...rule.use,
                    scssLoader,
                ]
            });
        });

        // adding ./src to module resolver so I can import modules with absolute paths
        config.resolve.modules.push('./src');

        return config;
    },
};

λ‚΄ λ²„μ „μ˜ sc 톡합도 κ³΅μœ ν•˜κ² μŠ΅λ‹ˆλ‹€. λˆ„κ΅°κ°€μ—κ²Œ μœ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

scss에 λŒ€ν•œ CSS κ·œμΉ™μ„ μž¬μ •μ˜ν•  ν•„μš”κ°€ μ—†λ‹€κ³  μƒκ°ν•˜μ—¬ 원본을 λ³΅μ‚¬ν•˜κ³  scss λ‘œλ”λ₯Ό μΆ”κ°€ν•˜λŠ” μ€‘μž…λ‹ˆλ‹€.

'use strict';

const makeLoaderFinder = require('razzle-dev-utils/makeLoaderFinder');
const paths = require('razzle/config/paths');

const cssLoaderFinder = makeLoaderFinder('css-loader');
module.exports = {
    modify(baseConfig, {dev}, webpack) {
        /* make a copy of config */
        const config = Object.assign({}, baseConfig);

        const scssLoader = {
            loader: require.resolve('sass-loader'),
            options: {
                sourceMap: dev,
            },
        };

        // Copy base css rules and add scss support
        config.module.rules.filter(cssLoaderFinder).forEach(rule => {
            const isCssModuleRule = !rule.test.test('module.css');
            const scssExclude = [paths.appBuild];
            let scssTest = /\.s[ac]ss$/;
            if (isCssModuleRule) {
                scssTest = /\.module\.s[ac]ss$/;
            } else {
                scssExclude.push(/\.module\.s[ac]ss$/);
            }

            // Use default configs
            config.module.rules.push({
                test: scssTest,
                exclude: scssExclude,
                use: [
                    ...rule.use,
                    scssLoader,
                ]
            });
        });

        // adding ./src to module resolver so I can import modules with absolute paths
        config.resolve.modules.push('./src');

        return config;
    },
};

μ•ˆλ…•ν•˜μ„Έμš”, 이 razzle ꡬ성을 μ‚¬μš©ν•˜λ €λ©΄ μ–΄λ–€ devDependenciesκ°€ ν•„μš”ν•©λ‹ˆκΉŒ? 당신은 그듀을 μ–ΈκΈ‰ν•˜μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€

μ•ˆλ…•, 덜 읽을 μˆ˜μžˆλŠ” λΉ λ₯Έ μˆ˜μ •μ΄ μžˆμŠ΅λ‹ˆκΉŒ?
λ‚˜λŠ” μ–»λ‹€

Module parse failed: Unexpected character '@' (1:0)
You may need an appropriate loader to handle this file type.
> <strong i="7">@import</strong>

λ‚΄κ°€ 무엇을 μ„€μΉ˜ν•˜λ“  상관없이 λ“±

μ•ˆλ…•, 덜 읽을 μˆ˜μžˆλŠ” λΉ λ₯Έ μˆ˜μ •μ΄ μžˆμŠ΅λ‹ˆκΉŒ?
λ‚˜λŠ” μ–»λ‹€

Module parse failed: Unexpected character '@' (1:0)
You may need an appropriate loader to handle this file type.
> <strong i="8">@import</strong>

λ‚΄κ°€ 무엇을 μ„€μΉ˜ν•˜λ“  상관없이 λ“±

.less ꡬ성은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€. λ‚˜λŠ” 덜 μ‚¬μš©ν•˜μ§€ μ•Šκ³  sass만 μ‚¬μš©ν–ˆμ§€λ§Œ 일반 κ·œμΉ™μ΄ μ—¬μ „νžˆ μ μš©λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

'use strict';

const makeLoaderFinder = require('razzle-dev-utils/makeLoaderFinder');
const paths = require('razzle/config/paths');

const cssLoaderFinder = makeLoaderFinder('css-loader');
module.exports = {
    modify(baseConfig, {dev}, webpack) {
        /* make a copy of config */
        const config = Object.assign({}, baseConfig);

        const lessLoader = {
            loader: require.resolve('less-loader'),
            options: {
                sourceMap: dev,
            },
        };

        // Copy base css rules and add less support
        config.module.rules.filter(cssLoaderFinder).forEach(rule => {
            const isCssModuleRule = !rule.test.test('module.css');
            const lessExclude = [paths.appBuild];
            let lessTest = /\.less$/;
            if (isCssModuleRule) {
                lessTest = /\.module\.less$/;
            } else {
                lessExclude.push(/\.module\.less$/);
            }

            // Use default configs
            config.module.rules.push({
                test: lessTest,
                exclude: lessExclude,
                use: [
                    ...rule.use,
                    lessLoader,
                ]
            });
        });

        // adding ./src to module resolver so I can import modules with absolute paths
        config.resolve.modules.push('./src');

        return config;
    },
};

less-loader 및 less λ₯Ό μ„€μΉ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.

λ‚˜λŠ” μ§€κΈˆ ν•΄κ²°λ˜μ—ˆλ‹€κ³  μƒκ°ν•˜λŠ” scs에 λŒ€ν•œ λͺ‡ 가지 였래된 문제λ₯Ό 훑어보고 μžˆμŠ΅λ‹ˆλ‹€. ν˜„μž¬λ‘œμ„œλŠ” νŒ¨ν‚€μ§€κ°€ 더 적은 것 κ°™μ§€λŠ” μ•Šμ§€λ§Œ μ§€κΈˆμ€ scss ν”ŒλŸ¬κ·ΈμΈμ΄ μžˆμŠ΅λ‹ˆλ‹€.

scss νŒ¨ν‚€μ§€κ°€ 이제 여기에 κ²Œμ‹œλ˜μ—ˆμœΌλ©° μ €μ—κ²Œ 잘 λ§žμŠ΅λ‹ˆλ‹€.
https://www.npmjs.com/package/razzle-plugin-scss

μ—¬κΈ°μ—μ„œ 예λ₯Ό μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.
https://github.com/jaredpalmer/razzle/tree/master/examples/with-scss

λ‘˜ λ‹€ λ‹€μŒ 뢄기에 μΆ”κ°€λ˜μ–΄ λ‹«νž™λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰