Cog Factory 2020. 9. 1. 15:15

소개

  Back-end 영역은 90%정도 끝났다. 이제는 Front-end 부분을 할 것이다. Front-end에서 나는 SASS(pre-CSS)와 modern JS를 사용할 것이다. 그러기 위해서는 webpack을 설치해야 한다. Webpack은 module bundler인데, 내가 SASS와 JS 등을 webpack에게 주면 webpack은 브라우저와 호환될 수 있도록 static 파일들로 변환해준다. 즉, SASS를 주면 CSS로 바꿔주고 modern JS는 노멀한 JS로 변환해서 브라우저가 알아들을 수 있도록 해준다.

webpack

설치

  #npm install webpack webpack-cli
  #npm install extract-text-webpack-plugin@next
  #npm install cross-env
  #npm install css-loader postcss-loader sass-loader
  #npm install babel-loader
  #npm install autoprefixer
  #npm install node-sass

webpack & webpack-cli

webpack을 사용할 수 있게끔 한다.

extract-text-webpack-plugin

  Webpack이 SCSS파일을 찾고 그것을 CSS로 바꾼다. 그리고 거기서 CSS에 해당하는 텍스트를 추출해서 CSS 파일로 만드는 것이 extract-text-webpack-plugin이다.

cross-env

  플랫폼에 맞게 환경변수를 설정할 필요가 없이 단일 명령을 가질 수 있게 한다. 예를 들어, POSIX 시스템에서만 사용할 수 있는 환경설정을 window에서도 똑같이 적용될 수 있게 도와준다.

css-loader@3.6 postcss-loader sass-loader

  SCSS파일을 CSS로 파일로 변환하고 싶다면, 먼저 .SCSS 파일을 postcss로 바꾸고 postcss를 css로 바꿔야 한다. 그러기 위해서 위 3가지 loader가 필요하다.

  css-loader는 3.6버전으로 받아야 한다. 그래야 extrac-text-webpack-plugin이 error가 없이 styles.css를 만들 수가 있다. 왜 그런지는 나도 모르겠다. 아는 사람이 있다면 댓글을 달아주면 감사합니다.

babel-loader

  normal JS를 modern JS로 바꿔준다.

autoprefixer

  브라우저마다 지원하는 css가 다르다. Chrome, firefox, MSEdge 등 지원하는 CSS가 있고 지원하지 않는 CSS가 있다. 개발자가 이것을 신경쓰지 않게 도와주는 것이 autoprefixer다. autoprefixer가 SCSS를 CSS로 변환하면서 브라우저 별로 webkit- 같은 prefixer를 붙여준다.

node-sass

node.js에서 sass를 사용할 수 있게 하는 모듈이다.

 

설정

package.json에서 "scripts"를 다음과 같이 바꿔준다. 

  • dev:server => execute server
  • dev:assets => execute webpack which changes modern JS & SASS to normal JS & CSS

package.json

webpack.config.js

const path = require('path');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const autoprefixer = require('autoprefixer');

const ENTRY_FILE = path.resolve(__dirname, 'assets', 'js', 'main.js');
const OUTPUT_DIR = path.join(__dirname, 'static');

const config = {
  // WEBPACK_ENV는 .env에서 정의하지 않았지만 package.json에서 script에 있는 dev:assets로 정의했다.
  mode: process.env.WEBPACK_ENV,
  entry: ENTRY_FILE,
  output: {
    filename: 'main.js',
    path: OUTPUT_DIR,
  },
  module: {
    rules: [
      {
        test: /\.(js)$/,
        use: {
          loader: 'babel-loader',
        },
      },
      {
        test: /\.(scss)$/,
        use: ExtractTextPlugin.extract([
          {
            loader: 'css-loader',
          },
          {
            loader: 'postcss-loader',
            options: {
              plugins() {
                return [autoprefixer({ browsers: 'cover 99.5%' })];
              },
            },
          },
          {
            loader: 'sass-loader',
          },
        ]),
      },
    ],
  },
  plugins: [new ExtractTextPlugin('styles.css')],
};

module.exports = config;

app.js

  webpack으로 transcompiling을 끝내면 static 파일에 main.js와 styles.css가 생긴다. pug가 이들을 사용하기 위해서 다음과 같이 express.static으로 경로를 설정해줘야 한다.

참고 자료

소스 코드

https://github.com/zpskek/wetube-v3/commit/9edbb3b2298b148ea102c2844e81a164a989e46e