donaricano-btn

웹팩 멀티 번들관리

(https://webpack.js.org/guides/output-management/ - 번역)


1. 멀티 번들처리

- 프로젝트 규모가 증가 할 수록 많은 수에 번들파일이 생성된다. 웹팩은 이런 번들 파일을 index.html 에서 관리하는 방법을 제공한다.


2. 멀티 번들 설정

1) project

  webpack-demo
  |- package.json
  |- webpack.config.js
  |- /dist
  |- /src
    |- index.js
+   |- print.js
  |- /node_modules

2) print.js

export default function printMe() {
  console.log('I get called from print.js!');
}

3) index.js

  import _ from 'lodash';
+ import printMe from './print.js';

  function component() {
    var element = document.createElement('div');
+   var btn = document.createElement('button');

    element.innerHTML = _.join(['Hello', 'webpack'], ' ');

+   btn.innerHTML = 'Click me and check the console!';
+   btn.onclick = printMe;
+
+   element.appendChild(btn);

    return element;
  }

  document.body.appendChild(component());

4) index.html 

  <!doctype html>
  <html>
    <head>
-     <title>Asset Management</title>
+     <title>Output Management</title>
+     <script src="./print.bundle.js"></script>
    </head>
    <body>
-     <script src="./bundle.js"></script>
+     <script src="./app.bundle.js"></script>
    </body>
  </html>

- 엔트리 포인트에 따라 번들해야될 js 가 생성된다. 그리고 이 파일들을 임포트한다.

5) webpack.config.js

  const path = require('path');

  module.exports = {
-   entry: './src/index.js',
+   entry: {
+     app: './src/index.js',
+     print: './src/print.js'
+   },
    output: {
-     filename: 'bundle.js',
+     filename: '[name].bundle.js',
      path: path.resolve(__dirname, 'dist')
    }
  };

- 엔트리 포인트를 설정하여 각각의 번들을 생성하고 관리할 수 있다.

- 문제점: 만약 엔트리 포인트이름을 변경하거나 새로운 엔트리가 생기게 된다면 어떻게 될까?? index.html 파일에는 기존에 있던 파일을 그대로 참조하고 있다. 일일이 수정해야되는 번거로움이 있다.


HtmlWebpackPlugin


1. HtmlWebpackPlugin 이란?

- 위의 문제점보완 하고자 webpack에서 제공하는 플러그인이다. 

- 해당 플러그인을 설치하면 변하는 엔트리포인트에 대하여 개발자가 index.html의 js 파일 참조를 수정할 필요 없다


2. 설치

npm install --save-dev html-webpack-plugin


3. webpack.config.js

  const path = require('path');
+ const HtmlWebpackPlugin = require('html-webpack-plugin');

  module.exports = {
    entry: {
      app: './src/index.js',
      print: './src/print.js'
    },
+   plugins: [
+     new HtmlWebpackPlugin({
+       title: 'Output Management'
+     })
+   ],
    output: {
      filename: '[name].bundle.js',
      path: path.resolve(__dirname, 'dist')
    } 



CleanWebpackPlugin

1. CleanWebpackPlugin

- 프로젝트를 진행하다보면 dist의 사용하지 않는 파일들이 존재한다. 이런 파일들을 자동으로 정리(제거)해준다.


2. 설치

npm install clean-webpack-plugin --save-dev


3. webpack.config.js

 const path = require('path');
  const HtmlWebpackPlugin = require('html-webpack-plugin');
+ const CleanWebpackPlugin = require('clean-webpack-plugin');

  module.exports = {
    entry: {
      app: './src/index.js',
      print: './src/print.js'
    },
    plugins: [
+     new CleanWebpackPlugin(['dist']),
      new HtmlWebpackPlugin({
        title: 'Output Management'
      })
    ],
    output: {
      filename: '[name].bundle.js',
      path: path.resolve(__dirname, 'dist')
    }
  };


블로그 이미지

리딩리드

,
donaricano-btn

웹팩의 로더사용(webpack Loader)

(https://webpack.js.org/guides/asset-management/ - 번역)


1. 로더란?

- 프론트엔드 개발을 하면서 필요한 자원들(images, css, font, json....)을 관리하기 위해 필요하다

- 웹팩에서는 모든 파일을 모듈 단위로 다룬다. 그리고 이런 모듈을 동적으로 묶음으로서 파일간의 의존관리를 하고 필요없는 파일은 제외시킬 수 있다.


2. Loading CSS

1) 설치

npm install --save-dev style-loader css-loader

2) webpack.config.js

 const path = require('path');

  module.exports = {
    entry: './src/index.js',
    output: {
      filename: 'bundle.js',
      path: path.resolve(__dirname, 'dist')
    },
+   module: {
+     rules: [
+       {
+         test: /\.css$/,
+         use: [
+           'style-loader',
+           'css-loader'
+         ]
+       }
+     ]
+   }
  };

- 원하는 파일에 css 파일을 import 시키면 사용 가능하다.

- webpack 내부적으로 모듈화 시킬 때 <head> 에 자동으로 인젝션한다.

3) style.css

.hello {
  color: red;
}

4) index.js

  import _ from 'lodash';
+ import './style.css';

  function component() {
    var element = document.createElement('div');

    // Lodash, now imported by this script
    element.innerHTML = _.join(['Hello', 'webpack'], ' ');
+   element.classList.add('hello');

    return element;
  }

  document.body.appendChild(component());

5) npm run build


3. 기타로더

- image, font, json, xml..... 사이트에서 확인가능하다.



'Tools > webpack' 카테고리의 다른 글

[webpack] 웹팩 멀티 번들관리  (0) 2018.06.21
[webpack] 웹팩 기본 사용법 - webpack HelloWorld  (0) 2018.05.15
블로그 이미지

리딩리드

,
donaricano-btn

Java8 - 함수형인터페이스 그리고 람다의 활용


1. 실행 어라운드 패턴에 적용

- 데이터베이스의 파일 처리의 경우 자원 오픈, 처리, 자원 클로즈의 절차를 갖는다. 

- 실제 자원을 처리하는 코드가 설정과 정리과정 사이에 존재 한다면 이를 실행 어라운드 패턴이라 부른다.


2. 함수형 인터페이스를 이용해서 동작 전달

1) 함수형 인터페이스란?

- 정확히 하나의 추상 메서드를 지정하는 인터페이스이다.(Comparator, Runnable)

2) BufferedReaderProcessor.class

 

3) 실행어라운드 패턴 수정

 


3. 람다 전달

 


블로그 이미지

리딩리드

,
donaricano-btn

Java8 - 동작파라미터화 (predicate 활용)


1. 문제

- 사과 리스트 중에 150 그램 이상의 빨간 사과를 찾아라


2. 기존 자바의 필터링

- 색상이 빨간색 사과만 골라내서 담는다.

- 그러나 추가적으로 요구사항이 생길 경우 일일이 변경해야 한다.


3.  디자인 패턴을 이용한 필터링

1) filterApple 메소드

2) interface - predicate 사용

3) implements 

- 기존 자바의 필터링보다 유연하게 대처 가능하다. 그러나 interface 를 따로 만들어야 한다는 번거로움이 있다.


4. 익명클래스 사용한 필터링

1) filterApple

- 익명클래스 사용하면 간결하다. 그러나 가독성이 떨어져 한눈에 보기 힘들다.


5. 람다 표현식 사용

- 간결해졌다.


6. 리스트의 추상화와 람다를 이용한 필터링

1) interface

2) filter() 

3) 사용

- 추상화를 통하여 간결함을 물론 다양한 형태를 필터링 할 수 있다.





블로그 이미지

리딩리드

,