Posts [프론트엔드 개발환경의 이해와 실습] 엔트리/아웃풋 실습
Post
Cancel

[프론트엔드 개발환경의 이해와 실습] 엔트리/아웃풋 실습

웹팩의 엔트리와 아웃풋

이전 포스팅에서 웹팩이 필요한 이유에 대해 알아보았다. 짧게 요약하면 모든 브라우저 환경에서 모듈 시스템을 적용하기 위해서이다.

스크린샷 2022-03-17 오후 9 48 12 출처: webpack.js.org

왼쪽 이미지처럼 웹팩은 js를 비롯한 여러 모듈들을 하나로 묶어주는 번들러 역할을 한다. 이전 예시에서 app.js는 math.js 파일을 import 키워드로 가지고 있다. 이는 app.js는 math.js 에 대한 의존성을 가지고 있다고 표현할 수 있는데 웹팩은 이러한 의존성을 가진 모든 모듈들을 하나의 번들(오른쪽 이미지에서 js, css, img 등 하나 하나를 번들이라 한다)로 묶어주는 역할을 한다.

실습

실제 웹팩 역할을 하는 웹팩 패키지와 terminal 명령어를 쓸 수 있게 해주는 cli 패키지를 설치해보자.

1
npm install -D webpack@4 webpack-cli@4

스크린샷 2022-03-17 오후 9 56 21

설치 후 위 이미지처럼 -D 옵션을 주었기에 devDependencies 에 두 개가 추가되었을 것이다. dependencies와 devDependencies의 차이는 다음과 같다.

  • dependencies: 실제 프로젝트에 사용되는 패키지
  • devDependencies: 개발용 패키지

스크린샷 2022-03-17 오후 9 58 34

설치 node_modules 폴더 안의 .bin 디렉토리 내부를 보면 다음과 같이 정상적으로 설치된 것을 확인할 수 있다.

–help 옵션으로 사용 방법을 확인해 보자.

1
2
3
4
5
6
$ node_modules/.bin/webpack --help

  --mode                 Enable production optimizations or development hints.
                                     [선택: "development", "production", "none"]
  --entry      The entry point(s) of the compilation.                   [문자열]
  --output, -o                  The output path and file for compilation assets

webpack을 실행할땐 필수적으로 3개의 옵션이 필요하다.

  • mode: 웹팩 실행 모드는 의미하는데 개발 버전인 development를 지정한다(production: 운영, none: 없음)
  • entry: 시작점 경로를 지정하는 옵션(module의 시작점)
  • output: 번들링 결과물을 위치할 경로

다음 명령어를 실행하여 실제 웹팩을 실행시켜 보자.

1
node_modules/.bin/webpack --mode development --entry ./src/app.js -o dist

스크린샷 2022-03-17 오후 10 16 17

그러면 웹팩에 의해 번들링된 결과물을 dist 티렉토리에 안에 위치하는 것을 볼 수 있을 것이고 똑같이 index.html 에서 로드하면 똑같은 결과가 실행된 것을 볼 수 있다.

이렇게 웹팩은 여러 개의 모듈을 하나의 파일(번들)로 만들어주는 역할을 한다. 옵션에 필수 인자 세개만 전달해줬지만 이후에는 더 많은 옵션을 주어야만 할 것이다.

하지만 매번 이렇게 매번 옵션을 주며 실행하는 것은 정말 참 번거로운 일이다. 그러기에 웹팩 설정 파일(webpack.config.js)을 따로 만들어보자.

웹팩 설정 파일(webapck.config.js)

1
2
3
4
5
6
7
8
9
10
11
12
13
const path = require('path');

module.exports = { // es6의 모듈 시스템은 아니고 node의 모듈 시스템이다.(CommonJS)
    mode: 'development',
    entry: {
        main: './src/app.js',
        main2: './src/app2.js',
    },
    output: {
        path: path.resolve('./dist'), // output 디렉토리는 절대 경로명을 입력해준다. node의 path 모듈을 가져와서 활용해준다.
        fileaname: '[name].js' // 번들링된 파일명, entry에서 설정한 key값으로 치환된다., entry가 여러 개일 수도 있기에 output도 여러 개가 일 수 있다. 따라서 이렇게 key 값으로 동적으로 파일명을 만들어줄 수 있다.
    }
}

위의 main2를 삭제하고 웹팩을 실행시켜 보자.

이번에는 직접 커맨드라인으로 실행시키는 것이 아닌 npm(프로젝트를 관리하는 도구)의 스크립트를 자동화해주는 기능을 활용해보자. 즉, webpack으로 번들링하는 과정을 npm script에 등록해보자.

스크린샷 2022-03-17 오후 10 26 44

이전과는 다르게 옵션을 다 안적어주어도 된다. webpack명령어만 적어주면 자동적으로 node_modules에 있는 webpack 커맨드라인을 찾아 기본 설정 파일인 (webpack.config.js)를 읽어서 실행시켜 준다.

이것을 실행하려면 다음 명령어를 실행시켜주면 된다.

1
npm run build

스크린샷 2022-03-17 오후 10 29 20

그러면 정상적으로 dist디렉토리 밑에 번들 결과가 보일 것이다.

출처

This post is licensed under CC BY 4.0 by the author.

[프론트엔드 개발환경의 이해와 실습] 프론트엔드 개발환경의 이해: NPM

[프론트엔드 개발환경의 이해와 실습] 모듈