[Javascript] Webpack: 자바스크립트 번들러

[원본 링크]

웹팩은 더 멋진 자바스크립트 개발을 위한 모듈 번들러다.
모듈과 모듈에서 사용된 css, 이미지 파일 등을 묶어서 하나, 혹은 몇개의 파일로 번들링한다.
이렇게 파일들을 잘 합쳐주기 때문에, 스크립트나 파일들이 온통 나뉘어있을 때의 로딩 부하를 줄일 수 있다.
더불어 트랜스파일러인 babel 등과도 궁합이 좋다.

웹팩은 여느 웹 관련 프로그램들이 그렇듯이, npm을 통해 설치한다.
노드가 깔려있지 않다면 깔자.

설치하고.

프로젝트 폴더를 적당히 만든다. 난 webpack_start로 했다.

그리고 에디터로 연다. 뭘로 해도 상관없지만.
vscode를 가장 추천한다.

터미널을 열어서 지역에도 webpack을 설치한다.

자바스크립트 버전 트랜스파일을 하기 위해 babel도 깔아주자.
이건 전역 말고 프로젝트 폴더에만 놓도록 하자.

맨 뒤의 babel-loader가 웹팩과의 연동을 책임지는 프로그램이다.

깔건 대충 다 깐것같다.
이제 설정파일들을 만들어주자. 좀 많다.

먼저 웹팩 설정파일을 써넣는다. 이름은 webpack.config.js.

var webpack = require('webpack');

module.exports = {
    mode: 'development',
    entry: { 
        main: __dirname + "/src/index.js" //진입점 명시
    },
    output: {
        path: __dirname+"/public/dist/", //번들링할 파일경로
        filename: '[name].js', //출력할 파일명
        publicPath: '/dist' //서버에서 접근할 때 경로
    },
    module: {
        rules: [
            {
                test: /.js$/, //.js로 끝나는 파일에 대한 정규표현식
                exclude: /node_modules/, //트랜스파일 대상 제외
                use: {
                    loader: 'babel-loader', //트랜스파일러
                    options: {
                        presets: ['@babel/preset-env']
                    }
                }
            }
        ]
    }
};

이번엔 npm 설정파일을 만들어야 한다.
npm run으로 돌릴 것이기 때문이다...

{
    "scripts": {
        "build": "webpack"
    },
    "name": "webpack_test",
    "version": "0.0.0",
    "description": "Boom!!",
    "main": "index.js",
    "author": "김경직",
    "license": "MIT License",
    "devDependencies": {
        "@babel/core": "^7.6.4",
        "@babel/preset-env": "^7.6.3",
        "babel-loader": "^8.0.6",
        "webpack": "^4.41.2",
        "webpack-cli": "^3.3.10"
    }
}

디렉터리를 만들어주자.
정적파일들을 둘 public과, 자바스크립트 소스들을 둘 src.
그리고 src에는 따로 util이라는 디렉터리를 만들었다.

먼저 public에 기본으로 돌아갈 html을 하나 만들자.
숫자를 입력받아서 버튼으로 그걸 감지하는 형식이다.
포함될 스크립트로는 아까 지정한대로 출력될 소스인 main.js를 넣는다.

팩토리얼 함수를 따로 구현해서 모듈화한 소스파일을 util의 math.js로 저장한다.

꼭 export로 배출해야 한다. 그래서 다른곳에서 import가 가능하다.

그리고 진입점이 되는 index.js에서는, 저걸 import해서 사용한다.

버튼에 이벤트를 등록했다.

다 됐으면 npm run build로 아까 등록했던 package.json의 스크립트를 실행하면 된다.

이제 아까 index.html을 돌려보자.

잘 된다.

이것만으로도 충분히 작업을 수행할 순 있지만, 좀 부족한 것이 있다.
소스를 수정할때마다 build하고 다시 로딩해야한단 것이다.
webpack-dev-server라는 것을 사용하면 핫 리로딩을 통해 그런 귀찮음을 감축할 수 있다.

그리고 package.json에 다음 구문을 추가한다.

webpack 설정파일을 열어서 devServer라는 속성도 추가해준다.

webpack-cli란 놈도 깔아준다.

그럼 다 됐다.
npm run start

그럼 이렇게 잘 뜬다.

이 상태에서 js 소스를 고치고 저장하면,

알아서 컴파일하고 리로딩해준다.
이게 핫 리로드다.

다만, public에 있는 정적 파일들은 핫 리로딩의 대상이 되지 않는 것 같다.
자바스크립트 소스만.